簡體   English   中英

"包括來自父目錄或其他目錄的文件"

[英]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”的文件夾,這樣我們現在就有了文件夾:

  • C:\\myDocuments\\ PHP1
  • C:\\myDocuments\\ PHP2

在 PHP1 中,您放置了一個名為 index.php 的文件。 在 PHP2 文件夾中,您放置了一個名為 Found.php 的文件。 現在變成:

  • C:\\myDocuments\\PHP1\\ index.php
  • C:\\myDocuments\\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:

  • C:\\myDocuments\\ 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.

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