我正在使用php shell_exec从jQuery运行命令,但它会保持超时。
所以我的jquery如下。
var send = {
url: $(this).data('url')
}
$.ajax({
type: "POST",
url: "<?php echo base_url(); ?>index.php/upload",
data: send,
//dataType: "json",
//timeout: 8000,
beforeSend: function() {
},
success: function(response) {
console.log(response);
},
error: function () {
alert('error');
}
});
然后调用运行shell_exec
的函数function upload(){
$output = shell_exec("wget {$_POST['url']} 2>&1");
echo "<pre>" . $output . "</pre>";
}
好的,如果为wget get发布的url正在拉一个小文件但是如果wget正在获取一个文件超过20mb我得到500(内部服务器错误)
到目前为止我检查过的事情 我所有的php设置文件上传限制最大文件大小等内存限制所有我已设置为最大。
我没有得到的是这在当地运作良好,但在我的托管我得到这个错误,我已经联系我的托管媒体寺庙,他们已经说它超出了他们的支持范围。
有关如何进一步调试的任何建议吗?
答案 0 :(得分:0)
正在发生的事情是,某种反向代理 - 例如Apache平衡器 - 正在超时,无论PHP脚本是否超时。您可以通过创建
等脚本进行验证<?php sleep(60); ?>
并尝试不同的延迟。
无论如何,增加时间限制只会出现作为解决方案,因为某些浏览器(例如IE8 +)无论如何都会超时。
通常这可以通过分离wget进程并让PHP页面检查进程状态并刷新(例如5..30秒)来解决。但是,许多提供商对分离过程采取了可以理解的模糊观点,因为这可能会占用服务于数十个网站(=付费客户!)的系统的记忆。因此,您必须向提供商查看解决方案是否可接受。
如果是,您可以查看“Asynchronous shell exec in PHP”。