php cli 中的使用curl 記憶體溢位時的正確處理辦法

liuyun032發表於2018-11-08

最近在用PHP CLI 開發了爬蟲 , 因為CURL可以同時請求多個資料,特別方便和快速 , 一天下來收集了 20多W條的有效URL,然後不停的下載各種文章 ,圖片 , 圖片半天下集了大概 2個G這樣子 。 

原理是這樣子的,首先,通過首頁入口,取得所有各個欄目的有效入口的URL,記錄在MYSQL資料庫,做個標識,爬取過的標識為1,這樣,在PHP 中 通過 call_user_func  不停地爬取 , 就可以取得完整的資料了 。

在爬取過程中會碰到各種問題 ,其中最 難搞的 是 CURL每執行一次佔的記憶體會逐漸增大 , 到最後 記憶體溢位,系統崩潰 ,各種度娘後都沒有找到合適的,有的話通過修改php.ini中的記憶體設計,方法有點作用,執行的時間會長一點,但到最後還是會崩潰。不能從根本上解決問題,治標不治本 。可以通過 memory_get_usage 檢視記憶體的使用情況。

後來通過多次的測試 , 終於解決了 : 原理 是  計算 爬取的次數 ,當超過時用 exit ,退出執行 ,這時記憶體會清空 , 然後能過PHP 執行bat檔案 ,bat檔案裡面 是執行 爬蟲 的方法,相當於 重啟爬蟲 ,  記得 在exit前 用system 函式 執行bat檔案,如果用 exec是沒效果 的,還有就是 bat檔案裡面 要 等待 幾秒的時間後再執行 。

關鍵程式碼如下:

 

 

 

 

 bat檔案的程式碼

相關文章