2013-04-10 136 views
0

我環顧四周尋找答案,希望我沒有錯過它或不重複它,但它在這裏。我有兩個文件:PHP路徑位置

/var/www/index.php

/var/www/include/php/header.php

指數包括header.php文件。我希望頭文件能夠遍歷兩個級別,所以我可以包括/include/css/index.css。這裏的問題,頭也包括通過文件,如

/var/www/sub/page.php

,所以我不能簡單地用../../以來的PHP文件更改位置。我嘗試使用$_SERVER['PHP_SELF'],但這取決於包含頭文件的php文件的位置。我也試過dirname(__FILE__),但是這給了我包括/var/www/部分,導致併發症。

本質上,我想從包含的header.php文件中獲取$_SERVER['PHP_SELF']的值,而不是從包含它的php腳本中獲取值。我希望網站是模塊化的,所以它可以發佈到任何地方,而不必擔心文件位置會混亂。有沒有更簡單的方法來做到這一點?

+0

你包括你的'CSS'爲HTML包括哪些內容?或者將PHP include包含在文檔中?因爲你會做一個不同的方法... – Jakub 2013-04-10 17:33:46

+0

作爲一個HTML包含。我最初的想法是讓那些包含根文件夾絕對路徑的前綴,以便如果這個網站被移到不同的層次上,它不會受到影響。 – Cody 2013-04-10 17:42:25

+0

檢查此答案以從路徑中獲取Url http://stackoverflow.com/a/36101073/3626097 – fallinov 2016-06-17 12:35:47

回答

1

根據你的評論,它是一個包括CSS你基本上不用擔心WHERE你的PHP文件,只是做了從服務器的角度(網絡側):

<link rel="stylesheet" type="text/css" href="/include/css/index.css"> 

對於文件在您的應用程序(網絡曝光)

更新的/include/css文件夾:

根據您的UPD ated評論,您應該存儲變量爲您的應用程序(配置),並呼籲像笨某個功能:

$domain_url= "http://".$_SERVER['HTTP_HOST']; 
$domain_url.= tr_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']); 

function base_url($url){ 
    return $domain_url + $url; 
} 

echo base_url("include/css/index.css"); 

編號:http://ellislab.com/codeigniter/user-guide/helpers/url_helper.html

+0

這些問題是我的網站不一定在web根目錄下,所以它可能是/mywebsite/include/css/index.css,我不想將它編入/ mywebsite/part,我希望它只是去從該頭文件要查找的位置開始的兩個級別包括在內。 – Cody 2013-04-10 17:47:38

+0

然後你需要做一些類似於CodeIgniter的base_url(),你可以在其中定義根URL(http://domain.com/subsite/),並在你的代碼中使用該fn來爲你的CSS資源添加前綴。 – Jakub 2013-04-10 17:51:17

+0

感謝您的更新。我想過這樣做,我只是想知道是否有一種自動的方式,而不必自己輸入字符串。 – Cody 2013-04-10 17:57:45

2

認爲您需要使用__DIR__常量才能夠包含來自任何文件的相對文件。 不過還好我想定義你的根文件系統路徑的一些常數,像

define('FS_ROOT', 'root path here'); 

,當包含文件相對這個常數。此外,它會允許你爲每個使用的重要文件夾添加常量,如果改變路徑,你將需要改變一些常量值

+0

__dir__的問題在於它提供了磁盤絕對路徑,而不是導致我遇到問題時的Web絕對路徑試圖包括我的CSS。 – Cody 2013-04-10 17:51:12

+0

對於.CSS ant其他URL只需爲基礎URL添加一個常量+爲更深層次添加相同常量。不要忘記 2013-04-10 19:02:16

+0

基本標籤的工作原理正是我想要的。現在我只需要相當於php的。 – Cody 2013-04-10 19:47:56