为啥有些 PHP 安装有 $_SERVER['SCRIPT_URI'] 而其他没有?
Posted
技术标签:
【中文标题】为啥有些 PHP 安装有 $_SERVER[\'SCRIPT_URI\'] 而其他没有?【英文标题】:Why do some PHP installations have $_SERVER['SCRIPT_URI'] and others not?为什么有些 PHP 安装有 $_SERVER['SCRIPT_URI'] 而其他没有? 【发布时间】:2012-01-13 23:10:02 【问题描述】:我运行两台 Apache 2 服务器。一个有 php5.2,另一个有 PHP5.3。 5.3机器上有$_SERVER['SCRIPT_URI']
是有原因的吗?
这个变量从何而来?这显然是来自 Apache 环境的东西,并且没有记录在 PHP 手册中。然而,它是['HTTPS']
、['SERVER_NAME']
和['REQUEST_URI']
组合的便捷捷径。
我尝试过查看配置文件、搜索 SO 和网络。
【问题讨论】:
我假设您的意思是“另一个有 5.3”?至于你的问题,对不起,我不确定。远射,但您看过 apache2 文档吗? AFAIK 中 $_SERVER[] 全局中可用的很多内容是由服务器本身决定的。奇怪的是手册没有记录它...... 5.3 已经发布了一段时间了,不是吗? 谢谢我已经修复了那个版本号! 【参考方案1】:根据post on WebHostingTalk,它来自mod_rewrite:
添加
RewriteEngine On
到你的 httpd.conf 文件中你想打开这个的虚拟主机 on for 然后重启 apache。
【讨论】:
不,那没有成功。重写引擎在我的系统上,我的网页在虚拟主机内。但是还是没用。 这对我有用。我必须在网站的 http 配置文件中设置它。【参考方案2】:我使用 Plesk12、PHP 5.6.6 迁移到 CentOS 7 并重写等。 SCRIPT_URI 不存在。 因为它在某些情况下使用起来非常好,所以我写了这个解决方法:
if(!isset($_SERVER['SCRIPT_URI']))
$_SERVER['SCRIPT_URI'] = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$pos = strrpos($_SERVER['SCRIPT_URI'],'/');
if($pos!==false)
$_SERVER['SCRIPT_URI'] = substr($_SERVER['SCRIPT_URI'], 0, $pos+1);
由于我不是专家,请在插入之前检查此代码是否适用于您的特定应用程序。在我的系统上,它似乎运行良好。我只是把它放在我的 index.php 和其他的 Head-Area 中。
【讨论】:
【参考方案3】:据我所知,$_SERVER['SCRIPT_URI']
仅在您将 PHP 作为 CGI 运行时可用。我想这一定是你的两个 PHP 安装的区别。
【讨论】:
我的服务器设置了 SCRIPT_URI,但是 php_sapi_name() 报告了 apache2handler。 (在 Fedora 18 上使用 PHP 5.4 和 Apache 2.4 的 mod_php) 这对我来说不是真的:我使用 PHP 作为 mod_php 并且它定义了 SCRIPT_URI。以上是关于为啥有些 PHP 安装有 $_SERVER['SCRIPT_URI'] 而其他没有?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我使用 PHP 的 $_SERVER 变量得到一个随机字符串作为 IP 地址?
为啥是我的标头(“位置:$_SERVER['HTTP_REFERER']”); PHP函数不起作用?
PHP中为啥我获取不到$_SERVER["REMOTE_USER"]的值?
使用 SC 排序规则的 SQL Server Unicode 查询