0

我有这样的脚本:

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() 也没有影响。

4

2 回答 2

0

我也面临同样的问题。

编辑正确答案

您可以使用

opcache_invalidate('second.php');//Reset file cache

如此处所述:PHP包含不读取源文件的更改

于 2014-06-06T06:04:52.360 回答
0

似乎没有文件系统或文件锁定问题,因为在这两次文件中都写入了文件,但有一次数据不正确,比如 $i 没有升序,这很奇怪。我得到的唯一错误是当我按住 F5 时文件被锁定以进行写入,就是这样。

你能更准确地了解版本和操作系统吗?

于 2012-10-25T19:14:25.597 回答