500(内部服务器错误)php shell_exec

时间:2012-09-21 15:17:30

标签: php shell-exec

我正在使用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设置文件上传限制最大文件大小等内存限制所有我已设置为最大。

我没有得到的是这在当地运作良好,但在我的托管我得到这个错误,我已经联系我的托管媒体寺庙,他们已经说它超出了他们的支持范围。

有关如何进一步调试的任何建议吗?

1 个答案:

答案 0 :(得分:0)

正在发生的事情是,某种反向代理 - 例如Apache平衡器 - 正在超时,无论PHP脚本是否超时。您可以通过创建

等脚本进行验证
<?php sleep(60); ?>

并尝试不同的延迟。

无论如何,增加时间限制只会出现作为解决方案,因为某些浏览器(例如IE8 +)无论如何都会超时。

通常这可以通过分离wget进程并让PHP页面检查进程状态并刷新(例如5..30秒)来解决。但是,许多提供商对分离过程采取了可以理解的模糊观点,因为这可能会占用服务于数十个网站(=付费客户!)的系统的记忆。因此,您必须向提供商查看解决方案是否可接受。

如果是,您可以查看“Asynchronous shell exec in PHP”。