我对PHP如何处理文件系统操作有疑问。我正在运行这个代码,它取决于在使用之前创建的文件,感觉就像我运行代码时它变成了竞争条件 - 有时它运行,文件被创建并且php代码使用它,有时它失败。
所以我想知道php如何处理文件系统操作,它是在后台发送它还是等到操作完成?
答案 0 :(得分:8)
file_put_contents
相当于fopen
,fwrite
,fclose
。 fclose
应确保将文件完全刷新到磁盘。
答案 1 :(得分:7)
是的,除非您打开文件句柄然后将其设置为非阻止模式:stream_set_blocking()
答案 2 :(得分:4)
2013年,在我的常见花园种类linux vps with cpanel,默认设置,php 5.2.17,file_put_contents总是需要~5ms短串长。
意外的5ms是关于高质量硬盘的完整承诺写入时间。
file_put_contents($filename,'abcdefghi...~100chars',FILE_APPEND);
这持续约5毫秒。这似乎包括'阻塞'和'冲洗'。所以对于那些想知道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.
然后需要:
function file_put_contents_fast() {...no fclose...}
但是需要进行一些研究才能找出如果文件句柄保持打开会发生什么。 Php closes them at exit,但它确实一直这样做吗?即使它崩溃了?如果文件在崩溃后由php保持打开会发生什么?经过30分钟的php手动阅读和谷歌搜索,没有提到这样及其后果。
答案 3 :(得分:3)
PHP应该等到该过程完成。但不知道你是如何实施这些操作的,很难说。如果你可以发布一个你正在使用的示例代码,那么我们可以帮助你找出它无法正常工作的原因。