2012-10-25 11 views
0

我有這樣的腳本:動態更改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()一起玩也沒有任何影響。

回答

0

似乎沒有文件系統或文件鎖定問題,因爲在兩次寫入文件時,只有一次數據不正確,例如$ i不是升序,奇怪。只有我得到的錯誤是當我按住F5時文件被鎖定寫入,就是這樣。

你能更準確地使用版本和操作系統嗎?

+0

PHP版本5.3.14,Linux的x86_64的 – Alex

+0

在工作模式我用crontab,所以F5不是原因... $ i正常上升,include()沒有看到文件中的更改(大約10%的次數),但file_get_content()可以很好地查看所有更改 – Alex