0

我想要的是能够获取特定站点的主机和子文件夹。例如:http://example:81/test/http://example:81/test/pagename.php.

它还应该适用于相同的 urlhttp://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,即使它在子文件夹中。

有什么办法可以做到这一点?

4

2 回答 2

3

您可能必须构建自己的字符串才能获得完整的 url。

<?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/'.

您可以通过执行 print_r 来查看所有服务器变量,$_SERVER甚至可以调用更好的方法phpinfo()来获得所有已定义 php 模块和变量的良好输出。

于 2013-05-01T22:31:04.930 回答
0

我在我的一个项目中遇到了类似的问题;我希望能够subfolder通过脚本文件名(等index.php)获取我尝试了一些方法,但以下(丑陋的)方法有效。诀窍是用所有 .php 文件可以存在的所有可能“位置”来“提供”该方法。

如果在script name这些地方之一中找到 ,那么这些地方的左侧subtract部分;这部分应该是(如果有的话)。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;
   }
} 
于 2013-05-01T22:55:36.253 回答