2011-11-08 5 views
2

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

Однако, когда статус моего сервера изменяется, файл .txt обновляется локально, но новое значение никогда не появляется на сайте.

Я использую HTML5/Javascript для отображения содержимого и PHP для чтения файла и разбора/очистки ввода. Сегмент кода, который я прикрепляю, который показывает функции чтения файлов PHP, которые я использую, запускается каждые 10 секунд. После запуска этого сегмента дисплей (я использую холст HTML5) обновляется, но данные остаются постоянными. Дисплей обновляется только в том случае, если я вручную обновляю страницу.

Возможно ли, что опросить этот txt-файл каждые 10 секунд или около того, и вывести последнюю строку в переменную, которую я могу вызвать?

function getCurrentStatus() { 
    <?php   
     clearstatcache(); 

     $myFile = "C:\available.log"; 

     $fh = fopen($myFile, 'r'); 
     $theData = fread($fh, filesize($myFile)); 
     fclose($fh); 

     $statusList = explode("\n", $theData); 
     $statusListLength = count($statusList) - 2; 
     $currentStatus = explode(" ", $statusList[$statusListLength]); 
     $previousStatus = explode(" ", $statusList[$statusListLength - 1]); 

     $myFile = "C:\std_server0.out"; 

     $fh = fopen($myFile, 'r'); 
     $theData = fread($fh, filesize($myFile)); 
     fclose($fh); 

     $garbageCollector = array_map('trim',explode("\n", $theData)); 
     $garbageCollectorLength = count($garbageCollector); 
    ?> 
    currentStatus = ["Latest Status:", "<?php echo $currentStatus[0]; ?>", "First Started:", "<?php echo $currentStatus[1]; ?>", "<?php echo $currentStatus[2]; ?>", "Last Checked:", "<?php echo $currentStatus[4]; ?>", "<?php echo $currentStatus[5]; ?>"];  

    latestGC = "<?php echo $garbageCollector[$garbageCollectorLength - 2] ?>" 
} 
+0

Вы можете использовать 'file_get_contents()' вместо трех строк 'fopen'' fread' и 'fclose' – Treffynnon

+0

Похоже, вы говорите о методе push-сервера, который php не очень хорошо работает. Ваша самая легкая ставка - просто перезагрузить статус через ajax. –

ответ

2

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

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

+0

Я вижу, это имеет смысл. Спасибо за объяснение, я рассмотрю несколько примеров, используя AJAX для моего приложения. – Jarek

0

Опрос - это не очень хорошая идея. Вам нужно, чтобы сервер нажимал на новые данные или изменил данные. Посмотрите на это http://www.zeitoun.net/articles/comet_and_php/start

Надеюсь, что это поможет.

+0

Спасибо, я рассмотрю этот пример чата, поскольку он, похоже, похож на то, что я пытаюсь сделать. – Jarek

+0

Преимущество технологии push-сервера заключается в том, что вы можете отправлять данные клиенту в момент возникновения события. К сожалению, php не имеет глобального состояния и не имеет понятия о событиях. –

0

У меня была аналогичная проблема, и я обнаружил, что это проблема с кешированием браузера. Вы можете проверить это, открыв инструменты разработчика в Chrome (Windows/Linux = Ctrl + Shift + I, Mac = Cmd + Opt + I) и отключив кеширование там.

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

Смежные вопросы