我有一个调用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无关。
答案 0 :(得分:0)
为了它的价值,我解决了这个问题,以上所有都是红鲱鱼。
我没有注意到我所使用的页面使用的是安全的https
协议,因此在使用download_forms.php
脚本时,也可以使用https
来访问它似乎exec()
和passthru()
函数在这些情况下不会在服务器上执行命令,这是有道理的。
我更改了脚本,以便将download_forms.php
网址的协议更改为普通http
,现在它运行正常。
HTH