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