拆分PHP脚本以避免超时

时间:2013-03-18 17:24:25

标签: php

我有以下脚本用于PDF网站上的某些页面:

<? 
    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运行它,但不知道从哪里开始,因为没有以前的经验。

2 个答案:

答案 0 :(得分: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';

基本上,这可以让您的webbrowser进行计数,而无需使用Ajax。当一个请求完成后,浏览器会自动加载下一页,直到计数器($i)为3。

答案 1 :(得分: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';