簡體   English   中英

如何使用PHP包括具有相對路徑的多個目錄/子目錄

[英]How to use a PHP includes across multiple directories/sub directories with relative paths

我正在嘗試構建的cms系統中的路徑有困難,我基本上有一個文件夾里面有我的header.php和footer.php文件。

這些都包含在index.php中並且工作正常。 但是當我嘗試在我的admin子目錄中的文件中使用相同的包含時,圖像和CSS被破壞,顯然是因為相對路徑現在是錯誤的。

所以我的問題是,我怎么能克服這個?

在閱讀了這里和其他各種來源的其他一些問題后,我認為絕對路徑是前進的方向,但我總是使用相對路徑,因此使用配置文件指定絕對路徑的各種概念讓我感到困惑。

我通常設法為自己做事,但這是漫長的一天,我很難過!

我通常在我的應用程序根目錄中有一個名為config的文件,在其中我為基本路徑和其他一些定義了一個常量:

define('APP_BASE_PATH', dirname(__FILE__));
define('APP_FUNCTIONS_PATH', APP_BASE_PATH . '/functions');

我包括我的文件

include (APP_BASE_PATH . 'includes/another_file.php');
include (APP_FUNCTIONS_PATH . '/function_file.php');

這樣我就可以將我的應用程序放在任何目錄中,而且我可以移動文件而不必擔心。

也使用完整路徑使包含更快

我更喜歡設置環境變量(在Apache中,使用.htaccess或.conf)。 這樣,您可以在webroot中的任何位置自由移動所有文件,並且可以訪問這些變量。

SetEnv lib /library/folder/
SetEnv public /my/web/root/
SetEnv environ DEVELOPMENT

您還可以使用上面.htaccess片段中提到的名為“environ”的變量,在所有腳本中包含服務器特定文件作為配置文件,並在那里設置各種變量。

require_once getenv('lib')."Configs/Config_".getenv('environ').".php";

享受你的自由!

要么...

include($ _ SERVER ['DOCUMENT_ROOT']。'/ includes / header.php');

PHP中的相對路徑和絕對路徑有點脆弱,因為它們不僅依賴於包含文件的當前目錄,還依賴於當前工作目錄。

所以你需要一個兩部分的解決方案。

首先,您需要一個重定向器。 基本上,這是一個包含文件,用作所有其他頁面的單點調用。 它的工作是包括其余的基礎設施。 您的所有頁面都調用此重定向器,並且只調用此重定向器(但您可以將它們鏈接起來)。

這個重定向器現在可以

 include_once dirname(__FILE__).'/include/include.php';

這使您可以更改基礎結構的包含文件或位置,並且您必須更新的所有內容都是一個文件。 dirname()調用解決了所有相對和絕對問題,並讓它尋找相對於自身的下一步。 根據定義,這只會在您更改時發生變化,因此它始終有效。

第二部分是自定義包含器,因此您可以使用函數按名稱調用內容,然后獲取正確的文件。 在您的基礎架構目錄中埋藏這個是在哪里。 然后它變成一個黑盒子,這個區域外的頁面在不知道的情況下調用,而不需要知道它是如何工作的或它在哪里。 這消除了路徑常量包含頁面片段的需要,因為您有一個地方為您完成所有操作。

我有這個類似的問題,並在此鏈接中發布此查詢。 URL為: PHP問題包括全局路徑

在研究人們給出的解決方案並查看各種線程(包括這個 - 我在帖子底部的解決方案中引用過)時,我有辦法! 我也發布了解決方案。 它可能會幫助一個面臨類似問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM