从NodeJS调用的PHP-CGI始终返回404

时间:2018-03-21 06:50:27

标签: php node.js

如果我在终端中运行$ 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可以使用它。

所以,我的问题是:造成这种情况的原因是什么?如何解决?

1 个答案:

答案 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);
    }
});