2012-06-30 92 views
1

首先,我想給你的什麼,我試圖做的基本思想:PHP結束腳本執行全自動

我試圖做一個免費的網絡託管服務做一些工作對我來說。我創建了一個php頁面和MySQL數據庫。後面我的PHP頁面的基本想法是我有$關機狀態while循環和while循環中的一些反跟蹤代碼是否正在運行或不

<?php 

/* 

Connect to database etc. etc 

*/ 

$shutdown = false; 
// Main loop 
while (!$shutdown) 
{ 
    // Check for user shutdown request 
    $strq = "SELECT * FROM TB_Shutdown;"; 
    $result = mysql_query($strq); 
    $row = mysql_fetch_array($result); 
    if ($row[0] == "true") 
    { 
     $shutdown = true; // I know this statement is useless but nevermind 
     break; 
    } 

    //Increase counter 
    $strq = "SELECT * FROM TB_Counter;"; 
    $result = mysql_query($strq); 
    $row = mysql_fetch_array($result); 

    if (intval($row[0]) == 60) 
    { 
     // Reset counter 
     $strq = "UPDATE TB_Counter SET value = 0"; 
     $result = mysql_query($strq); 

      /* 

     I have some code to do some works at here its not important just curl stuff 

      */ 

    else 
    { 
     // Increase counter 
     $strq = "UPDATE TB_Counter SET value = " . (intval($row[0]) + 1); 
     $result = mysql_query($strq); 
    } 

     /* 

    I have some code to do some works at here its not important just curl stuff 

     */ 

    // Sleep 
    sleep(1); 
} 

?> 

而且我有一個check.php返回我來自TB_Counter的值。

的問題是:我跟蹤TB_Counter表中的每一秒。一段時間後停止。如果我關閉了我的瀏覽器(我在php循環頁面中調用了我的主瀏覽器),它會在2分鐘後停止。如果不在5-7分鐘後,瀏覽器和循環停止時出現「連接已重置」的錯誤。

我應該怎麼做才能讓我的循環是永恆的?

回答

1

你需要讓PHP完全執行。有一個在PHP.INI文件,該文件說,一個選項:

max_execution_time = 30; 

這臺以秒爲腳本允許它被分析器終止之前運行 的最長時間。這有助於防止寫好的腳本不能捆綁服務器。默認設置爲30。 當從命令行運行PHP的默認設置爲0

功能set_time_limit

設定的秒的腳本允許運行數。如果達到 ,腳本將返回致命錯誤。默認限制爲30秒 或,如果存在的話,在 php.ini中所定義的的max_execution_time值。

要檢查是否PHP在安全模式運行,你可以使用這樣的:如果它會是一個巨大的過程

echo $phpinfo['PHP Core']['safe_mode'][0] 

,你可以考慮的Cron運行作爲一個cronjob。一個小的解釋:

Cron是一個非常簡單的Linux模塊,它允許您在預定的時間或間隔運行命令。在Windows中,它被稱爲計劃任務。 Cron這個名字其實來源於我們從中得到單詞年表的單詞,這意味着時間的順序。

使用cron,開發人員可以自動完成任務,例如郵寄E鋅可能關閉小時的過程中更好地發送,自動更新統計信息或動態源靜態頁面的再生。系統管理員和Web主機可能希望在其客戶端上生成配額報告,完成自動信用卡帳單或類似任務。克朗擁有適合每個人的東西!

Read more about Cron

+0

好吧我試圖設置它 set_time_limit(0);但它不起作用。也許服務器不允許我設置時間限制?在設置它來檢查我是否被允許進行更改後,是否有辦法獲取time_limit? – user1492948

+0

是的,現在嘗試運行腳本,有什麼區別? –

+0

看到我的編輯對不起! – user1492948

0

你可以使用PHP函數set_time_limit()函數。

+0

我真正嘗試過 //設置時間 的set_time_limit(0); 但沒有奏效。它仍然停止 – user1492948

+0

服務器管理員通過在安全模式下運行php來禁用此功能是可能的,也是可能的。請用phpinfo()驗證。 –

0

你不應該從瀏覽器處理這個問題。每分鐘運行一次cron,檢查你需要的是一個更好的解決方案。

接下來,爲什麼你會更新每一秒?只需寫下一個時間戳,以便知道何時發出請求?

讓東西永遠運行是不可行的。更重要的是確保您的業務流程持續運行。因此,將您的商業案例放在這裏可能是明智的做法,您似乎需要在一分鐘內計算幾秒鐘並做些事情,但這並不完全清楚。那麼你需要做什麼?

+0

好吧我從來沒有聽說過「cron 」。將期待它謝謝! – user1492948

+0

爲了給你一個啓動,在Linux機器上輸入crontab -l,它會給你一個現有的cronjob列表。可能沒有。你輸入這個例如一個SSH會話,所以終端。然後輸入crontab -e,這將允許您編輯cron。它是特定時間的任務清單,例如每分鐘。如果是PHP,則必須使文件可執行,例如chmod 0755(檢查權限!),並且必須在文件的開頭添加一個PHP路徑,如/ usr/bin/php。檢查您的環境的路徑。 –

+0

好的問題是我試圖做這個免費的作品。有很多免費的網絡託管服務,但我不知道如何輸入這些命令到他們的Linux機器?哈哈我認爲我需要爲此擁有一個VPS?不是嗎? – user1492948