如果file_get_contents在当前正在写入文件时尝试读取文件,该怎么办?

时间:2019-01-25 10:55:24

标签: php

如果我有两个PHP脚本,则其中一个使用file_put_contents写入文件,而另一个使用file_get_contents读取同一文件。

如果正在写入文件,并且我尝试同时访问该文件以进行读取,我应该期待什么行为?读取会失败并显示错误吗?读取会等到写入完成吗?读取会得到部分内容吗?

1 个答案:

答案 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信号/标记,便会读取它。如果读取的值为空,它将停止进一步读取。

然后它将返回之前读取的结果。