現在、Web から大きな (1.3 GB) 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で常にポーリングすることで、私が望むある種の進行状況通知に私を導きますか?
ただし、現在、必要なファイルをダウンロードできないため、最初の 2 点が最も重要です。どんな助けでも大歓迎です。