如何从命令行将SCRIPT_FILENAME和SCRIPT_PATH服务器变量填充到php-cgi [英] How to populate SCRIPT_FILENAME and SCRIPT_PATH server vairables to php-cgi from the command line

查看:86
本文介绍了如何从命令行将SCRIPT_FILENAME和SCRIPT_PATH服务器变量填充到php-cgi的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从命令行运行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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