[英]php include doesn't find file, but path seems accurate
我將根目錄保存在變量$root
。 然后,我將文件的其余地址附加到包含文件中。
error_reporting(E_ALL);//gives me nothing btw
$root = "http://myhomedirectory.int/tools";
include ("{$root}/resources/php/includes/authenticate.php");
echo "{$root}/resources/php/includes/authenticate.php";
由於某些原因,include失敗,但是當我復制/粘貼echo語句生成的內容時,將帶我進入authenticate.php
。 我已將該文件的權限設置為777。為什么會這樣?
include()
用於讀取本地php文件的文件內容。 它開始在php.ini中定義的include目錄中搜索,最后以嘗試將參數解釋為相對路徑結束。
當您提供絕對路徑(例如http:// ...)時,遠程服務器將永遠不會返回php腳本,而只會返回純html。 (即使這是您的本地服務器,使用外部地址進行的調用也不會返回任何PHP代碼,因為服務器將解析文件內容並返回生成的html)
因此,要在您的服務器上包含一個php文件,請使用相對路徑或將其放入定義的include目錄中。
旁節點:如果要包含其他文件,則始終*必須定義相對於已執行腳本的路徑。 假設布局:
/index.php
/folder1/file1.php
/folder1/folder2/file2.php
而你要包括file2
在file1
和file1
中index.php
(這是執行腳本),PHP將執行以下步驟:
index.php
是已執行的腳本,因此使用include("folder1/file1.php")
將執行所需的操作。 但是,如果你現在想還包括file2
的file1
,你必須想象 , file1
被提升到根目錄/
,所以從內包括file1
只會工作,如果你已經相對於根的路徑定義: include("folder1/folder2/file2.php")
-即使file1
實際上位於folder1
。
現在直接調用file1
將會失敗,因為php會搜索folder1/folder1/folder2/file2.php
這就是為什么將文件放到“全局”包含路徑而不是相對引用中的原因。 ( 當且僅當你也直接調用subfolder'd文件*)
通常,您要對所有請求使用index.php
然后所有子文件夾的文件都是網站根目錄中的相對文件,這使您可以省略全局包含目錄並使用相對路徑來拆分多個項目在同一台服務器上。
(* AJAX會違反這一原理,因為ajax調用的php文件將在其實際目錄中執行,而不是從包含包含ajax調用的文件的目錄中執行!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.