如何从命令行将SCRIPT_FILENAME和SCRIPT_PATH服务器变量填充到php-cgi [英] How to populate SCRIPT_FILENAME and SCRIPT_PATH server vairables to php-cgi from the command line
问题描述
我正在尝试从命令行运行cron php脚本。该服务器没有PHP CLI,但是存在php-cgi。我试图将PHP直接传递给php-cgi,但这不起作用,因为缺少了两个服务器环境变量( $ _ SERVER ['SCRIPT_FILENAME']
和 $ _SERVER ['SCRIPT_PATH']
)。我尝试使用遵循建议填充变量,但未填充这些变量。这个答案遗漏了什么?如何使php-cgi填充这些服务器值?这个问题不是特定于平台的,但当前的执行脚本如下:
I'm trying to run cron php script from command line. The server does not have PHP CLI but php-cgi exists. I tried to pass PHP directly to php-cgi but this does not work because two server environment variables are missed ($_SERVER['SCRIPT_FILENAME']
and $_SERVER['SCRIPT_PATH']
). I tried to fill variables using following recommendation but these variables are not populated. What is missed in this answer? How to make php-cgi populate these server values? The question is not platform specific, but execution script looks like this currently
#!/bin/bash
export REDIRECT_STATUS=200
export GATEWAY_INTERFACE="CGI/1.1"
export SCRIPT_FILENAME=/usr/local/www/owncloud/cron.php
export REQUEST_METHOD="GET"
/usr/local/bin/php-cgi
请注意我不要求解决方法,我已经添加了填充必要值的helper php文件。但这是临时解决方案,因为下一次软件更新可能会显示php-cgi调用的另一个问题
Please note that I'm not asking for workaround, I already added helper php file which fill necessary values. But this is temporary solution because next software update could show another issue with php-cgi call
更新
似乎问题不在于php-cgi执行,而是与 SCRIPT_FILENAME
和 SCRIPT_PATH
服务器有关仅变量。因此,解决方案在不需要的情况下通常可以使用。另外,问题可能是特定于版本的(适用于5.5之前的PHP版本)或特定于平台的
It seems the issue is not with php-cgi execution but with the SCRIPT_FILENAME
and SCRIPT_PATH
server variables only. So solution works in common cases when you do not need them. Also the issue might be version specific (it works with PHP version prior to 5.5) or platform specific
推荐答案
我搜索了SO问题这些特定的服务器变量,并在以下语句中找到此处:
I searched SO with question to these specific server variables and found following statement here:
您现在只是在处理变量。 SCRIPT_FILENAME是
CGI规范的一部分。如果PATH_INFO不可用,它将不可用。至于
REQUEST_URI,则是针对Apache的mod_rewrite。 – LiraNuna
You are just juggling variables now. SCRIPT_FILENAME is a part of the CGI spec. It will not be available if PATH_INFO is unavailable. As for REQUEST_URI, it's apache's mod_rewrite specific. – LiraNuna
因此,导出 PATH_INFO
变量也会填充<$ c $中的值c> SCRIPT_FILENAME 和 SCRIPT_PATH
环境变量。请注意,仍然需要 SCRIPT_FILENAME
来将php-cgi指向php输入文件。下面是最终脚本
So exporting PATH_INFO
variable also populates values from SCRIPT_FILENAME
and SCRIPT_PATH
environment variables. Please note that SCRIPT_FILENAME
is needed still to point php-cgi to php input file. Below is the final script
#!/bin/bash
export REDIRECT_STATUS=200
export GATEWAY_INTERFACE="CGI/1.1"
export REQUEST_METHOD="GET"
export SCRIPT_FILENAME=/usr/local/www/owncloud/cron.php
export SCRIPT_PATH=cron.php
export PATH_INFO=$SCRIPT_FILENAME
/usr/local/bin/php-cgi
这篇关于如何从命令行将SCRIPT_FILENAME和SCRIPT_PATH服务器变量填充到php-cgi的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!