2011-09-22 42 views
2

大多數情況下,我在我的問題上找到答案在谷歌,但現在我卡住了。 我正在研究一個刮板腳本,它首先刮掉網站的一些用戶名,然後獲取用戶的每個細節。有兩個刮板涉及,第一個通過主頁面,獲得第一個名稱,然後獲取它的個人資料頁面的詳細信息,然後前進到下一頁... 我刮的第一個站點總共64個名字顯示在一個主頁上,而第二個名稱顯示4個頁面,顯示超過365個名字。長時間運行的PHP刮板返回500內部錯誤

第一個很好,但第二個不斷讓我500內部錯誤。我試圖限制腳本,只刮幾個名字,就像魅力一樣,所以我更確定腳本本身是可以的! 在我的php ini文件中的max_execution_time設置爲1500,所以我想這也不是問題,但是有一些導致錯誤... 不知道是否每10個名字後添加一個睡眠命令,例如將解決我的情況,但是,我現在正在嘗試!

所以,如果你們有任何想法有什麼可以幫助解決這種情況,我將不勝感激您的幫助!

在此先感謝, ž

+2

查看Apache錯誤日誌文件以查看500後面的確切錯誤消息 –

+2

檢查Apache錯誤日誌以獲取更多信息。 –

+0

腳本運行多長時間? – DaveRandom

回答

0

這肯定是內存問題。其中一個變量增長超過了您在php.ini中定義的內存限制。如果您確實需要存儲大量數據,建議您定期將結果寫入文件和/或數據庫(然後釋放您的變量),而不是在運行時將其全部存儲在內存中。

  1. 獲得用戶的詳細信息
  2. 轉儲到文件
  3. 明確瓦爾
  4. 重複..

如果你的執行時間設置爲無窮大,並定期轉儲瓦爾到文件/數據庫您PHP腳本應該運行好幾個小時。

0

支持說讓我更高的內存高達4gigabytes

典型的金錢欺詐的支持答案。節省您的現金&編寫更好的代碼,因爲您正在做的事情可以輕鬆地從免費虛擬主機提供商的共享服務器上運行,即使他們的資源極限嚴酷。

首先獲取/更新用戶列表作爲一項工作,然後將小批量的細節提取爲另一項。使用SQL BULK插入命令來減少到數據庫的連接。它的運行速度比通過單個INSERTS循環要快得多。

用戶名和詳細信息本質上是一個靜態列表,所以不急於實時獲取所有數據。用cronjob抓取詳細信息,最終腳本會趕上添加到傳入列表的新用戶名,最終得到一個更快,更精簡的更高效的系統。

相關問題