包含父目录或其他目录中的文件

时间:2012-01-11 21:02:25

标签: php

我需要将父目录和其他子目录中的文件包含到子目录中。我以前只使用include('/ rootdirectory / file.php')就完成了;但现在它似乎不起作用。

只是想知道我怎么能这样做,谢谢。

这是我的确切行:

include('/forums/groups.php');

它给了我这个错误(页面仍在运行):

  

警告: include(/forums/groups.php)[function.include]:失败   open stream:没有这样的文件或目录   行上的C:\ xampp \ htdocs \ forums \ blog \ posts.php

     

警告: include()[function.include]:打开失败   '/forums/groups.php'包含在内   (include_path ='。; C:\ xampp \ php \ PEAR')in   第3行的C:\ xampp \ htdocs \ forums \ blog \ posts.php

11 个答案:

答案 0 :(得分:73)

include()及其亲属采用文件系统路径,而不是相对于文档根目录的Web路径。要获取父目录,请使用../

include('../somefilein_parent.php');
include('../../somefile_2levels_up.php');

如果以/开头,将使用绝对系统文件路径:

// Full absolute path...
include('/home/username/sites/project/include/config.php');

答案 1 :(得分:6)

这是我写的那个问题:

<?
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);
         }
?>
希望它有所帮助。

答案 2 :(得分:6)

如果您的服务器没有使用

解析父目录的文件

include("phpdom/simple_html_dom.php"); $html=file_get_html("https://www.aliexpress.com/item/2017-Kids-Baby-Sweater-clothes-sets-2PCS-Winter-Newborn-baby-cotton-Long-sleeve-Top-pants-Fashion/32794929322.html?spm=2114.search0104.3.369.58a4e0a3HHUVH3&s=p&ws_ab_test=searchweb0_0,searchweb201602_1_10152_10151_10065_10344_10068_10342_10343_10313_10059_10340_10341_10534_100031_10084_10604_10617_10083_10616_10103_10307_10615_10142,searchweb201603_25,ppcSwitch_4&algo_expid=82c85051-8e8e-42bd-8a6e-0f39e5b0ba1a-47&algo_pvid=82c85051-8e8e-42bd-8a6e-0f39e5b0ba1a&transAbTest=ae803_4&priceBeautifyAB=1"); $title=$html->find(".p-available-stock"); foreach ($title as $key) { echo $key; }

试试这个:

include '../somefilein_parent.php'

答案 3 :(得分:4)

取决于您尝试包含的文件的位置。

示例:

/rootdir/pages/file.php

/someotherDir/index.php

如果你在index.php中写了以下内容: include('/rootdir/pages/file.php');这会产生错误,因为它会试图获得:

/someotherDir/rootdir/pages/file.php当然不存在......

所以你必须使用include('../rootdir/pages/file.php');

答案 4 :(得分:3)

在外行人的术语和实用性方面,我认为这是一个旧的DOS技巧/事物。哇!那是什么? DOS?从来没有听说过!

“..”将您退出当前子目录一次到更高的文件夹/目录,然后 ..输入两次输入后退2更高的父文件夹。继续添加“ ..输入”,您很快就会发现自己位于目录的顶层。

至于新手要更好地理解这一点,请考虑这一点(就家用PC或“C:\驱动器”而言,如果你知道这意味着什么,而不是web-servers / host“根目录”)。当你在它的时候,考虑你的网站存在于家用电脑硬盘上的某个地方,埋在C:\驱动器下的某个文件夹中。最后,您可以将其视为“..”返回一个目录,“/”是前一个目录/文件夹。

现在! 如果您正在使用命令提示符并且位于PC的“ myDocuments ”文件夹中,则必须通过键入“ ../ ”。 如果您想在仍在myDocuments文件夹中时访问位于widows目录中的文件,理论上可以键入 ../ windows ;实际上在DOS命令提示符下你只需输入 .. ,但我正在为你设置网页。 / 会自然地重定向到另一个目录。

使用“ myDocuments ”可以假装您在其中创建了名为“PHP1”和“PHP2”的2个文件夹,我们现在拥有这些文件夹:

  • C:\我的文档\的 PHP1
  • C:\我的文档\的 PHP2

