2010-12-02 10 views
0

Ich habe keine Ahnung was los ist! Gibt es ein Limit für die Anzahl der Dateien, die pro Ausführung gespeichert werden können?PHP - file_put_contents speichert nur die Hälfte der Dateien?

Also, ich habe ein Array mit einer Liste von URLs zu Bildern auf einem anderen Server. Das funktioniert wie es sollte und es gibt gültige URLs zurück. Das Problem ist, wenn Sie versuchen, sie zu speichern, werden nur 52 Dateien gespeichert, wenn 100 URLs zurückgegeben werden. Wie Sie sehen, gebe ich den Bildpfad zurück, bevor ich das Bild speichere, und nach dem Zählen der Zeilen addiert es 100. (Nein, natürlich habe ich sie nicht manuell gezählt!)

Ich bin eine Schleife laufen :

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)); 
} 

Irgendwelche Ideen, was los ist? Vielen Dank!

+0

jeder wiederholte $ Pfad? Wenn ja, werden 48 Dateien wiederholt ... – ajreal

+0

hast du max_execution_time überprüft? – Ish

+0

Ich frage mich, ob es ein Problem mit dem Speicherlimit sein könnte. –

Antwort

0

Sie erreichen wahrscheinlich das Skript-Timeout, wenn Sie versuchen, 100 Bilder aus PHP herunterzuladen. Als Skriptsprache sollte PHP nur 1-2000ms laufen. Bei den grundlegenden PHP-Installationen ist die Skriptausführung jedoch auf 30 Sekunden eingestellt, was wahrscheinlich nicht lange genug für Ihr Skript ist.

+0

Denke nicht, ich habe set_time_limit (0) hinzugefügt; Zum Seitenanfang. Ich hätte das erwähnen sollen, Entschuldigung! Irgendwelche anderen Ideen? – Lamp

2

Haben einige der Einträge den gleichen Wert für $response['images'][$i]['date']? Möglicherweise generieren Sie den gleichen Ausgabedateinamen ($path) und überschreiben Dateien gegenseitig. Sie können versuchen, $response['images'][$i]['date'] zu verifizieren

+0

Ja, das war's! Danke Mann, es nervte mich wirklich. – Lamp

+0

@Lamp Nachdem Sie die Lösung gefunden haben, überprüfen Sie die Rückgabeparameter. '$ successArray [] = file_put_contents ($ path, file_get_contents ($ url));' und dann eine foreach-Schleife ausführen/eine Array-Funktion (http://php.net/manual/en/ref.array.php) verwenden Überprüfen Sie den Gesamterfolg. Dies wird Sie im Falle eines Fehlers früher warnen –

0

Sie können Ihre php.ini-Datei in /etc/php5/cgi/php.ini bearbeiten (möglicherweise an einer anderen Stelle in/etc/php [x]/xxx) und bis die folgenden Einstellungen:

;;;;;;;;;;;;;;;;;;; 
; 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) 
Verwandte Themen