0

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

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

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

4

1 回答 1

0

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

<?php sleep(60); ?>

并尝试不同的延迟。

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

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

If it is, you can check out " Asynchronous shell exec in PHP ".

于 2012-09-21T15:31:59.997 回答