Notice: 函数 WP_Scripts::localize 的调用方法不正确$l10n 参数必须是一个数组。若要将任意数据传递给脚本,请改用 wp_add_inline_script() 函数。 请查阅调试 WordPress来获取更多信息。 (这个消息是在 5.7.0 版本添加的。) in /data/www/appblog/wp-includes/functions.php on line 6131

PHP获取请求路径和请求参数

获取域名或主机地址

echo $_SERVER['HTTP_HOST']."<br>";  // www.appblog.cn
echo 'http://'.$_SERVER['HTTP_HOST'].'/';  // http://www.appblog.cn/

获取网页地址

echo $_SERVER['PHP_SELF']."<br>";  // /Home/picture

获取网址参数

echo $_SERVER["QUERY_STRING"]."<br>";  // a=1&b=2

获取用户代理

echo $_SERVER['HTTP_REFERER']."<br>";  // http://www.appblog.cn/index.php/Home/index

获取完整的url

echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."<br>";  // http://www.appblog.cn/index.php/Home/picture?a=1&b=2

echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']."<br>";  // http://www.appblog.cn/Home/picture?a=1&b=2

包含端口号的完整url

echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]."<br>";  // http://www.appblog.cn:80/index.php/Home/picture?a=1&b=2

只取路径

echo 'http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]."<br>";  // http://www.appblog.cn/index.php/Home/picture?a=1&b=2

HTTP_HOST与SERVER_NAME的区别

(1)通常情况

$_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息
$_SERVER["SERVER_NAME"] 默认情况下直接输出Apache的配置文件httpd.conf中的ServerName值(或Nginx配置文件)

(2)当服务器为非80端口时

$_SERVER["HTTP_HOST"] 会输出端口号,例如:appblog.cn:8080
$_SERVER["SERVER_NAME"] 会直接输出ServerName值

因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT

(3)当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时

httpd.conf配置如下:

<virtualhost *>
ServerName appblog.cn
ServerAlias www.appblog.cn
</virtualhost>

客户端访问域名www.appblog.cn
$_SERVER["HTTP_HOST"] 输出www.appblog.cn
$_SERVER["SERVER_NAME"] 输出appblog.cn

所以,在实际程序中,应尽量使用$_SERVER["HTTP_HOST"],比较保险和可靠。

上一篇 PHP删除数组中某元素
下一篇 PHP接收异步通知参数示例