关于链接文件,我一定不明白 - 但这是我的问题。
基本上,我有三个文件。
所有三个文件都在不同的目录中。
B依赖A如下:../../../phpfunctions/generalfucntions.php
当我跑B时一切都很好。
但是C依赖于B,如下所示:../wordcount.php
当我运行C时,我收到一条错误消息,指出无法找到链接文件A.
实际错误是:
第11行的/.../public_html/plaoul/text/statistics/wordcount.php中没有此类文件或目录
任何想法我做错了什么?
感谢您的帮助。
答案 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之后)。
编辑:哎呀,我的错误。