簡體   English   中英

PHP while(true)循環進行文件更新

[英]PHP while(true) loop for file updates

我手頭有以下問題:

我在兩個單獨的頁面上有用戶,但是將頁面輸入保存到相同的文本文件中。 當一個用戶正在編輯時,另一用戶則不能。 我通過會話來跟蹤此問題並編寫更改,現在是誰來編輯它在文件中。

到目前為止,一切正常,最終的輸出與聊天非常相似。 但是,現在我正在讓用戶手動實現其頁面並重新加載文件。 我想做的是在文件時間戳更改時讓頁面執行重定向(以指示最后一個用戶已經保存了他們的編輯,而另一個用戶又打開了)。 我研究了javascript shortpolling一點,但隨后發現了php filmtime函數,它看起來更容易使用。 好吧-這是我得到的:

while(true){
   $oldtimestamp=filemtime(msks/$session['user']['kampfnr'].txt);
   $waittimer=2;
   $waittimer++;
   sleep($waittimer);
   $newtimestamp=filemtime(msks/$session['user']['kampfnr'].txt);

   if ($eintragszeit2 > $eintragszeit1){
       addnav("","kampf_ms.php?op=akt");
       redirect("kampf_ms.php?op=akt");
   }}

從理論上講,當用戶看到輸出時,“該...開始編輯文件”。 這應該在后台循環,檢查文件是否已經更新,如果是,請重定向用戶。

實際上,這會嚴重影響服務器性能(我在共享主機上),直到由於內存超出錯誤消息而中斷。

代碼有問題嗎? 還是在這種情況下使用while循環通常不是一個好主意?

提前致謝!

PHP語言應僅用於生成Web內容(客戶端向服務器發出請求=>服務器調用所需的腳本,並將響應返回給客戶端)。 頁面加載並顯示給客戶端后,連接將關閉,因此Internet可能會死機,客戶端不會收到通知...

因此,在無限循環中,不僅客戶端可以等待響應……無限時間,而且服務器可能由於負載而受到嚴重影響……實際上,這是一個非常糟糕的主意:)

PHP不能用於進行雙向通信: 只能用來構建客戶需要的網頁,因此他不能在“后台”做任何事情 (不是直接,有效地可以調用外部腳本,而是不用於通知客戶...)

另外,由於客戶端/服務器體系結構(服務器僅響應客戶端請求,因此是被動的),因此進行雙向通信時,php和“常規” http不好用

我可以建議使用WebSocket協議來進行聊天應用程序:

http://socket.io/

https://en.wikipedia.org/wiki/WebSocket

但是為此,您需要使用“活動”服務器解決方案,例如node.js或ruby(取決於您的服務器功能...)

如果要保留在php中,另一種方法是,客戶端每10秒發出一次Ajax請求,例如,調用一個php腳本來檢查文件,如果文件已更新,則向客戶端發送一條消息, 但這確實是不推薦使用 ,由於嚴重的性能損失,因此請立即將其忘記。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM