PHP exec()命令在代码中可完美运行,但在AJAX调用时无法运行

时间:2019-05-16 02:17:59

标签: php ajax exec

如果我在页面执行期间调用此命令,效果很好

        exec('run.exe -something', $response, $status);

但是我在页面上有一个按钮,可以通过AJAX执行相同的命令:

                // Attempt a call to change the password
            $.ajax({
                url: 'actions/runcommand.php',
                type: 'POST',
                data: { 
                    cid: cid, 
                },
                dataType: 'json',
                success: function(msg)
                {
                    if (ajaxErr(msg) return;

                    // Show success message
                    showMsg('success!');

                },
                error: function(jqXHR, textStatus, errorThrown){ajaxFail(jqXHR, textStatus, errorThrown)}
            });                     

无论我是在代码中还是通过AJAX进行验证,我都已经验证了这两个命令实际上在执行相同的字符串,但是AJAX发起的操作正在返回错误代码而不是起作用。 status的值是1,这是一个一般性错误,因此我没什么可继续的。

我环顾四周,发现了一个类似的帖子,但是他们通过从ajax命令中删除https解决了它。如果我这样做,浏览器会用可怕的消息阻止它。

此文件在尝试HTTPS的本地计算机上运行,​​但由于它是自签名证书或其他原因而失败。我关闭了该网站的https重定向,但这没有什么区别。不确定对什么感到不满意...请帮助!

2 个答案:

答案 0 :(得分:0)

if (ajaxErr(msg) return;

不应在成功回调函数中进行错误处理。您可以删除它或修改此功能的作用。

如果要从其他目录请求URL,请确保URL参数在根目录中使用斜杠:

url: '/actions/runcommand.php',

尝试一下,看看是否仍然存在一般错误:

$.ajax({
    url: '/actions/runcommand.php',
    type: 'POST',
    data: { 
        cid: cid, 
    },
    dataType: 'json',
        success: function(data, status) {
        console.log(data);
        console.log(status);
        showMsg('success!');
    },
    error: function(jqXHR, textStatus, errorThrown) {
        ajaxFail(jqXHR, textStatus, errorThrown)
    }
});

答案 1 :(得分:0)

好吧,这一切都有严重错误的迹象,事实就是如此。我将其留给后代,是因为这是一个容易犯的错误,而且我看到其他人也提出了类似的问题,但都没有很好的答案。

解决方案是我的AJAX文件位于SUBDIRECTORY中,这意味着当它们执行命令时,试图导出到根目录的子目录的输出正试图在ANOTHER SUBDIR中找到该子目录。嘘!