Я пытаюсь захватить прямые каналы из устройства для чтения карт и распечатать его с помощью PHP.Браузер заканчивает бесконечные петли PHP, а затем печатает данные
<?php
$i=0;
for(;;)
{
$subdata=file_get_contents("/home/openflow/subscribedata.txt");
$subdata2=file_get_contents("/home/openflow/subscribedatatemp.txt");
if($subdata!=$subdata2)
{
copy("/home/openflow/subscribedatatemp.txt","/home/openflow/subscribedata.txt");
$sub=file_get_contents("/home/openflow/subscribedata.txt");
$i++;
echo "\n". $i."--".$sub;
}
}
?>
Я использую цикл for как бесконечный цикл. Всякий раз, когда есть новые данные, мой читатель карточки скрипт записывает в subscribedatatemp.txt файл и выше скрипт проверяет разницу между subscribedatatemp.txt (последний вход) и subscribedata.txt (предыдущая запись) , Если есть разница, он должен скопировать последнее на предыдущее и повторить последние данные.
Проблема заключается в том, что я выполняю вышеприведенный PHP-код, он ничего не показывает на какое-то время, а когда-то браузер перестает загружаться и отображает все данные, которые он получил во время загрузки.
Это означает, что выполнение цикла прекращается, и все данные печатаются после окончания цикла while, правильно? Как я могу это исправить?
Ваш сценарий, вероятно, таймаут, попробуйте добавить 'set_time_limit (0)' в начало – doublesharp
где я должен добавить это? Я новичок в php и не знаю, где добавить строку. не могли бы вы рассказать мне, где его добавить? –
' Php set_time_limit (0) ...?>'. Также вы должны избегать запуска «жестких» циклов, которые не дают другим процессам возможности получить некоторое время процессора.Представьте 'sleep (50)' или 'sleep (100)' перед концом цикла for. –