如果我在终端中运行$ php-cgi /home/user/test.php
之类的命令,它将返回该PHP脚本的结果,如果PHP脚本存在于提供的路径中且权限都很好。但是,出于某种原因,如果我使用以下内容从NodeJS调用php-cgi
:
child_process.exec("php-cgi /home/user/test.php",{
env: {
REQUEST_METHOD: method,
CONTENT_LENGTH: body.length,
QUERY_STRING: query,
REDIRECT_STATUS: true
}
}, function (error, stdout, stderr) {
if (error) {
if (displayErrors && stdout) {
callback(stdout);
} else {
callback(error);
}
} else if (stdout) {
console.log(stdout);
callback(null, stdout);
} else if (stderr) {
callback(stderr);
} else {
callback(null, null);
}
});
返回的结果总是:
Status: 404 Not Found
X-Powered-By: PHP/5.5.9-1ubuntu4.24
Content-type: text/html
No input file specified.
我已经确认该命令是在与终端中的测试相同的用户下执行的,我也尝试更改工作目录,但没有成功。
返回的错误似乎与实际的404相同;但是,在这种情况下,文件存在,我已确认php-cgi
可以使用它。
所以,我的问题是:造成这种情况的原因是什么?如何解决?
答案 0 :(得分:1)
我可以在我的Mac上复制它,找到一种似乎可以解决问题的方法。
至于为什么会发生这种情况,这个source有一个很好的解释:
如果您正在使用带有php-cgi的nginx并且已遵循标准 设置它的过程,你可能经常得到“无输入文件 指定“错误。这个错误基本上发生在php-cgi守护进程时 找不到要使用SCRIPT_FILENAME参数执行的.php文件 提供给它的。我将讨论这个问题的常见原因 错误及其解决方案。
当然,你没有使用nginx,但我认为它也适用于此。
按照文章的建议调整代码以使用SCRIPT_FILENAME
为我工作:
child_process.exec("php-cgi",{
env: {
REQUEST_METHOD: method,
CONTENT_LENGTH: body.length,
QUERY_STRING: query,
REDIRECT_STATUS: true,
SCRIPT_FILENAME: '/home/user/test.php'
}
}, function (error, stdout, stderr) {
if (error) {
if (displayErrors && stdout) {
callback(stdout);
} else {
callback(error);
}
} else if (stdout) {
console.log(stdout);
callback(null, stdout);
} else if (stderr) {
callback(stderr);
} else {
callback(null, null);
}
});