サーバーからファイルをストリーミングし、収集されたデータを一度に小さなチャンクで保存して、メモリオーバーフローをホストサーバーに保存するスクリプトがあります。
PHPスクリプトだと言いましたか?
これが仕組みです
//loop while data exists on the clients server side file.
while (!feof($xml_fp)) {
//grab data in proportions of specified chunk
//write the the collected chunk locally
//if there's an error, exit (improve error handling for final code)
$result = fwrite($local_fp, fread($xml_fp, $size), $size);
if($result === false){
echo"<h1> ERROR </h1>";
exit();
}
else {
$progress += $result;
ob_flush();
flush();
?>
//state amount of data downloaded thus far
<script>
$('#progress').html(' ');
$('#progress').append(<?php echo (float)$progress/(1024*1024) ?>);
</script>
<?php
//if all goes well, increase time limit by a second
set_time_limit(1);
}
}//while loop ends here
このスクリプトは、ローカルで適切に実行されます。問題がないことを確認するために、さまざまなサイズのファイルを使用してライブ サーバーで多くのテストを実行する必要がありますが、ファイルのサイズは 50 MB から 200 MB の範囲である可能性があります。
fread 関数と fwrite 関数にはかなりのオーバーヘッドがあることに注意してください。ダウンロード レートが 40 kbps を超えるとは予想していません。平均ダウンロード時間の見積もりでは、スクリプトの実行時間は約 10 分になります。
質問: 通常、サーバーはスクリプトの実行時間がこれほど長いことを検出すると、ファウルを呼び出すように構成されていますか? これは専用サーバーではなく、ミル共有リソースの実行にすぎないことに注意してください。したがって、execute() 呼び出しなどを介して wget で同じことを開始することはできません。