我想從文本文件中讀取所有內容並進行回顯。但是在閱讀時可能會有更多的行寫入文本文件,所以我不希望腳本在到達文件末尾時退出,而是我不想永遠等待更多行。這可能在PHP?在php中阻止文件讀取?
1
A
回答
0
我解決了它。
訣竅是使用fopen,當達到eof時,將光標移動到前一個位置並繼續從那裏讀取。
<?php
$handle = fopen('text.txt', 'r');
$lastpos = 0;
while(true){
if (!feof($handle)){
echo fread($handle,8192);
flush();
$lastpos = ftell($handle);
}else{
fseek($handle,$lastpos);
}
}
?>
雖然仍然消耗很多的CPU,不知道如何解決這個問題。
1
這只是一個猜測,但嘗試通過(passthru)「尾巴-f」輸出。
但你需要找到一種方法來flush()你的緩衝區。
恕我直言,更好的解決方案將是建立一個ajax網站。
將文件的內容讀入數組中。存儲會話中的行數。打印文件的內容。
每隔x秒向檢查文件的腳本啓動ajax請求,如果行數大於則會話計數將結果追加到頁面。
你可以使用POPEN()inststed:
$f = popen("tail -f /where/ever/your/file/is 2>&1", 'r');
while(!feof($f)) {
$buffer = fgets($f);
echo "$buffer\n";
flush();
sleep(1);
}
pclose($f)
睡眠是很重要的,沒有它,你將有100%的CPU時間。
0
事實上,當你「回聲」它時,它會進入緩衝區。因此,如果在瀏覽器仍在接收輸出的情況下添加新內容,則需要「追加」新內容。這是不可能的(但有一些辦法)。
+0
你確實知道有flush()? – Rufinus 2009-08-11 20:20:19
0
你也可以使用filemtime
:你得到最新的修改時間戳,發送輸出,並在最後比較存儲的filemtime
與當前的一個。
無論如何,如果您希望腳本與瀏覽器(或客戶端)同時發送,則應使用塊(fread
,flush
)發送輸出,然後檢查最後的任何更改。如果有任何更改,請重新打開文件並從最新位置讀取(您可以在while(!feof())
的循環之外獲取位置)。
相關問題
- 1. PHP - 阻止文件讀取
- 2. asynctask讀取阻止
- 3. 在linux上中止阻塞讀取
- 4. 讀取xml文件後阻止文件通道關閉
- 5. 阻止讀取std :: ifstream
- 6. DataInputStream讀取不阻止
- 7. 中斷阻止讀
- 8. 使用FileStream來讀取文件,它會被阻止?
- 9. PHP讀取文件
- 10. Python子進程阻止在主進程中阻止從標準輸入讀取
- 11. 讀取串行端口:如何中斷讀取阻止操作
- 12. 阻止文件從使用PHP
- 13. php無法阻止大文件上傳
- 14. 阻止用戶訪問URL php文件
- 15. Htaccess mod_rewrite阻止執行php文件
- 16. 文件讀取停止
- 17. 在php中讀取xml文件
- 18. 在PHP中讀取MSSQL .bak文件
- 19. 在php中讀取csv文件
- 20. 在php中讀取多個xml文件
- 21. 在PHP中讀取Excel文件
- 22. 在PHP中讀取大型CSV文件
- 23. 在PHP中讀取CSV文件數據
- 24. 在php中讀取unicode文件
- 25. 如何在php中讀取ppt文件?
- 26. 在PHP中讀取WebVTT文件
- 27. 在PHP中讀取xls(Excel)文件
- 28. php - htaccess阻止除根文件以外的php文件
- 29. 阻止JS文件
- 30. 在htaccess文件中阻止IP範圍
這取決於您所瞄準的功能類型。該腳本是否在來自瀏覽器的請求的上下文中執行?它是一個可以無限運行的CLI腳本嗎? – 2009-08-11 18:59:30
這是一個PHP腳本,將從命令行或從Web服務器運行? – Wade 2009-08-11 19:01:59
命令行腳本,但這有什麼關係? – Martin 2009-08-11 19:56:23