大家好。
我有两个文件一个是phpinfo.php 里面只有
php code phpinfo();?>
另外一个文件是 test.php 里面只有
php code echo $_server['path'];?>
在命令行下面,我用phpinfo页面里的 user/group 的用户名 登陆
执行php test.php
输出的path 和 和在浏览器里运行http://localhost/test.php 输出的path
内容部一致,有人知道原因么?
明明是同一个用户名一个在命令行下执行,一个用webpage 执行
区别就是一个通过apache,一个没有,但是我也是用的apache 的httpd.conf里的用户名啊。
为什么输出的path不一致呢。
请大家帮忙看下,谢谢!!
------解决方案--------------------
$_server['path']
是操作系统环境变量 path 的值,同一台机器自然是一样的
------解决方案--------------------
没看懂,phpinfo里面的user/group是说apache运行的有效用户id和有效用户组id?
哦。
你一个是apache访问,一个是切成apache用户,然后php执行,对吗?
当然不同,因为apache是root启动绑80端口的,root用户的path是带sbin路径的,绑完80就切成user/group了,但是你要知道环境变量是从shell继承下来的,而shell的环境变量是根据启动apache进程的用户决定的,而你启动apache的用户是root,root的shell进程环境变量是带sbin的,所以启动的apache进程继承shell环境变量,也是带sbin的,apache里bind之后setuid不会改变进程环境变量了。
而你直接以user/group执行php,道理就很明显了, 普通用户的shell进程没有sbin的path,所以php解释器进程也就没有sbin的path环境变量了。
------解决方案--------------------
“path_translated”
当前脚本所在文件系统(不是文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。
注意: php 4.3.2 之后,path_translated 在 apache 2 sapi 模式下不再和 apache 1 一样隐含赋值,而是若 apache 不生成此值,php 便自己生成并将其值放入 script_filename 服务器常量中。这个修改遵守了 cgi 规范,path_translated 仅在 path_info 被定义的条件下才存在。
apache 2 用户可以使用 httpd.conf 中的 acceptpathinfo on 来定义 path_info。
