查找默认网站主页的名称


find the name of the default web site home page

我想一个PHP代码能够识别它运行的域的主页(所以代码是可移植的)。我可以在常见默认主页列表中使用file_exists但它会同时找到index。php和index。html

我可能最终有几个,因为一些系统识别default.html, home.html和其他有效的默认值。服务器有一个优先级列表,例如,如果同时有index.php和index.html,服务器将优先考虑index.php -但不一定,htaccess可以改变优先级,甚至将someotherfile.html设置为默认值。

如果包含我的代码的页面是主页,我可以做$_SERVER['PHP_SELF'],但它不是。

=================

基于一个建议的方法,我尝试使用以下代码:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
echo(substr($response, 0, curl_getinfo($ch,CURLINFO_HEADER_SIZE)));
?>  

但是头文件不包含文件名

HTTP/1.1 200 OK Server: nginx Date: Wed, 11 Jun 2014 19:08:09 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PleskLin

在不同的服务器上得到类似的结果

HTTP/1.1 200 OK Date: Wed, 11 Jun 2014 18:39:47 GMT Server: Apache X-Powered-By: PHP/5.4.29 Transfer-Encoding: chunked Content-Type: text/html

====================

原因是我需要一个网站上所有页面的列表(不包括服务器上的任何页面,但没有链接到,所以我不能只是浏览目录)。我已经妥协了,最后将列出example.com/(无论它找到什么),并说index.htm,如果有其他页面的链接,这(可能)是一样的。我想如果有必要,我可以通过比较文件大小或时间戳来消除重复

这将帮助您确定PHP文件的运行路径:

$script_path = realpath(dirname(__FILE__));

但是您需要确保将它放在站点根级别的文档中,以获得准确的路径值。因此,根据您的网站结构,您可以将这行代码放在index.phpindex.php将通过include_oncerequire_once加载的公共配置文件中。

也就是说,为了最好&最可靠的可移植性可能是最好在配置文件中设置基本路径变量&当你的网站从一个位置移动到另一个位置时,就改变它。像这样:

$BASE_PATH = '/var/www/path/to/site/root/';

然后当你需要为你的代码加载文件时,只需像这样设置路径:

include_once($BASE_PATH . 'lib/some.cool.thing.php');

这样,$BASE_PATH只是在一个公共配置文件的一个地方设置。当你将代码从一个设置迁移到另一个设置时,你知道你只需要改变一个设置

如果你需要页面名称,我可以这样想:

向同一域发出curl请求,获取响应头并检查"Content-Location"头字段。

$url="www.domain.com"    
$defaults = array(
        CURLOPT_POST => 1,
        CURLOPT_HEADER => 0,
        CURLOPT_URL => $url,
        CURLOPT_FRESH_CONNECT => 1,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_FORBID_REUSE => 1,
        CURLOPT_TIMEOUT => 4,
    );
    $ch = curl_init();
    curl_setopt_array($ch, ($options + $defaults));
    $header_size = curl_getinfo($ch,CURLINFO_HEADER_SIZE);
    $result = curl_exec($ch);
    $header = substr($result, 0, $header_size);
    var_dump($header);
    curl_close($ch);

检查是否有你需要的....