PHP是單線程的,這意味着它在繼續前一次執行一條指令。換句話說,PHP自然會等待函數在繼續執行下一條語句之前完成執行。
我試着在我的機器上執行你的代碼,它正確地等待並等待,直到我在完成函數並顯示消息之前修改了文件。
我什至不能在你的代碼中看到任何可能失敗的東西。由於$lfilemod
的創建方式與while
循環中的檢查方式相同,因此該循環的條件將返回TRUE
,並且即使文件出現問題也會執行(filemtime
將返回FALSE
兩個錯誤,所以條件將顯示(FALSE == FALSE
,這顯然是TRUE
)。
運行該循環之前,您的PHP腳本是否修改了該文件?如果是,則filemtime
返回的初始值可能是腳本最初啓動時的修改時間。當您在循環中運行clearstatcache
時,您將在腳本的前面選擇由您的更改引起的新修改時間。
我的建議是:
嘗試設置的$lfilemod
值,讓你知道該值是乾淨運行前clearstatcache
,那你是比較蘋果對蘋果與在正在檢查什麼循環。
確保文件確實沒有被修改。嘗試在代碼的開始和結尾放置一對調試行,打印出文件的最後修改時間,然後自己比較兩者,以查看PHP是否報告修改時間發生變化。
這應該不用說了,但是您應該確保PHP被配置爲在開發過程中顯示所有錯誤,以便在出現錯誤時立即顯示您的錯誤。確保display_errors
設置在php.ini
文件打開On
(或使用ini_set()
如果不能修改該文件本身),並且您的error_reporting()
設置爲E_ALL | E_STRICT
爲PHP < = 5.3,或E_ALL
爲PHP 5.4(E_STRICT
是作爲該版本的部分E_ALL
)。更好的方法是將錯誤報告設置爲-1
,無論PHP版本如何,它都可以有效地打開所有錯誤報告。
嘗試通過這些修改再次運行您的代碼。如果你看到文件真的被修改,那麼你知道你的代碼有效。如果文件不是被修改,那麼您至少應該有一個可以查找的錯誤,或者在這裏問我們。
相關螺紋[腓回調](http://stackoverflow.com/questions/48947/how-do-i-implement-a-callback-in-php) –
顯然該文件已經改變。否則,該功能不會退出。 – webbiedave
你有調試過嗎?添加'echo「$ lfilemod \ n」。 filemtime($ nof)。 「\ n」;'while'陳述後。 –