• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

$_SERVER['PATH']值的有关问题

php 搞代码 3年前 (2022-01-23) 35次浏览 已收录 0个评论

$_SERVER[‘PATH’]值的问题
大家好。
我有两个文件一个是phpinfo.php 里面只有

PHP code

<!---ecms Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><? phpinfo();?>

另外一个文件是 test.php 里面只有

PHP code

<!---ecms Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><? echo $_SERVER['PATH'];?>

在命令行下面,我用phpinfo页面里的 User/Group 的用户名 登陆
执行php test.php

输出的path 和 和在浏览器里运行http://localhost/test.php 输出的path
内容部一致,有人知道原因么?

明明是同一个用户名一个在命令行下执行,一个用webpage 执行
区别就是一个通过apache,一个没有,但是我也是用的apache 的httpd.conf里的用户名啊。
为什么输出的path不一致呢。
请大家帮忙看下,谢谢!!

——解决方案——————–
$_SERVER[‘PATH’]
是操作系统环境变量 PAT+本文来源gao@daima#com搞(%代@#码网

搞代gaodaima码

H 的值,同一台机器自然是一样的
——解决方案——————–
没看懂,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。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:$_SERVER['PATH']值的有关问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址