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 が昇順ではないなど、間違ったデータが1回あるため、奇妙なことです。私が得た唯一のエラーは、F5を押したときにファイルが書き込みのためにロックされたということでした。

バージョンとOSをもっと正確に言えますか?

于 2012-10-25T19:14:25.597 に答える