繁体   English   中英

在PHP中动态更改的文件。 有时在include(),ftp_put()中看不到更改

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM