php $ _SERVER [' DOCUMENT_ROOT']问题

时间:2017-08-27 15:01:15

标签: php html css

$_SERVER['DOCUMENT_ROOT']与css链接一起使用时,我遇到了问题。 我有一个变量设置为:

<?php
    $path = ($_SERVER['DOCUMENT_ROOT'] . "/");
    $_SERVER['HTTP_HOST'] . '/';
?>

我使用$ path变量指向包含css文件链接的页面上的导航页面。例如,在index.php

<?php
    include ($path . "includes/_navTop.php");
?>

_navTop.php页面中的css链接是:

<?php
    echo '<link href="' . $path . 'includes/css/main.css" rel="stylesheet">';
?>

当我在Firefox和Chrome中测试页面时,我在开发者控制台中发现404未找到错误。路径显示为:

http://www.example.com/data/9/3/5/155/3657318/user/4068338/htdocs/includes/css/bootstrap.min.css

使用$_SERVER['DOCUMENT_ROOT']时,是否也要插入网站地址?

3 个答案:

答案 0 :(得分:1)

_navTop.php中你在你的href中使用$path,这是$_SERVER['DOCUMENT_ROOT']早期构建的:服务器端本地地址(如/ home / user / www)。我认为您可能尝试做的事情将涉及使用'HTTP_HOST',例如

$base = $_SERVER['HTTP_HOST'] . '/';
echo '<link href="' . $base . 'includes/css/main.css" rel="stylesheet">';

但是,我认为从include/...开始编写链接的href也应该有效,因为大多数浏览器都会解析基址(如果没有给出)作为域本身。

答案 1 :(得分:1)

这是一个将项目放在子文件夹中的示例(从您的文档根目录中放置一个名为my-project的文件夹),并使用通过apache配置添加的自动前置脚本(在php脚本之前运行的脚本)( .htaccess)定义你可以在其他地方使用的常量。

来自(/ var / www / my-project)的文件结构:

.
|-- __bootstrap.php
|-- foo
|   `-- bar.php
|-- .htaccess
|-- qux.php
`-- static
    `-- main.css

./。htaccess的

php_value auto_prepend_file /var/www/my-project/__bootstrap.php

./__ bootstrap.php中

<?php
define('LOCAL_BASE', __DIR__);
define('PUBLIC_BASE', str_replace($_SERVER['DOCUMENT_ROOT'], '', __DIR__));

./富/ bar.php

<?php

var_dump(LOCAL_BASE);
var_dump(PUBLIC_BASE);

输出:

string '/var/www/my-project' (length=29)
string '/my-project' (length=17)

./ qux.php

<html>
    <head>
        <link rel="stylesheet" type="text/css" href="<?= PUBLIC_BASE ?>/static/main.css">
    </head>
    <body>
    </body>
</html>

然而,对于Php包含,我更倾向于在我的包含路径中添加一些东西。并使用命名空间(包含文件夹中的子文件夹)对它们进行分组。

set_include_path('/path/to/project/includes');

然后,在Php文件中,无论您身在文件层次结构中,都可以执行此操作:

include 'my-project/common.php';

这里重点是本地文件路径和公共路径之间存在差异。

答案 2 :(得分:0)

您不需要知道服务器上项目的真实路径。您只需要指定相对于DOCUMENT_ROOT的文件夹。以下将解决问题:

<?php
echo '<link href="/includes/css/main.css" rel="stylesheet">';
?>

客户端的浏览器使用此路径来请求来自WEB服务器的资源以及所有它需要知道的内容。 提供完整的实际路径实际上是安全隐患。