[英]Dynamically changed files in PHP. Changes sometimes are not visible in include(), ftp_put()
我有这样的脚本:
file_put_contents("filters.php", '<? $filter_arr = '.var_export($filter_arr, true).'; ?>');
include("filters.php");
要么:
$xml = '<?xml version="1.0" encoding="UTF-8"?>'."\n<xml>\n\t<items>\n".$xml_0."\n\t</items>\n</xml>";
file_put_contents($PROJECT_ROOT."/xml/$file_type.xml", $xml);
$upload_result = ftp_put($ftp_stream, $destination_file, $PROJECT_ROOT."/xml/$file_type.xml", FTP_BINARY);
实际上,对这些文件的更改实际上是物理应用的(写入文件中)。
但是有时在include()之后不可见,或者ftp_put()没有将其发送到远程服务器。
好像PHP会缓存此文件。
在include()之前添加sleep(1)并没有帮助。
A也有这样的测试:
for ($i=1; $i <= 100; $i++) {
echo "$i)";
$filter_arr = array($i);
file_put_contents("test.txt", '<? $filter_arr = '.var_export($filter_arr, true).'; ?>');
include("test.txt");
echo $filter_arr[0]."<br>";
}
正常输出的大约90%:
1) 1
2) 2
...
100) 100
大约有10%的时间输出错误:
1) 1
2) 1
...
100) 1
使用flock()或clearstatcache()也不起作用。
似乎没有文件系统或文件锁定问题,因为两次都写入了文件,但是一次写入了不正确的数据,例如$ i没有升序,这很奇怪。 我得到的唯一错误是当我按住F5键时文件被锁定以进行写入,仅此而已。
您能否更精确地了解版本和操作系统?
我也面临同样的问题。
编辑正确答案
您可以使用
opcache_invalidate('second.php');//Reset file cache
如此处所述: PHP include无法读取源文件的更改
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.