我目前编写了一个脚本,开始从网上下载一个大的 (1.3GB) XML 文件,但我遇到了许多问题。这是我的代码:
function readfile_chunked ($filename) {
$chunksize = 1*(1024*1024);
$buffer = '';
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
//print $buffer;
$myFile = "test.xml";
$fh = fopen($myFile, 'a') or die("can't open file");
fwrite($fh, $buffer);
fclose($fh);
}
return fclose($handle);
}
第一个(也是主要)问题是下载时出现以下错误:
Fatal error: Maximum execution time of 30 seconds exceeded in /Applications/MAMP/htdocs/test/test.php on line 53
据我了解,这基本上是一个超时,我已经阅读了有关更改 php.ini 中的超时设置的信息,但我意识到当这个应用程序上线时,我将无法在共享服务器上编辑 php.ini 文件.
这个问题让我进入下一个问题——我想实施某种错误检查和预防。例如,如果与服务器的连接断开,我希望能够在连接恢复时恢复。我意识到这可能是不可能的。另一种方法是比较本地和远程的文件大小?
我还需要在我的请求中添加一个 Accept-Encoding: gzip HTTP 标头。
这最终会让我得到某种我想要的进度通知,大概是不断地用 JavaScript 轮询比较本地和远程文件大小?
然而,前两点将是最重要的,因为目前我无法下载我需要的文件。任何帮助,将不胜感激。