2013-03-18 99 views
0

我有以下腳本,用來爲PDF網站上的某些頁面:拆分PHP腳本來避免超時

<? 
    include_once('phpToPDF.php') ; 
    phptopdf_url('http://www.example.com/csb04-termination-box/?style=alt' ,'pdf/', 'csb04-termination-box.pdf'); 
    phptopdf_url('http://www.example.com/csb05-termination-box/?style=alt' ,'pdf/', 'csb05-termination-box.pdf'); 
    phptopdf_url('http://www.example.com/csb06-compact-termination-box/?style=alt' ,'pdf/', 'csb06-compact-termination-box.pdf'); 
    echo 'Done'; 
?> 

我的問題是,如果我添加更多的網頁服務器超時腳本之前已經完成運行。我試過更改set_time_limit(0);,但這並沒有幫助(在共享主機上)。

修改腳本的最佳方法是什麼?我考慮嘗試將其分割成多個腳本並通過ajax運行它,但不知道從哪裏開始,因爲之前沒有經驗。

回答

3

最簡單的方式做這將是這樣的:

include_once('phpToPDF.php') ; 
$i = isset($_GET['i']) ? intval($_GET['i']) : 0; 

if ($i == 0) phptopdf_url('http://www.example.com/csb04-termination-box/?style=alt' ,'pdf/', 'csb04-termination-box.pdf'); 
if ($i == 1) phptopdf_url('http://www.example.com/csb05-termination-box/?style=alt' ,'pdf/', 'csb05-termination-box.pdf'); 
if ($i == 2) phptopdf_url('http://www.example.com/csb06-compact-termination-box/?style=alt' ,'pdf/', 'csb06-compact-termination-box.pdf'); 

if ($i < 3) header('Location: ?i=' . ($i + 1)); 
echo 'Done'; 

基本上,這可以讓你的網頁瀏覽器執行計數,不使用Ajax。當一個請求完成後,瀏覽器自動加載下一頁,直到計數器($i)是在3

+0

非常確實很好。 – Bart 2013-03-18 17:31:14

+0

完美的作品,謝謝! – 2013-03-18 17:36:57

+0

有沒有一種方法可以輕鬆地在屏幕上包含進度更新?就像echo'1/3'處理完第一個之後等等... – 2013-03-19 09:18:52

0

使用下面的腳本來處理所有的文件,一次一個:

include_once('phpToPDF.php') ; 

$urls = array(); 
$urls[] = array('http://www.example.com/csb04-termination-box/?style=alt', 'csb04-termination-box.pdf'); 
$urls[] = array('http://www.example.com/csb05-termination-box/?style=alt', 'csb05-termination-box.pdf'); 
$urls[] = array('http://www.example.com/csb06-termination-box/?style=alt', 'csb06-termination-box.pdf'); 
// add here more elements in $urls if needed 

if(!isset($_GET['n'])) 
    $n = 0; 
else 
    $n = intval($_GET['n']); 

if(isset($urls[$n])) 
{ 
    phptopdf_url($urls[$n][0] ,'pdf/', $urls[$n][1]); 
    header('Location: ?n='.($n+1)); // calls the conversion of the next file in the $urls array 
} 
else 
    echo 'Done';