按相对路径包含文件

时间:2011-10-15 21:43:50

标签: php path include

关于链接文件,我一定不明白 - 但这是我的问题。

基本上,我有三个文件。

  1. generalfunctions.php
  2. wordcount.php
  3. 的index.php
  4. 所有三个文件都在不同的目录中。

    B依赖A如下:../../../phpfunctions/generalfucntions.php
    当我跑B时一切都很好。

    但是C依赖于B,如下所示:../wordcount.php

    当我运行C时,我收到一条错误消息,指出无法找到链接文件A.

    实际错误是:

      

    第11行的/.../public_html/plaoul/text/statistics/wordcount.php中没有此类文件或目录

    任何想法我做错了什么?

    感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

当您使用include包含文件,并使用相对路径作为参数时,它将相对于当前工作路径。< / p>

目前的路径是什么?它通常是第一个调用PHP脚本的路径。整个执行开始的脚本。您可以使用函数getcwd获取当前工作目录。例如:<?php echo getcwd(); ?>会显示当前工作路径。您可以使用chdir功能更改当前工作路径。例如:<?php chdir( '/home/myself' ); ?> - 使用此命令您刚刚更改了当前的工作路径!

因此,在 include 中使用相对路径并不总是好事,因为当前路径可能会发生变化。

但是使用__FILE__ 魔术常量,你可以使用一种相对路径作为包含的参数,使其成为相对于include命令的文件。这很好!因为无论当前工作路径是什么,include都将始终相对于包含的文件!

所以...尝试以下方法:

在B中你应该包括A如下:

include( dirname( __FILE__ ) . '/../../../phpfunctions/generalfunctions.php' );

在C中你应该包括B如下:

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

简而言之:使用dirname( __FILE__ ),您可以使用相对于“include”命令所在文件的路径来包含文件。否则,路径将相对于当前工作路径。

答案 1 :(得分:1)

我将采用数学方法。 PHP总是包含当前工作目录中的其他文件,而不是当前包含的文件。

因此,如果我们在文件C(index.php)中,我们处于第4级。文件C包括位于父级目录中的文件B(根据../),它将位于级别3上。

现在文件B 包含在里面文件C (特别强调内部)。我们仍然在4级而不是3级工作。所以当你尝试包含文件A时,我们在技术上将文件A包含在文件C中,而不是文件B中,所以路径只有3个目录而不是4个目录它需要通过的目录。

因此,当我们执行文件B(位于第3级)时,包含文件A将上升三级到级别0,这是查找文件的适当位置。

我建议使用绝对路径来访问所有文件,因为使用相对路径只会导致问题,例如您在此处找到的问题。

我这样做是设置一个'root'变量,可以在我的所有脚本中访问,用于定义绝对路径。我把它放在我的index.php文件中,因为这是唯一运行过的文件。

$ani->i->root = dirname(str_replace("\\", "/",  __FILE__));
// Where my $ani variable is accessible everywhere.

这样,只要我需要包含/需要文件,我就可以像include "{$ani->i->root}/modules/somemodule.php"那样做,而不必担心路径等。

答案 2 :(得分:0)

尝试使用绝对值

include("/public_html/phpfunctions/generalfunctions.php");

答案 3 :(得分:0)

php中include()的作用是在包含文件的文件中替换该函数。您正在使用../wordcount.php说该文件可以在当前工作目录的父目录中找到。如果你得到文件B的路径正确,php将用文件a的内容替换文件b中的函数,然后用文件A替换文件C中的include函数(在include之后)。

编辑:哎呀,我的错误。