2013-07-03 44 views
2

我有我的應用程序託管在Siteground,共享主機。我已經構建了一個每天晚上執行一個php文件的cron作業。問題是該文件包含執行代碼的主循環85次。更確切地說,我使用數組的數據並操作它們。這完成了85次。 像這樣:給予每個循環30秒的執行時間

<?php 
$main_array = array("//85 elements"); 
foreach ($main_array as $var){ 

$array1 = array ("//a lot of data"); 
//manipulate array1 

} 
?> 

由於存在所拍攝的數據的許多操作,需要花費2分鐘,5' 以完全執行。任何機會..有沒有辦法爲每個「foreach」循環設置執行時間30秒? 我不能移動到專用的主機,所以我需要弄清楚別的東西了..

感謝advace

+1

顯示你的代碼。我認爲我們可以提供幫助。 – sectus

+0

30秒後應該發生什麼?只需跳過腳本? – abimelex

+0

如果數組的操作是在相互分離的情況下完成的,您可以嘗試將'$ main_array'拆分爲更小的數組,並且一次運行五次cron作業來處理每個數據塊。 –

回答

0
set_time_limit(999); // some number you want 

試試這個。在你的代碼的頂部

+0

試過,結果相同:/謝謝回答! – Mirela

1
set_time_limit(30); //Enter the value in seconds 

在PHP檢查set_time_limit()

+0

對不起,這也沒有奏效。 :/ – Mirela

1

利用set_time_limit(0);功能。

PHP Manual

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

的最大執行時間不受系統調用,流 操作等,請參閱set_time_limit()函數功能進行更多 細節。

當您在安全 模式下運行時,您無法使用ini_set()更改此設置。唯一的解決方法是關閉安全模式或更改php.ini中的 時間限制。

您的網絡服務器可以有其他超時配置,也可能會中斷PHP執行 。 Apache有一個Timeout指令,IIS有一個 CGI超時函數。兩者默認爲300秒。有關特定詳細信息,請參閱您的Web服務器 文檔。

+0

'set_time_limit'可能會在具有嚴格資源策略的共享主機上被禁用。 –

+0

此集合對整個腳本執行的時間限制,但他希望爲每個循環設置它,我認爲... – abimelex

+0

@abimelex你是對的。我想爲每個循環設置它。不是全部腳本。 ..哦,順便說我是一個「她」:) – Mirela

2

使用microtime()來評估每個循環的運行時間。

<?php 
$main_array = array("//85 elements"); 
foreach ($main_array as $var){ 
    $time_start = microtime(true); 
    $array1 = array ("//a lot of data"); 
    //manipulate array1 
    $time_end = microtime(true); 
    $time = $time_end - $time_start; 
    //check sometimes in your script whether execution time is reached 
    if($time > 30){ 
    break; //or continue; which you want 
    } 
} 
?> 

http://php.net/manual/en/function.microtime.php

但執行時間是很長的,什麼是酸腳本計算?也許有更有效的方法去做...

+0

在粗線條中,我的腳本確實如此:對於每個用戶(main_array(user1,user2..user85);) - >從服務器獲取數據 - >把它放入一個數組 - >刪除跳轉(如果數組('3','4','99',3);'99'被認爲是跳轉) - >規範化數據 - >再次刪除跳轉 - >插入數據庫。但是有很多數據需要處理。只有一個循環(一個用戶)需要6秒執行。 – Mirela

+0

你可以發佈整個劇本還是至少需要這麼長時間的部分? (順便說一句,對不起考慮你的男性,我沒有讀你的名字) – abimelex

+0

我試過你的解決方案,但它沒有工作:(我會發布我的代碼,但它太長了,如果我發佈它作爲我自己的答案..你們是否仍然可以發表評論?我不太確定stackover是如何工作的:/ – Mirela