将$_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']
时,是否也要插入网站地址?
答案 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服务器的资源以及所有它需要知道的内容。 提供完整的实际路径实际上是安全隐患。