我有這樣的腳本:動態更改PHP中的文件。變化有時是不可見的包括(),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()一起玩也沒有任何影響。
PHP版本5.3.14,Linux的x86_64的 – Alex
在工作模式我用crontab,所以F5不是原因... $ i正常上升,include()沒有看到文件中的更改(大約10%的次數),但file_get_content()可以很好地查看所有更改 – Alex