【问题标题】:Fatal error: Maximum execution time of 30 seconds exceeded in script致命错误:脚本中超过 30 秒的最大执行时间
【发布时间】:2011-09-24 11:55:06
【问题描述】:

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

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

致命错误:D:\hosting\123\html\siteame\wp-content\plugins\myplugin\myplugin.php 第 170 行的最大执行时间超过 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); 
}

【问题讨论】:

  • 您是否尝试过针对一个小目录(可能只有 1 个文件)运行此函数,以确保不会发生无限循环?
  • 嗨,Brian,是的,它安装在多个客户端站点以及多个本地主机站点上。

标签: php timeout


【解决方案1】:

根据您的主机允许的设置,您可以在几秒钟内使用set_time_limit() 传递给它,您希望它在超时之前花费多长时间(使用 0 表示无限)。例如:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • @Eugene - 这是有道理的。你知道默认超时是什么,比如 PHP 5.2 吗? +1 为 ignore_user_abort()
    • 要查看当前设置的时间限制,请使用ini_get('max_execution_time');
    • 当前“忽略用户中止”值相同,使用ini_get('ignore_user_abort');
    • 会做,我想它可能会有所不同,具体取决于当时安装 PHP 应用程序的人员或方式?只是要求找到 PHP 附带的默认设置。
    • 你可以在我们的配置文件(php.ini)中找到,这些设置都有。
    【解决方案3】:

    把你的代码改成这样:

    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); 
    }
    

    【讨论】:

    • 这段代码和Scott提供的代码有什么不同?
    【解决方案4】:

    如果您在 GoDaddy、Windows 主机上托管您的网站并使用 WordPress,您迟早会面临最大执行超时问题。我面对这个问题很长一段时间,并环顾谷歌,撞到了我的头。如果您也遇到过以下同样的一系列问题:

    1. 您在 GoDaddy 上托管,认为它们很棒,但您发现 wordpress 抛出执行时间错误
    2. 您联系了支持。他们显然要么冷落你,要么要求你编写自定义 php.ini/php5.ini。
    3. 你不知道该做什么,你的老板在你头上。
    4. 你试图获取 GoDaddy 的 ini 文件,但你不能!
    5. 最后,您决定编写自己的 PHP.ini 文件,但要么害怕破坏某些东西,要么就是不知道从哪里开始,

    这篇文章是给你的>

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

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

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

    7. 一旦您在屏幕上看到“finally”字样,请返回 GoDaddy 控制面板中的文件管理器,转到 baddaddy 文件夹,您将看到一个新文件 PHP5.ini 出现在那里。下载此文件。这是 GoDaddy 设置的副本。

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

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

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

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

    我不是 PHP 专家,但这对我有用,博客仍然加载缓慢,但从那时起我没有看到任何“致命错误:30 秒超时”。

    【讨论】:

    • 真棒演练 - 你是救生员!
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      通过在“php.ini”文件中设置“max_execution_time = 600”对我有用。

      【讨论】:

        猜你喜欢
        • 2011-07-07
        • 2015-03-31
        • 1970-01-01
        • 2015-11-12
        • 2014-06-26
        • 2012-07-02
        相关资源
        最近更新 更多