如果file_get_contents在当前正在写入文件时尝试读取文件,那么该行为是什么

问题描述 投票:1回答:1

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

如果正在写入文件并且我尝试同时访问它以进行阅读,我应该期待什么样的行为?读取是否会因错误而失败?读取是否等待写入完成?读取会获得部分内容吗?

php
1个回答
1
投票

我们来看看源代码

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

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

© www.soinside.com 2019 - 2024. All rights reserved.