PHP GoDaddy 最大执行时间不起作用
Posted
技术标签:
【中文标题】PHP GoDaddy 最大执行时间不起作用【英文标题】:PHP GoDaddy maximum execution time not working 【发布时间】:2015-05-04 03:19:52 【问题描述】:默认的 maximun_execution_time 为 120 秒。我已按照所有说明创建 php.ini 文件并将其放置在正确的位置 public_html。运行phpinfo()发现maximun_execution_time已经成功调整到600秒了。
但问题是它仍然无法执行超过 120 秒的脚本。执行 2 分钟后将返回错误代码 500 Internal server error。
sleep.php 文件:
<?php
$sleepTime = isset($_POST['sleepTime'])? intval($_POST['sleepTime']): 0;
sleep($sleepTime);
echo " woke up";
?>
sleep.html 文件:
<script>
var beginSleep=function()
var timeNow = new Date();
$('input[type=button]').attr("disabled", true);
$('#msg').html(timeNow.getHours()+":"+timeNow.getMinutes()+":"+timeNow.getSeconds()+" Sleeping...<br>");
$.ajax(
url: "sleep.php",
data: $('#formSleep').serialize(),
type:"POST",
dataType:'text',
success: function(msg)
timeNow = new Date();
$('#msg').append(timeNow.getHours()+":"+timeNow.getMinutes()+":"+timeNow.getSeconds()+msg);
$('input[type=button]').removeAttr("disabled");
,
error:function(xhr, ajaxOptions, thrownError)
alert(xhr.status);
alert(thrownError);
);
;
</script>
<form id="formSleep" method="post" action="sleep.php">
<p>Sleep time(seconds):</p><input type="text" name="sleepTime" value="5" />
<input type="button" value="submit" onclick="beginSleep()" />
</form>
<p id="msg"></p>
屏幕截图:
http://i.imgur.com/IAiSpPS.jpg
http://i.imgur.com/w7A1nKA.jpg
如果我将睡眠时间设置为121秒并提交,它不会返回“唤醒”消息,而是提示错误代码500。
最新更新
我与 GoDaddy 支持人员进行了交谈,他们说我的 php.ini 工作正常,因为他们可以看到 max_execution_time 值已更改为 600 秒。但他们无法回答我为什么会发生超时问题。他们坚持认为这是我的脚本问题,并说我的测试脚本对于测试执行时间无效。
我向他们展示了另一个我认为是最简单的测试脚本。该消息将永远不会显示,因为它超过了 120 秒,它会返回错误代码 500 内部服务器错误。
<?php
sleep(121); echo "sleep(121) completed";
?>
他们向我展示了他们的测试脚本,并声称 max_execution_time 设置工作正常。
test.php:test.php 会在 30 秒后重定向到我的主页。
header( "refresh:30; url=http://my-site.net" );
echo "please wait 30 seconds";
他们向我展示的另一个测试脚本是无限循环“for(;;) ;”。此测试脚本也会在超过 120 秒时自动超时。除此之外,无限循环消耗了我 80% 的 CPU 资源。
register_shutdown_function(function()
echo "shutdown function called\n";
);
set_time_limit(600); // Set time limit to 1 second (optional)
for (;;) ;
他们得出的结论是,我的 max_execution_time 无法正常工作是因为我没有足够的 CPU 资源。
我不相信他们所说的,因为 sleep() 不会使用太多资源。我尝试并行运行测试脚本,但 CPU 使用率为 0%。除此之外,我不认为 header("refresh:30", url=...) 函数可以算作一个长时间运行的脚本。 GoDaddy 支持服务不如我预期。
【问题讨论】:
godaddy 为所有主机使用共享的 php.ini,因此请确保您已将其放在主机目录的绝对根目录中。 如果您使用 godaddy 进行托管,您将度过一段糟糕的时光 我花了一整天但没有找到任何解决方案。我不明白为什么它不起作用。如果我将 php.ini 放在错误的目录中,phpinfo() 应该保持默认值(max_execution_time=120),不是吗?这很奇怪,phpinfo() 得到了更新,但服务器没有。for (;;)
将永远尽快执行该 for 循环。这意味着它将使用 100% 的 CPU 来运行该循环。试试for (;;) sleep(100);
或更好的sleep(601)
【参考方案1】:
000webhost和bluehost和ProISP一样的问题,任何运行超过120秒的PHP进程都会被终止,不管设置如何,以防止服务器过载,你必须问工程师(实际上知道问题是什么) )为您的帐户/脚本获得此安全功能的豁免(祝您好运。实际上只有 ProISP 给了我一个豁免,对于 1 个特定的 php 脚本..) - 或者您可以购买 VPS(例如,ramnode.com) ,或使用没有此限制的虚拟主机(如 syse.no ),或使用可能是 愿意给你豁免(如 proisp.no )
GoDaddy 支持人员智障。为什么?标头(“刷新:30;url=http://my-site.net”); 这会使您的浏览器重定向,与php执行时间无关,他们无法找到问题的真正原因,而真正的问题与您的cpu使用情况无关。
【讨论】:
你是对的。最后他们告诉我,除非我使用 VPS 或专用服务器,否则 GoDaddy 不允许长时间执行。【参考方案2】:This post 使我能够提高我的 PHP 限制。
关键信息:
打开与您的 GoDaddy 主机帐户的 SFTP 连接
在与wp-config.php
相同的目录下,创建一个.user.ini
文件。
注意前导.
-
在这个
.user.ini
文件中添加max_execution_time = 180
这会将 GoDaddy max_execution_time
增加到 3 分钟。
【讨论】:
【参考方案3】:将此添加到您的 php 脚本的顶部:
set_time_limit(600);
//or set_time_limit(0); unlimited time
ignore_user_abort(1);
【讨论】:
我试过 set_time_limit(600) 和 set_time_limit(0) 但还是不行。 我只能得出结论,godaddy不允许你改变它。打开支持票并询问他们。【参考方案4】:将它放在 PHP 脚本的顶部
ini_set('max_execution_time', 300); //300 seconds = 5 minutes
如果有效,则运行
php在哪里
检查输出文件夹位置并转到此位置 php.ini 文件。检查 max_input_time=?
【讨论】:
php 位于 usr/bin/ 文件夹,max_execute_time=120,max_input_time=60。 您是否在 GoDaddy 服务器中使用 cpanle。找到正确加载的 php.ini 文件 1.from phpinfo 页面和 2 .php -i | grep php.ini 打开两个文件并更改 max_execution_time = 300 而不是 120 是的,我正在使用 GoDaddy Linux cPanel 共享主机。 phpinfo() 显示我加载的配置文件是我的自定义 php.ini (/home/myaccount/public_html/php.ini) 但“php -i | grep php.ini”显示加载的配置文件是 GoDaddy 默认的 php.ini (usr/local/lib/php.ini) 我没有权限修改 GoDaddy 默认的 php.ini 文件。是不是这个原因导致我自定义的 php.ini 没有生效? 那么没有办法启用它,在共享主机中一切都取决于策略。爸爸用了什么政策。 php 执行是一种线程,因此通常不允许在服务器上执行。【参考方案5】:Godaddy默认不允许更新服务器配置。 即使您找到路径 og php.ini,您也无法根据他们的政策通过 SSH/FTP 客户端进行编辑。
解决方案: 我找到的唯一解决方案是致电 Godaddy 支持。一旦他们允许权限,您将能够在 PHP 变量的以下路径中找到可编辑字段。
路径 : 主页 > 软件 > PHP 版本 > 切换到 PHP 选项
【讨论】:
以上是关于PHP GoDaddy 最大执行时间不起作用的主要内容,如果未能解决你的问题,请参考以下文章
CURLOPT_TIMEOUT 在 php / windows 中不起作用?
.htaccess url rewrite在GoDaddy Shared Server上不起作用,返回了Apache 2.4.3 - 404错误