本次批次處理是因為該專案本身經過多次外包,圖片儲存的到處都是,且沒有專門產生縮圖和統一尺寸的圖片,這次是在原有圖文混排的資料中提取圖片,儲存到指定目錄、裁剪尺寸並產生對應縮圖,並將結果儲存到資料庫。
在批次程式處理過程中,難免遇到程式執行時間過長,導致504錯誤等,調整伺服器配置其實不是很好的解決方案,畢竟對生產環境動刀子...
不過我比較懶,不想對一次提取的圖片再進行分頁請求處理^_^
#順便說一句,最多的一次處理的數據提取的圖片達到3000張~
下面進入正題,我們的主要目的是盡可能延長程式執行時間,使該抓到的圖片都抓到,並處理完成寫到資料庫。
我們的環境是基於nginx的PHP5.6,首先程式碼上要注意的,一個是放上set_time_limit(0),這避免去調整php.ini,當然有些基本的例如最大記憶體等等還是要調的,這裡不做介紹;另一個必須要設定curl的CURLOPT_TIMEOUT(我用的CURL抓遠端圖片)考慮到圖片都是在已知的多台伺服器上,超時抓不到一定是有問題的索性放棄,如果不設定這個超時,運行時會不停的給你報錯。
接下來就是伺服器了,首先是nginx的程式執行時間:
fastcgi_connect_timeout 900s;
fastcgi_send_timeout 900s;
fastcgi_read_timeout 900s;
這個配置在nginx.conf內,有則修改值,沒有追加上,時間上根據自己狀況設定,調整後重啟服務。
MYSQL也會回報逾時錯誤,修改my.ini新增或修改一下設定:
wait_timeout=2880000
#interactive_timeout=2880000
max_allowed_packet=100M
調整後重啟mysql以便生效,經過上面的設置,基本掃清超時報錯的各種情形,我的程序跑了2天3夜,採集和生成共計86G圖片。
再強調一下,這麼操作並不十分推薦,特別是生產環境下,會帶來很多問題,最重要的,完成批量任務後,恢復上述設定~
相關推薦:
#以上是PHP進行批次圖片處理時程式執行逾時的詳細內容。更多資訊請關注PHP中文網其他相關文章!