2013-05-18 67 views
1

我目前正在建立一個網絡爬蟲,但要開始我想測試它在我的共享虛擬主機,顯然他們不允許set_time_limit所以我不能確保腳本繼續運行超過30秒。PHP啓動腳本,它超時

在下一次超時之前啓動PHP腳本的最佳方式是什麼? 我在考慮將上次抓取的網址保存在文件中,但還有其他選項嗎?

+1

由於您正在構建Web爬網程序,因此請考慮將當前已爬網的URL存儲在某處,然後如果爬網程序崩潰,則可以從此特定URL恢復。 –

+0

的確,問題在於腳本經常超時,纔有機會抓取一個頁面。 – user2019515

+0

如果您在超時後保存上次抓取的網址以恢復履歷,請務必跳過並重新安排失敗的網址。否則,您可能會在破損的頁面上出現無限循環。 –

回答

1

編輯: ScallioXTX是正確的,你不能使用變量作爲goto標籤。你可以用一個非常大的if聲明來解決這個問題,但是在這一點上,我認爲最好不要使用goto。這是一種替代方法:

<?php 

    // Load label number from database or text file into $label_num 

    if($label_num <= 1) { 
     // Do stuff 
    } 

    if($label_num <= 2) { 
     // Do more stuff 
    } 

    // ... 

?> 

老(不正確)方法:

當然你也可以使用gotohttp://us1.php.net/goto

,直到你得到更好的我只會用這個作爲一種臨時措施託管。

這裏是我會做什麼:(前count1:count2:等)

  1. 在整個代碼中的不同位置,寫標籤
  2. ,在您添加的標籤的位置,寫標籤名稱到數據庫或文本文件
  3. 在腳本的開始,加載值並跳轉到指定的標籤

舉例:

<?php 

    // Load label number from database or text file into $label_num 

    if($label_num) { 
     goto $label_num; 
    } 

    count1: 
    // Do stuff 

    count2: 
    // Do more stuff 

    // ... 

?> 
+1

-1您無法'轉到'一個變量名稱,這會給出解析錯誤(請參閱[文檔]中的Gmail dot com的Ray dot Paseur的註釋(http://php.net/manual/en/control- structures.goto.php)) – rpkamp

+0

謝謝,我會看看如果我能以某種方式使用它,這有點棘手! :) – user2019515