PHP exec在直接调用脚本时有效,但不是由jQuery ajax调用

时间:2011-09-09 21:07:15

标签: php javascript jquery exec

我有一个调用exec()的PHP脚本。我一整天都遇到麻烦,一些代码调用相同的脚本工作而一些没有(exec()返回127错误代码)。

我终于知道,无效的代码是在我的网页上从jQuery调用的代码:

$('#next_button').click(function(event) {
    $.get('download_forms.php', function(data) {
        alert(data);
    });
});

但是,如果我将download_forms.php的网址键入浏览器的地址栏,则exec()将正确执行。我试图运行其他脚本从jQuery调用exec()进行测试,它们都会失败,但是如果键入地址栏就可以工作。

我不明白为什么这会成为一个问题。无论是在Firefox的地址栏中输入网址,还是按下我网页上的按钮,都会发出HTTP请求。

有人知道可能会有什么不同吗?

注意:我在exec()中尝试了不同的命令,它们都是我的jQuery失败的(注意所有其余的PHP代码运行正常)但是当脚本地址直接输入到地址栏时工作。

非常感谢

更新

这是我的download_forms.php代码。最初的exec()只是为了看看exec()是否正常工作。如上所述,只有在直接输入地址栏时才能正确执行。

include ('inc/session.inc.php');
require_once('Downloader.php');
exec('id', $output, $r);
echo var_dump($output);
echo($r);
try {
    $downloader = new Downloader();
    $saveMessages = $downloader->saveToDatabase();
    // exec() in the combineAndDownloadForms() method
    $downloadMessages = $downloader->combineAndDownloadForms();
} catch(Exception $e) {
    echo $e->getMessage();
}

进一步更新

我在我的网页上创建了一个超链接到download_forms.php页面(即<a>),但是exec()仍然没有执行。至少我知道这与ajax无关。

1 个答案:

答案 0 :(得分:0)

为了它的价值,我解决了这个问题,以上所有都是红鲱鱼。

我没有注意到我所使用的页面使用的是安全的https协议,因此在使用download_forms.php脚本时,也可以使用https来访问它似乎exec()passthru()函数在这些情况下不会在服务器上执行命令,这是有道理的。

我更改了脚本,以便将download_forms.php网址的协议更改为普通http,现在它运行正常。

HTH