Wartet PHP darauf, dass Dateisystemoperationen (wie file_put_contents) abgeschlossen werden, bevor es weitergeht?

7

Ich habe eine Frage darüber, wie PHP Dateisystemoperationen handhabt. Ich verwende diesen Code, der davon abhängt, dass eine Datei erstellt wird, bevor sie verwendet wird, und es fühlt sich an, als ob ich den Code ausführen würde - manchmal funktioniert es, die Datei wird erstellt und der PHP-Code verwendet sie, manchmal auch schlägt fehl.

Also habe ich mich gefragt, wie php Dateisystemoperationen behandelt, sendet es im Hintergrund oder wartet es, bis die Operation abgeschlossen ist?

    
Matt 21.07.2010, 23:39
quelle

4 Antworten

6

Ja, es sei denn, Sie öffnen ein Datei-Handle und setzen es dann auf den nicht blockierenden Modus: stream_set_blocking()

    
ircmaxell 21.07.2010, 23:46
quelle
8

file_put_contents entspricht fopen , fwrite , fclose . fclose sollte sicherstellen, dass die Datei vollständig auf die Festplatte geladen wurde.

    
Matthew Flaschen 21.07.2010 23:46
quelle
3

PHP sollte warten, bis der Prozess abgeschlossen ist. Aber nicht zu wissen, wie Sie die Operationen implementieren, ist schwer zu sagen. Wenn Sie einen Beispielcode posten können, den Sie verwenden, wäre das hilfreich, damit wir Ihnen helfen können, herauszufinden, warum es nicht richtig funktioniert.

    
Brad F Jacobs 21.07.2010 23:42
quelle
2

Jahr 2013, auf meinem gemeinsamen Garten Vielfalt Linux vps mit cpanel, mit Standardeinstellungen, mit php 5.2.17, file_put_contents dauert immer ~ 5ms für kurze String-Längen.

Zufällig 5ms ist ungefähr die volle festgeschriebene Schreibzeit einer hochwertigen Festplatte.

%Vor%

Dies dauert ~ 5ms konsistent. Das scheint Blockieren und Spülen zu beinhalten. Also für diejenigen, die sich über die Geschwindigkeit von file_put_contents wundern, mindestens 5ms / Betrieb auf gemeinsamen Servern 2013 04.

Wenn Sie Geschwindigkeit brauchen, zum Beispiel für eine Protokollierung, sagte @Matthew Flaschen:

%Vor%

Dann braucht man:

%Vor%

Aber es wird etwas Forschung brauchen, um herauszufinden, was passiert, wenn Dateigriffe offen bleiben. PHP schließt sie beim Beenden , aber tut es das wirklich ständig? Selbst wenn es abstürzt? Was passiert wenn eine Datei nach einem Absturz von PHP offen gelassen wird? usw. usw. Nach 30 Minuten php manuellen Lesens und Googelns wurden solche und ihre Folgen nicht erwähnt.

    
Johan 10.04.2013 06:25
quelle

Tags und Links