代码之家  ›  专栏  ›  技术社区  ›  meder omuraliev

当本地数据不可用时,应用程序是否可以从外部Web资源下载数据?

  •  1
  • meder omuraliev  · 技术社区  · 15 年前

    不久前,我遇到了一个脚本,它基本上是从一个网络资源中获取一个国家/州的列表,如果它不在数据库中的话,这个脚本将用这些内容填充数据库,从那时起,依靠这些内容。

    因为我正在自己的本地化类中工作,所以我将使用Zend正在使用的相同的语言环境数据,格式大约为60个左右的XML文件,其中包含本地化数据,如国家、语言等语言。

    我认为,因为我正在工作的框架从现在开始(现在不在)将依赖于这些文件,而且现在没有任何服务器具有这些数据,我应该:

    • 设置我的Web应用程序以从中央服务器下载这些文件,其中所有内容都存储在.tar.gz中,将它们解包,存储在服务器上,然后依赖它们。
    • 创建一个单独的脚本来执行此操作,而不是在应用程序中执行此操作。

    伪代码:

    if ( !data ) {
        resource = getFile( 'http://central-server.com/tar.gz' );
        if ( resource ) {
            resource = unpack( directory, resource )
            return true
        }
        throw Exception('could not download files.')
    }
    
    3 回复  |  直到 15 年前
        1
  •  1
  •   Alix Axel    15 年前


    function Update()
    {
        $result = false;
    
        $databases = glob(HIVE_DIR . 'application/repository/GeoIP/GeoIP_*.dat');
    
        foreach ($databases as $key => $value)
        {
            $databases[$key] = basename($value);
        }
    
        $databases[] = 'GeoIP.dat.gz';
    
        $date = date('ym');
    
        if ((!in_array('GeoIP_' . $date . '.dat', $databases)) && (date('j') >= 2))
        {
            if ($this->Hive->Filesystem->Write(HIVE_DIR . 'application/repository/GeoIP/GeoIP.dat.gz', file_get_contents('http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz'), false) === true)
            {
                $handler = gzopen(HIVE_DIR . 'application/repository/GeoIP/GeoIP.dat.gz', 'rb');
    
                $result = $this->Hive->Filesystem->Write(HIVE_DIR . 'application/repository/GeoIP/GeoIP_' . $date . '.dat', gzread($handler, 2 * 1024 * 1024), false);
    
                gzclose($handler);
    
                foreach ($databases as $database)
                {
                    $this->Hive->Filesystem->Delete(HIVE_DIR . 'application/repository/GeoIP/' . $database);
                }
            }
        }
    
        return $result;
    }
    

    Update()

        2
  •  1
  •   jspcal    15 年前

        3
  •  1
  •   Matt Dunbar    15 年前