用PHP的命令行模式完成數據處理任務

工作中經常會遇到:

  • 由於程序問題導致數據錯誤,把程序改正後還需要寫腳本修復數據;
  • 需要寫個臨時腳本組裝數據並插入到數據庫中;

最簡單暴力的解決方式(我在工作中時常遇到)是通過瀏覽器訪問腳本來達到目的,在數據量少的情況下,這樣做沒問題,但是一旦數據量大了,極有可能出現超時問題:PHP超時或者Nginx超時。

接下來說說三種處理超時的方式:

  1. PHP超時的話就設置它永不超時,比如set_time_limit(0) 。PHP不超時了,Nginx卻報504超時,需要研究不讓nginx超時的設置方法;
  2. 通過分頁的方式把數據切分,然後再通過改變url地址上的page參數值來處理切分後的數據;
  3. 想想解決超時問題的思路方向是否存在問題。

第1第2種方式都是屬於反人類的解決問題的方式,因爲web瀏覽器是拿給用戶訪問用的,不是用來超時的,除非網絡問題,絕非代碼問題;其次處理數據居然用瀏覽器還用分頁的方式。。。(這種情況在工作中還不少見!);

運行PHP不光可以通過web瀏覽器,還可以通過命令行模式運行。

對於命令行模式,我以前也瞭解得不多,當我看到下面這張表時才知道里面知識點並不少:

注意這個max_execution_time設置選項,它可以保證通過CLI方式運行PHP代碼時,不需要像在瀏覽器中運行還要設置set_time_limit(0)來保證不超時。

另外還有一點通過CLI方式運行PHP代碼也可以避免Nginx 504超時錯誤,因爲它壓根和Nginx沒有關係。

其它設置選項同樣值得看看,很有意思。比如implicit_flush,通過瀏覽器的方式訪問腳本時輸出的信息不會馬上顯示而是要等到腳本都執行完了才顯示,而在命名行模式中,會實時的輸出內容,方便開發人員查看每條數據的處理結果。

所以當需要處理很多的數據時,不要嘗試用瀏覽器訪問腳本的方式去解決,試試CLI的方式,很多PHP框架還有專門的章節來講它的用法。

 

解決問題的思維方式比解決問題本身更加重要。

 

 

發佈了3 篇原創文章 · 獲贊 2 · 訪問量 3676
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章