2014-01-28 88 views
1

我目前正在嘗試將我的phpBB安裝整合到我正在構建的自定義CMS中。 phpBB在其許多功能中都依賴於一個名爲$phpbb_root_path的變量,它在幕後(包括其他PHP等)以及創建前端超鏈接和圖像鏈接。絕對/相對路徑:PHP和HTML之間的根本差異

的phpBB的做法是包括以下代碼每個PHP文檔

define('IN_PHPBB', true); 

$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : 'forums/'; 
print_r(dirname(__FILE__)); 

$phpEx = substr(strrchr(__FILE__, '.'), 1); 
require_once($phpbb_root_path . 'common.' . $phpEx); 
require_once($phpbb_root_path . 'includes/functions_display.' . $phpEx); 

$phpbb_root_path變量然後根據相對於論壇文檔的位置改變。這是一種正常運行的方法,但是我希望通過require_once代替單獨的.php文件中的代碼,以避免我的自定義模板系統出現問題,因此我不必將相同的代碼複製到每個文檔中我有。

症狀:上面的代碼,如果包含的話,將罰款只要包括文檔工作,我文檔根目錄(其中/論壇/是一個子目錄),但它總是會打破其他地方,或者如果與.htaccess url_rewrite一起使用。

問題:它不可能簡單地定義爲$phpbb_root_path「/論壇/」或「/〜(USERID)/論壇/」,這將是顯而易見的,簡單的解決方案。爲什麼?因爲HTML和PHP認爲是根(主要的斜槓)之間存在差異。

通過打印dirname(__FILE__)我確定我的PHP安裝以/home/(USERID)/public_html/爲根。但是,HTML(顯然)以root身份需要WWW.DOMAIN.COM。

正如你可以想像,這導致問題:

1)如果我定義$phpbb_root_path/home/(USERID)/public_html/,PHP的一部分(包括等)的工作,但打印HTML的任何功能將導致的screwups,像<img>連接到(WWW.DOMAIN.COM)/home/(USERID)/public_html/(link to image)

2)如果我將$phpbb_root_path定義爲/forums/,頁面將不會顯示,因爲PHP將嘗試在與「/ home /」相同的級別上找到名爲「/ forums /」的目錄。

問:是否有一個簡單/巧妙的方式通過attuning PHP的根是/home/(USERID)/public_html/刪除PHP/HTML根文件夾定義之間的這種差異,例如?或者我沒有任何選擇,只能在每個文檔中包含代碼,並根據文檔的位置使用相對路徑?

+0

phpBB是非常不合時宜的。對於初學者來說,對於初學者來說,使用名稱空間和自動加載器以及適當的路由,只需要在站點索引中定義根目錄。 [例子](https://github.com/MartyWallace/Tempest/blob/master/index.php) – Marty

回答

0

得到的頁面URL,爆炸是在斜線,計算結果數組,然後用這個數字來決定你是如何深入到目錄結構來決定的相對URL的根路徑

+0

糾正我,如果我錯了,但這似乎會''url_rewrite'玩糟糕; PHP仍然可以從執行腳本的真實位置(比如'/ display)開始工作。php'),而頁面URL可能完全不同(像'/ articles/article-1 /'),從而再次產生差異。 – ividyon

+0

我認爲使用$ _SERVER ['REQUEST_URI']將返回原始URI而不是重寫的 – Eeji

+0

它不會;這仍然會破壞使用url_rewritten鏈接上的根路徑變量的HTML。 – ividyon