致命错误:脚本中超出了30秒的最大执行时间

时间:2011-06-28 16:40:45

标签: php timeout

我的客户收到与脚本超时相关的错误。我已经包含了下面的代码,但我认为问题在于需要延长超时。

这是我可以在代码中设置的内容,还是必须由Web主机(GoDaddy)设置?

致命错误:第170行的D:\ hosting \ 123 \ html \ siteame \ wp-content \ plugins \ myplugin \ myplugin.php超出了30秒的最长执行时间

此时的代码是:

function my_copy_recurse($src,$dst){
    $dir = opendir($src); 
    @mkdir($dst); 
    while(false !== ( $file = readdir($dir)) ) 
    { 
        if (( $file != '.' ) && ( $file != '..' )) 
        { 
            if ( is_dir($src . '/' . $file) ) { 
                my_copy_recurse($src . '/' . $file,$dst . '/' . $file); 
            } 
            else { 
                copy($src . '/' . $file,$dst . '/' . $file); 
            } 
        } //THIS IS LINE 170
    } 
    closedir($dir); 
}

6 个答案:

答案 0 :(得分:4)

如果您在GoDaddy,Windows主机上使用WordPress托管了您的网站,迟早您将面临最大执行超时问题。我在很长一段时间内遇到了这个问题,看着谷歌,打我的脑袋。如果您遇到与以下相同的一系列问题:

  1. 你在GoDaddy上托管认为他们很棒,但你发现wordpress会导致执行时间错误
  2. 你联系了支持。他们显然给你一个冷漠或要求你写一个自定义的php.ini / php5.ini。
  3. 你不知道该做什么,而你的老板就在你的头上。
  4. 你试图抓住GoDaddy的ini文件,你不能!
  5. 最后,您决定编写自己的PHP.ini文件,但要么害怕破坏某些内容,要么就是不知道从哪里开始,
  6. 这篇文章适合你>

    1. 打开文本编辑器。我推荐notepad ++。创建以下文件: info.php的
      1. 将info.php上传到您托管的根目录。现在浏览http://yourhost/info.php。无论屏幕上的负载是什么,都是PHP配置。查找已加载的配置文件并记下其值。在我的情况下,它是C:\ PHP5 \ php.ini。我们需要在自定义PHP5.ini文件中提供所有这些信息,但是要复制和格式化的信息太多,因此我们将复制GoDaddy的默认文件并根据需要进行编辑。

      2. 触发文本编辑器并创建以下文件: getconfig.php <?php copy('C:\PHP5\php.ini'*, 'PHP5.ini'); echo('finally'); ?>
        (将*替换为加载配置文件中显示的任何路径)

      3. 打开GoDaddy主机管理器(是的,通过他们的网站)。启动文件管理器
      4. 在您的托管根目录上创建一个文件夹&#34; baddaddy&#34;。
      5. 选择新创建的文件夹&#34; baddaddy&#34;并单击权限。 让网络可写。
      6. 将文件getconfig.php复制到badaddy,现在浏览到http://yourhost/baddaddy/getconfig.php

      7. 一旦你看到&#34;终于&#34;写在屏幕上,回到GoDaddy控制面板中的文件管理器,转到baddaddy文件夹,你会看到一个新文件PHP5.ini出现在那里。下载此文件。这是GoDaddy设置的副本。

      8. 做出你需要的任何改变(只知道你正在改变什么,我不是PHP专家,所以如果搞砸了什么我就不负责任)。对于我的问题,我将max_execution_time = 30更改为max_execution_time = 1200。

      9. 将已编辑的文件上传到应用程序的根目录,然后返回GoDaddy控制面板,IIS管理,点击回收应用程序池,然后 等待一段时间(20分钟)

      10. 浏览回http://yourhost/info.php以确认新设置已到位

      11. 重要 * * 如果您看到&#34; 500:内部服务器错误&#34;完成所有这些后,在你的GoDaddy WordPress博客上, 12.在刚刚编辑的PHP5.ini中将log_errors从on_errors = On更改为log_errors = Off,然后重新上传,回收应用程序池并等待。如果找不到日志文件,则会弹出500错误。

        我没有PHP专家,但这件事对我有用,博客仍然加载缓慢,但我没有看到任何&#34;致命错误:30秒超时&#34;从那以后。

答案 1 :(得分:1)

要限制最长执行时间,请使用set_time_limit($seconds)。 如果将$seconds设置为零,则不会施加时间限制。因此,只需在脚本开头添加set_time_limit(0),脚本将一直运行到最后。但是如果用户的浏览器由于浏览器超时而断开连接,则脚本可能会暂停,因此您需要在脚本开头添加ignore_user_abort(true)以忽略它并直到脚本结束才能正常工作。

答案 2 :(得分:0)

根据您的主机允许的设置,您可以在几秒钟内使用set_time_limit()传递给它的时间,在它超时之前需要多长时间(使用0表示无限制)。 E.g:

set_time_limit(0);     //script will now run till completes

GoDaddy可能已经阻止了这一点,如果它不起作用,请尝试联系他们

答案 3 :(得分:0)

Girish的回答是不完整的。什么必须包含在info.php中? 您可以使用以下网址提供的简单更新:fix-for-fatal-error-maximum-execution-time-30-seconds-exceeded-wordpress

答案 4 :(得分:0)

在“php.ini”文件中设置“max_execution_time = 600”为我工作。

答案 5 :(得分:-1)

将您的代码更改为:

function my_copy_recurse($src,$dst){
    $dir = opendir($src); 

    @mkdir($dst); 

    while($file = readdir($dir) ) 

    { 

        if ($file == '.' || $file == '..' ) continue; 


            if ( is_dir($src . '/' . $file) ) { 
                my_copy_recurse($src . '/' . $file,$dst . '/' . $file); 
            } 
            else { 
                copy($src . '/' . $file,$dst . '/' . $file); 
            } 
    } 
    closedir($dir); 
}