我有一个关于PHP如何处理文件系统操作的问题.我正在运行这个代码,它取决于在使用之前创建的文件,感觉就像我运行代码时它变成了竞争条件 - 有时它运行,文件被创建并且php代码使用它,有时它失败.
所以我想知道php如何处理文件系统操作,它是在后台发送它还是等到操作完成?
file_put_contents
相当于fopen
,fwrite
,fclose
. fclose
应确保文件完全刷新到磁盘.
是的,除非您打开文件句柄然后将其设置为非阻止模式: stream_set_blocking()
2013年,在具有cpanel,默认设置和php 5.2.17的我的常见花园变种linux vps上,file_put_contents对于较短的字符串长度总是需要约5ms。
偶然地,5ms就是高质量HDD的全部承诺写入时间。
file_put_contents($filename,'abcdefghi...~100chars',FILE_APPEND);
Run Code Online (Sandbox Code Playgroud)
持续大约需要5ms。这似乎包括“阻塞”和“冲洗”。因此,对于那些想知道file_put_contents的速度的人,普通服务器2013 04上至少5ms /操作。
如果您需要速度,例如一些记录,@ Matthew Flaschen说:
file_put_contents is equivalent to fopen, fwrite, fclose.
fclose should ensure the file is fully flushed to disk.
Run Code Online (Sandbox Code Playgroud)
然后需要:
function file_put_contents_fast() {...no fclose...}
Run Code Online (Sandbox Code Playgroud)
但是需要进行一些研究才能找出如果打开文件句柄会发生什么情况。Php在出口处将其关闭,但实际上是否一直如此?即使崩溃?如果文件在崩溃后被php打开,会发生什么情况?等等等。经过30分钟的php手动阅读和谷歌搜索,没有提及此类及其后果。