2010-12-02 10 views
0

何が起こっているのか分かりません!実行ごとに保存できるファイル数には制限がありますか?PHP - file_put_contentsはファイルの半分しか保存しませんか?

だから、私は別のサーバ上のイメージへのURLのリストを持つ配列を持っています。これは正常に機能し、有効なURLを返します。問題はそれらを保存しようとすると、100のURLが返されたときに52ファイルしか保存されないということです。あなたは、私はそれが100にまで追加行をカウントした後、私は、画像を保存する前のImagePathをエコー、それを参照として(いや、もちろん私はそれらを手動でカウントされませんでした!)

私はループを実行していますよ:

for ($i=0; $i <= $count; ++$i) { 
    $url = $response['images'][$i]['image']; 
    $path = 'exported/'.$response['images'][$i]['date'].'.jpg'; 

    echo $response['images'][$i]['image'].'<br />'; 
    file_put_contents($path, file_get_contents($url)); 
} 

何が起こっているのですか? ありがとう!

+0

「$ path」が繰り返されていますか?もしそうなら、48ファイルが繰り返されます... – ajreal

+0

max_execution_timeをチェックしましたか? – Ish

+0

私はそれがメモリの限界の問題かもしれないかと思います。 –

答えて

0

おそらく、PHPから100枚の画像をダウンロードしようとしているスクリプトのタイムアウトに達しています。スクリプティング言語として、PHPは1-2000msの間しか動作しません。しかし、PHPの基本的なインストールでは、スクリプトの実行時間が30秒に設定されていると思います。

+0

そうは思わない、私はset_time_limit(0)を追加しました。頂点に。私はそれを言及すべきだった、申し訳ありません!他のアイデア? – Lamp

2

エントリの一部が$response['images'][$i]['date']に同じ値を持っていますか?同じ出力ファイル名($path)を生成していて、ファイルを上書きしている可能性があります。 $response['images'][$i]['date']をエコーし​​て確認してください

+0

ええ、それはそれでした!ありがとう、本当に私を悩ませていた。 – Lamp

+0

@Lampこれで解決策が返されたことを確認しました。 '$ successArray [] = file_put_contents($ path、file_get_contents($ url));'そしてforeachループを実行する/いくつかの配列関数を使う(http://php.net/manual/en/ref.array.php)全体的な成功を確認してください。これにより、障害が発生した場合に早めに警告します –

0

/etc/php5/cgi/php.ini(/ etc/php [x]/xxxの別の場所にある可能性があります)のphp.iniファイルを編集したい場合があります)以下の設定を行います。

;;;;;;;;;;;;;;;;;;; 
; Resource Limits ; 
;;;;;;;;;;;;;;;;;;; 

max_execution_time = 30  ; Maximum execution time of each script, in seconds 
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data 
memory_limit = 16M  ; Maximum amount of memory a script may consume (16MB) 
関連する問題