在PHP1中,放置一个名为index.php的文件。在PHP2文件夹中放置了一个名为Found.php的文件。它现在变成了:

  • C:\ myDocuments \ PHP1 \ index.php
  • C:\我的文档\ PHP2 \的 found.php

里面 C:\ myDocuments \ PHP1 \ index.php 文件,您需要编辑并键入以下内容:

<?php include ('../php2/found.php')?>

../ 是位置因此它会将您当前的文件位置视为“C:\ myDocuments \ PHP1 \ index.php”并且是一个指令,告诉它退出PHP1 < / strong>目录并输入或前进到PHP2 目录以查找 Found.php 文件。但是它读了吗?看看我对下面的故障排除的看法。

现在!假设你有1个文件夹PHP1和一个子文件夹PHP2:

  • C:\我的文档\的 PHP1 \ PHP2

你只需要参考/代码

<?php include('/PHP2/found.php') ?>

因为PHP2作为子目录存在,在PHP1目录下面或内部。

如果上述方法不起作用,则可能与访问/ htaccess或目录权限或拼写错误有关。为了增强这一点...陷入困境...如果“found.php”文件中有错误/错字,它会在错误渲染时崩溃,这可能是你需要的原因(require / require_once)体验到它没有改变目录或访问文件的错觉。 最后想到这个问题,你可能需要实例化你的函数或引用,以便通过创建一个新的变量或对象来使用included / require“whatever”,例如

$newObject = new nameobject("origianlThingy");

请记住,仅仅因为你包含/要求某些内容,有时仅仅意味着,它包含/需要运行,但可能需要重新创建它以使其处于活动状态或访问它。 肯定会重新创建一个“如果它是可读的”实例,并在保留原始文档的同时使其在当前文档中可用。但是,您应该在所有实例中引用新创建的变量 $ newObject ....如果是全局的。

从一些网络主机帐户的角度来看这个;网络主机是一些超过大小的硬盘驱动器(就像在你的PC上),你的域只不过是他们分配给你的文件夹。您的文件夹名为root。在该文件夹中,您可以执行任何您可以执行的操作。 您在目录/文件夹之间移动的“多种方式之一”是使用../多次来退出当前的参考到文件夹位置你想找到。

  

在我醉酒的状态下,我意识到我知道太多了,不能理智   足以疯了!“

答案 5 :(得分:2)

任何以斜杠开头的路径都是绝对路径。从服务器的根文件夹而不是文档根目录的根文件夹。您可以使用../进入父目录。

答案 6 :(得分:1)

我从弗兰克那里获得了灵感,我在我的&#34; settings.php&#34;中添加了类似的东西。当有链接时,该文件将包含在所有页面中:

&#34;的settings.php&#34;

    $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。&#39; index.php&#39; ....

似乎它在本地和托管环境中都有效....

(注意:我是绝对的初学者)

答案 7 :(得分:0)

根目录(在PHP中)是被ping的文件的目录。例如,我转到http://localhost/directory/to/file/index.php,根目录将是“/ dictory / to / file”,因为它是您发出Web请求的目录。

答案 8 :(得分:0)

早先有同样的问题解决过这样的问题:

  

包括( '/../包括/ config.php中'); // note'/'出现在'../ includes / config.php'

之前

答案 9 :(得分:0)

您可能会对使用php的内置函数realpath()感兴趣。 并传递恒定的 DIR

例如: $ TargetDirectory = realpath(__ DIR __。“ /../ ..”); // //会将您带回2个文件夹

String realpath()::返回规范化的绝对​​路径名..

答案 10 :(得分:0)

我不敢相信所有答案都指向函数dirname()(自PHP 4起可用)。

基本上,它返回所引用对象的完整路径。如果您使用文件作为参考,该函数将返回文件的完整路径。如果引用的对象是文件夹,则函数将返回该文件夹的父文件夹。

https://www.php.net/manual/en/function.dirname.php

对于当前文件的当前文件夹,请使用$current = dirname(__FILE__);

对于当前文件夹的父文件夹,只需使用$parent = dirname(__DIR__);