我想要的是能够获取特定站点的主机和子文件夹。例如:
从http://example:81/test/
获取http://example:81/test/pagename.php
。
它也应该使用相同的网址http://example:81/test/
以及多个级别的子文件夹,例如http://example:81/test/test2/somepage.php
。
它不应该在文件夹本身中获取文件的结构,例如http://example:81/test/images/page.php
应该仍然是http://example:81/test/
而不是http://example:81/test/images/
。
我尝试使用
$_SERVER['HTTP_HOST'] // only provides example:81
$_SERVER['REQUEST_URI'] // provides full path example:81/test/images/
基本上我想得到的是index.php文件的url,即使它位于子文件夹中。
有没有办法实现这个目标?
答案 0 :(得分:3)
您可能需要构建自己的字符串才能获得完整的网址。
<?php
$url = 'http'.(isset($_SERVER['HTTPS'])?'s':'').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
如果您需要详细信息,可以使用parse_url()
<?php
$details = parse_url($url);
print_r($details);
会输出类似的内容:
Array
(
[scheme] => http
[host] => example.com
[port] => 81
[path] => /test/test2/
[query] => somepage.php
)
编辑:
如果您想要文件的路径,可以使用$_SERVER['PHP_SCRIPT']
获取相对于文档根目录的被调用脚本的文件名或$_SERVER['SCRIPT_FILENAME']
以获取包含文档根目录的服务器路径。还有内置常量__DIR__
和__FILE__
,它们具有直到当前脚本的服务器路径,即使包含在内也是如此。所有这些都可以与dirname()一起使用以获取变量的目录,并使用basename()来获取文件名。还有$_SERVER['DOCUMENT_ROOT']
具有通向Web根目录的路径。
因此,要在此脚本所在的同一目录下获取路径,如果调用脚本/var/www/test/index.php
,则可以使用dirname(__FILE__).'/some/sub/dir/'
。
您可以通过执行$_SERVER
的print_r来查看所有服务器变量,或者甚至可以更好地调用phpinfo()
以获得所有已定义的php模块和变量的良好输出。
答案 1 :(得分:0)
subfolder
(等等 index.php )
我尝试了一些方法,但以下(丑陋)方法有效。
诀窍是“使用所有.php文件可能存在的所有”位置“提供”方法。
如果在其中一个地方找到script name
,则subtract
部分 LEFT
那些地方;这部分应该是subfolder
(如果有的话)。
是的,它丑陋但为我工作......
$string = $_SERVER["SCRIPT_NAME"];
$subfolder = NULL;
// tries to find the 'subfolder' by checking all possible PHP calls
$places = array("/","plugins/","system/php");
foreach($places as $key=>$val) {
$pos = strpos($string,$val);
if ($pos !== FALSE && !isset($subfolder)) {
$subfolder = substr($string,0,$pos-1);
break;
}
}