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

时间:2012-10-25 19:03:58

标签: php file-io php-include

我有这样的脚本:

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

2 个答案:

答案 0 :(得分:0)

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

您对版本和操作系统更准确吗?

答案 1 :(得分:0)

我遇到了同样的问题。

编辑正确答案

您可以使用

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

如此处所述:PHP include doesn't read changes of source file