[英]Include files from parent or other directory
我需要將父目錄和其他子目錄中的文件包含到子目錄中。 我以前通過簡單地使用 include('/rootdirectory/file.php'); 來完成它。 但現在它似乎不起作用。
只是想知道我怎么能做到這一點,謝謝。
這是我的確切路線:
include('/forums/groups.php');
它給了我這個錯誤(頁面仍然運行):
警告: include(/forums/groups.php) [function.include]:無法打開流:C:\\xampp\\htdocs\\forums\\blog\\posts.php 中沒有這樣的文件或目錄在線
警告: include() [function.include]:在 C:\\xampp\\htdocs\\forums\\blog 中打開 '/forums/groups.php' 以包含 (include_path='.;C:\\xampp\\php\\PEAR') 失敗\\posts.php 在第 3 行
include()
及其親屬采用文件系統路徑,而不是相對於文檔根目錄的 Web 路徑。 要獲取父目錄,請使用../
include('../somefilein_parent.php');
include('../../somefile_2levels_up.php');
如果以/
開頭,將使用絕對系統文件路徑:
// Full absolute path...
include('/home/username/sites/project/include/config.php');
如果您的服務器沒有使用父目錄解析文件
include '../somefilein_parent.php'
試試這個(使用相對於腳本的父目錄):
include __DIR__ . "/../somefilein_parent.php";
考慮到這個問題,我寫了一些東西:
<?
function absolute_include($file)
{
/*
$file is the file url relative to the root of your site.
Yourdomain.com/folder/file.inc would be passed as
"folder/file.inc"
*/
$folder_depth = substr_count($_SERVER["PHP_SELF"] , "/");
if($folder_depth == false)
$folder_depth = 1;
include(str_repeat("../", $folder_depth - 1) . $file);
}
?>
希望能幫助到你。
取決於您嘗試包含的文件所在的位置。
例子:
/rootdir/pages/file.php
/someotherDir/index.php
如果你在 index.php 中寫了以下內容: include('/rootdir/pages/file.php');
它會出錯,因為它會嘗試獲取:
/someotherDir/rootdir/pages/file.php
哪個當然不存在...
所以你必須使用include('../rootdir/pages/file.php');
用外行的術語和實用性來說,我認為這是一個古老的 DOS 技巧/東西。 哇! 那是什么? 操作系統? 從來沒有聽說過!
“..”將您一次從當前子目錄退出到更高的文件夾/目錄,並且.. 輸入兩次也會將您退出 2 個更高的父文件夾。 繼續添加“ .. enter ”,您很快就會發現自己位於目錄的頂層。
至於新手要更好地理解這一點,請考慮這一點(如果您知道這意味着什么,則使用家用 PC 或“C:\\ 驅動器”,而不是網絡服務器/主機“根目錄”)。 當你在做的時候,考慮你的網站存在於你的家用電腦硬盤上,埋在 C:\\ 驅動器下的某個文件夾中。 最后,您可以將其視為“..”后退一個目錄,“/”前進一個目錄/文件夾。
現在! 如果您正在使用命令提示符並且位於 PC 的“ myDocuments ”文件夾中,則必須退出該文件夾以通過鍵入“ ../ ”來接近更高的目錄“C:\\”。 如果您想訪問位於 widows 目錄中的文件而您仍在 myDocuments 文件夾中,則理論上您應該鍵入../windows ; 實際上,在 DOS 命令提示符下,您只需鍵入.. ,但我正在為您設置網絡。 /自然地重定向到另一個目錄。
使用“ myDocuments ”讓我們假設您在其中創建了 2 個名為“PHP1”和“PHP2”的文件夾,這樣我們現在就有了文件夾:
在 PHP1 中,您放置了一個名為 index.php 的文件。 在 PHP2 文件夾中,您放置了一個名為 Found.php 的文件。 現在變成:
在C:\\myDocuments\\PHP1\\index.php文件中,您需要編輯並鍵入以下內容:
<?php include ('../php2/found.php')?>
../是定位的,因此它會考慮您當前的文件位置“C:\\myDocuments\\PHP1\\index.php”,並且是一個指令,告訴它退出 PHP1目錄並進入或前進到 PHP2目錄以查找Found .php文件。 但它讀了嗎? 在下面查看我對故障排除的想法。
現在! 假設您有 1 個文件夾 PHP1 和一個子文件夾 PHP2:
你只需參考/代碼
<?php include('/PHP2/found.php') ?>
因為 PHP2 作為子目錄存在,位於 PHP1 目錄之下或之內。
如果上述方法不起作用,則可能與 access/htaccess 或目錄權限或錯別字有關。 為了加強這一點......進入故障排除......如果“found.php”文件中有錯誤/錯字,它會在出現錯誤時崩潰,這可能是你的原因(require/require_once)體驗它沒有更改目錄或訪問文件的錯覺。 最后想到這個問題,您可能需要實例化您的函數或引用,以便通過創建一個新的變量或對象來使用包含/需要的“任何東西”,例如
$newObject = new nameobject("origianlThingy");
請記住,僅僅因為您包含/需要某些東西,有時意味着它被包含/需要運行,但可能需要重新創建以使其處於活動狀態或訪問它。 New肯定會“如果它是可讀的”重新創建它的一個實例,並使其在當前文檔中可用,同時保留原始文檔。 但是,您應該在所有實例中引用新創建的變量$newObject ....如果它是全局的。
從某些網絡主機帳戶的角度來看; 網絡主機是一些超大尺寸的硬盤驅動器(如您的 PC 上的硬盤驅動器),而您的域只不過是他們分配給您的文件夾。 您的文件夾稱為根。 在該文件夾中,您可以做任何您可以做的事情。 您在目錄/文件夾之間移動的“多種方法之一”是使用../
多次退出當前參考您要查找的文件夾位置。
在我醉酒的狀態下,我意識到我知道的太多,不能保持理智,還不夠瘋狂!”
任何以斜杠開頭的路徑都是絕對路徑。 來自服務器的根文件夾,而不是文檔根目錄的根文件夾。 您可以使用../
進入父目錄。
我從弗蘭克那里獲得了靈感,並在我的“settings.php”文件中添加了這樣的東西,然后當有鏈接時,它會包含在所有頁面中:
“設置.php”
$folder_depth = substr_count($_SERVER["PHP_SELF"] , "/");
$slash="";
for ($i=1;$i<=($folder_depth-2);++$i){
$slash= $slash."../";
}
在我的 header.php 中要包含在所有頁面中:
a href= .... php echo $slash.'index.php'....
似乎它適用於本地和托管環境....
(注意:我是一個絕對的初學者)
之前有同樣的問題是這樣解決的:
include('/../includes/config.php'); //注意'/'出現在'../includes/config.php'之前
您可能對使用 php 的內置函數 realpath() 感興趣。 並傳遞一個恆定的DIR
例如: $TargetDirectory = realpath(__DIR__."/../.."); //將帶你2個文件夾的回來
String realpath() :: 返回規范化的絕對路徑名 ..
根目錄(在 PHP 中)是被 ping 的文件的目錄。 例如,我轉到http://localhost/directory/to/file/index.php ,根目錄將是“/dictory/to/file”,因為它是您向其發出 Web 請求的目錄。
我不敢相信沒有一個答案指向函數dirname()
(自 PHP 4 起可用)。
基本上,它返回引用對象的完整路徑。 如果您使用文件作為參考,該函數將返回文件的完整路徑。 如果引用的對象是文件夾,則該函數將返回該文件夾的父文件夾。
https://www.php.net/manual/en/function.dirname.php
對於當前文件的當前文件夾,使用$current = dirname(__FILE__);
.
對於當前文件夾的父文件夾,只需使用$parent = dirname(__DIR__);
.
如果您的配置文件PHP.ini
設置正確,那么您可以使用:
include($_SERVER["DOCUMENT_ROOT"]."/my_script.php");
// or
require($_SERVER["DOCUMENT_ROOT"]."/my_script.php");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.