Как получить содержимое файла при его изменении в PHP - PullRequest
2 голосов
/ 09 сентября 2011

Я довольно новичок в php.

У меня есть текстовый файл на моем компьютере, который часто меняет содержимое.Я хочу получить содержимое файла, как только он будет изменен, и вставить его в HTML-форму.Я хотел использовать функцию filemtime на php, но я точно не знал, как это сделать.Я поместил цикл do while:

$oldtime=filemtime($filename);
$newtime = $oldtime;
do {
    sleep (1);
    $newtime = filemtime($filename);
    echo "old: $oldtime"."<br />"; 
    echo "new: $newtime";
}
while ($newtime == $oldtime);

, но он продолжит выполняться.Я также пытался сделать некоторые заявления if, но это также не сработает на моей стороне.

Не могли бы вы предложить какой-либо способ сделать это?Если есть какие-то другие функции, которые могут помочь?

спасибо за просмотр этой темы

Ответы [ 4 ]

1 голос
/ 09 сентября 2011

Переключите свое назначение на сравнение (= для ==), чтобы исправить ошибку в вашем коде.

Однако здесь может быть больше проблем.Файлы - не лучшее место для хранения информации, когда вы хотите знать, изменилась ли она.

В идеале вы должны поместить информацию, которая сохраняется в этом файле, в базу данных, где вы можете использовать весельетакие вещи, как триггеры, чтобы вы знали, изменились ли данные.В противном случае ваше решение будет тратить впустую циклы, пытаясь бесконечно проверять файл на наличие изменений, что не очень эффективно

0 голосов
/ 09 сентября 2011

Частый опрос файла является своего рода дурацким способом публикации обновлений.

Почему бы просто не иметь php-скрипт в конечной точке HTTP-запроса, который форматирует исходные данные (возможно, кэшируя его, еслиисходный файл удален).Или использовать inotify для запуска генерации статического файла?

0 голосов
/ 09 сентября 2011

Он продолжает выполняться, потому что вы назначаете, а не сравниваете.

Это:

while ($newtime = $oldtime);

Должно быть так:

while ($newtime == $oldtime);
0 голосов
/ 09 сентября 2011

Ваше состояние в while логически неверно.Вы выполняете задание

$newtime = $oldtime

, это должно быть сравнение:

$newtime == $oldtime
...