如果我有两个PHP脚本,则其中一个使用file_put_contents写入文件,而另一个使用file_get_contents读取同一文件。
如果正在写入文件,并且我尝试同时访问该文件以进行读取,我应该期待什么行为?读取会失败并显示错误吗?读取会等到写入完成吗?读取会得到部分内容吗?
答案 0 :(得分:1)
让我们看一下源代码
https://github.com/php/php-src/blob/master/ext/standard/file.c#L522
如果php_stream_open_wrapper_ex无法打开流,则返回false。 如果您提供的seek position无法读取,您会得到错误的回复
如果可行,它将尝试按照显示的长度复制stream to memory的内容
我们看到php_streams.h中定义的php_stream_cpy_to_mem
重新定义了_php_stream_copy_to_mem
,我们可以在streams.c中找到
然后我们在line 1411
中有一个有趣的部分 while ((len < maxlen) && !php_stream_eof(src)) {
因此,只要尚未读取文件且未遇到EOF信号/标记,便会读取它。如果读取的值为空,它将停止进一步读取。
然后它将返回之前读取的结果。