PHP从URL获取正确的路径 请考虑以下URL: http://www.mydomain.com/a/test.php https://www.mydomain.org/a/b/test.php http://www.mydomain.co.nr/a/b/c/test.php https://www.mydomain.com/a/b/c/d/test.php http://www.mydomain.co.uk/a/b/c/d/e/test.php https://www.mydomain.co.au.nm/a/b/c/d/e/f/test.php?var1=test1&var2=test2
现在,我想在test.php文件中声明一个名为ACTUAL_URL的常量,以便它分别包含以下输出(假设这些URL分别按上述顺序表示网站的主目录):PHP从URL获取正确的路径 请考虑以下URL: http://www.mydomain.com/a/test.php https://www.mydomain.org/a/b/test.php http://www.mydomain.co.nr/a/b/c/test.php https://www.mydomain.com/a/b/c/d/test.php http://www.mydomain.co.uk/a/b/c/d/e/test.php https://www.mydomain.co.au.nm/a/b/c/d/e/f/test.php?var1=test1&var2=test2,php,url,Php,Url,现在,我想在test.php文件中声明一个名为ACTUAL_URL的常量,以便它分别包含以下输出(假设这些URL分别按上述顺序表示网站的主目录): 现在考虑一个文件,1.PHP位于以下位置: http://www.mydomain.com/1.php https://www.mydomain.org/a/1.php http://www.mydomain.co.nr/a/b/1.php https://www.mydomain.com/a/b/c/1.php http://www.mydomai
现在考虑一个文件,1.PHP位于以下位置:
http://www.mydomain.com/1.php
https://www.mydomain.org/a/1.php
http://www.mydomain.co.nr/a/b/1.php
https://www.mydomain.com/a/b/c/1.php
http://www.mydomain.co.uk/a/b/c/d/1.php
https://www.mydomain.co.au.nm/a/b/c/d/e/1.php
1.PHP的PHP代码为:
//1.php
//The folder name may remain as "a" or may change.
//But for most cases, it will be "a"
require_once('a/test.php');
//Rest of the code for the page
需要注意的几件事:
define("ACTUAL_URL", basename($_SERVER['PHP_SELF']) );
define("ACTUAL_URL", dirname($_SERVER['PHP_SELF']) );
define("ACTUAL_URL", $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"] );
前两个不提供网站URL,而是提供文件夹的物理路径,这不是必需的。我需要可访问的URL。第三个提供域名+文件夹(这很好),但包含当前正在执行的页面的文件名以及与之关联的任何$\u GET参数。例如,在网站中考虑我的文件的以下结构:
https://www.mydomain.co.au.nm/a/b/c/d/e/1.php?var1=test1&var2=test2
https://www.mydomain.co.au.nm/a/b/c/d/e/f/test.php
在上述情况下,我希望恒定的实际URL为我提供:
https://www.mydomain.co.au.nm/a/b/c/d/e/
test.php的相对路径将始终包含在1.php文件中
那么如何实现上述功能呢?您可以使用该功能两次。一次删除文件名(和任何查询字符串变量),另一次遍历一个目录
dirname(dirname($_SERVER["REQUEST_URI"]));
请注意,这对网站根目录中的文件不起作用。所有路径都需要至少有1个文件夹深
实际上,从安全的角度来看,整个方法都是有问题的。允许客户端传入最终被切碎并传入
require\u一次的路径
将打开您的应用程序。如果要执行此操作,请确保验证/清理输入。查看该函数。它应该为您提供一个良好的起点。您好,您能告诉我如何从安全角度实施更好的解决方案吗?谢谢。@Denver:对require\u调用使用相对路径,或者对路径前缀使用硬编码常量。谢谢您的回复。我会调查的。
dirname(dirname($_SERVER["REQUEST_URI"]));