0

以下のコードを使用して、1,000 を超える画像を含む別のサーバーから zip ファイルをダウンロードしています。ソース zip ファイルがダウンロードされ、サーバーに作成/コピーされていますが、コードはその時点で停止しているようです。以下の if else からのエコー出力も表示されません。

私はもともと CURLOPT_TIMEOUT を 240 に設定していましたが、それでは十分な長さではありませんでした。curl タイムアウト エラーが発生します。zip ファイルは 100MB 近くあるので、完了するまでに約 15 分かかると考えました。ソースのzipサイズは日によって異なるため、CURLOPT_TIMEOUTを1200に設定しました。

なぜそれが機能しなくなるのかについて何か考えはありますか? 変更が必要な設定はありますか?

$source_photos_file = 'source_photos_file.zip';
$curl = curl_init();
$destination_photos_file = fopen($_SERVER['DOCUMENT_ROOT'].'/files/photos.zip', 'w');

curl_setopt($curl, CURLOPT_URL, FTP_URL.$source_photos_file); #input
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_TIMEOUT, 1200);
curl_setopt($curl, CURLOPT_FILE, $destination_photos_file); #output

if (curl_exec($curl) === false)
{
    echo '<p>Curl error: ' . curl_error($curl). ' - error # '.curl_errno($curl).'</p>';
}
else
{
    echo '<p>Done without any errors</p>';
}

curl_close($curl);
fclose($destination_photos_file);

$photos_unzip_result = shell_exec('unzip -P password '.$_SERVER['DOCUMENT_ROOT'].'/files/photos.zip -d '.$_SERVER['DOCUMENT_ROOT'].'/files/pics_test/');
4

1 に答える 1

2

ここで実際に何をしているのかを詳しく見てみましょう。最高レベルのエラー ログやエラー ログの追跡などの基本的なトラブルシューティングの次に、実際に行っていることを見てみましょう。

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);    

ダウンロードを返すようにcurlに明示的に指示します。つまり、ダウンロードはメモリにコピーされます。特に出力ファイルをすでに指定しているので、そのオプションを無効にします。

これで問題が解決するかどうかはわかりませんが、お役に立てば幸いです。適切なエラー ログを作成し、通知、警告、エラーなどの具体的なエラー情報を提供します。

于 2012-12-16T06:57:38.500 に答える