2017-08-27 151 views
1

我在使用$ _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」],是它想也插入網站地址? 任何人都可以解釋我在這裏做錯了嗎?

+1

您不能對文件系統路徑和URL使用相同的變量。它們是完全不同的文檔樹。 –

+1

應該注意的是,使用'$ _SERVER ['HTTP_HOST']'可能會被欺騙,並且可能會根據它的使用方式來表示安全風險。你應該在你的前端控制器的某個地方定義你的URL基地。像'define('BASE_URL','http://example.com/');'。然後你可以在任何你想要的地方使用'BASE_URL'。 –

回答

1

_navTop.php您在href中使用$path,該href是從$_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

下面是一個將項目放置在子文件夾中的示例(從您的文檔根目錄到名爲my-project的文件夾),並使用通過Apache配置添加的自動prepend腳本(在php腳本之前運行的腳本) (.htaccess)來定義可以在其他地方使用的常量。

從(在/ var/WWW /我的項目)

文件結構:

. 
|-- __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__)); 

./ foo/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包括,我會更傾向於把東西在我的include路徑。並使用命名空間(包含文件夾中的子文件夾)對它們進行分組。

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

而在PHP文件,那麼你可以做什麼,無論你在文件層次:

include 'my-project/common.php'; 

最重要的這裏的一點是,有本地的文件路徑和公共路徑之間的差異。

相關問題