Php 包括';不会复发吗?

Php 包括';不会复发吗?,php,server-side-includes,include-path,Php,Server Side Includes,Include Path,我有几个独立的网站,它们位于不同的目录中。对于它们共同拥有的include,我把它放在根目录中,其余的都在根目录中 user@hostname:/var/www$ ls website_1 website_2 website_3 common_files 我想包括一个Zend包,所以我有我的include路径 ini_set("include_path", get_include_path() . ":/var/www/common_files/Zend"); require_once("M

我有几个独立的网站,它们位于不同的目录中。对于它们共同拥有的include,我把它放在根目录中,其余的都在根目录中

user@hostname:/var/www$ ls
website_1 website_2 website_3 common_files 
我想包括一个Zend包,所以我有我的include路径

ini_set("include_path", get_include_path() . ":/var/www/common_files/Zend");
require_once("Mail.php");
Mail.php
加载正常,但在这行的某个地方

require_once 'Zend/Mail/Transport/Abstract.php';
这就产生了这个错误

Warning: require_once(Zend/Mail/Transport/Abstract.php): failed to open stream: No such file or directory in var/www/common_files/Zend/Mail.php on line 26
因此php不会递归地下降到包含路径的目录结构中。我是否必须将Zend移动到每个网站目录中,详细说明每个包含的路径,还是什么


顺便说一句,确实存在以下摘要:

user@host:/var/www/common_files/Zend$ tree -d 
...
`-- Mail/Transport
    |-- Mail/Transport/Abstract.php
    |-- Mail/Transport/Exception.php
    |-- Mail/Transport/Sendmail.php
    `-- Mail/Transport/Smtp.php

9 directories, 32 files

愚蠢的回答:Abstract.php存在吗

require_once 'Mail/Transport/Abstract.php';

试试这个,因为Mail.php iz已经在Zend文件夹中,我想它会查找/Zend/Zend/../Abstract.php

编辑:您想将include\u路径更改为include
/var/www/common\u文件


如果有什么东西在您这样做后仍然损坏?

看起来这里的工作目录是
Zend
,因此您的语句正在查找
/Zend/Zend/Mail/Transport/Abstract.php
。尝试从语句中删除
Zend
,它应该可以正常工作。

您需要将include路径设置为Zend文件夹所在的路径。然后像这样包含文件

require_once 'Zend/Mail.php'

尝试使用常量
PATH\u分隔符
而不是冒号。。。所以
get\u include\u path()。路径分隔符。”/var/www/common_viles/Zend')这已经困扰了我很多次了。包含文件时,它将从包含文件的路径运行。除非它们位于同一文件夹中,否则包含文件中的任何相对路径都将导致错误。有人知道这个问题的解决方法吗?@Adrian,我认为用dirname来表示这个问题是一种常见的做法<代码>需要\u一次目录名(\u文件\u)。'/相对/路径//此处'我猜解决方案是,库文件中不应包含硬编码的include:P@Brandon啊,是的,这会使路径在编译时看起来是绝对的,对吗?谢谢第二次我应该把它放在哪里?您引用的
require\u once
行位于Zend的Mail.php库文件中,而不是我的文件中。如果require_once超出了您的控制范围,那么尝试将ini_路径更改为just
/var/www/common_files
,并将您的
Mail.php
更改为
Zend/Mail.php
。ZF希望顶级Zend/目录位于include_路径中的目录中。OP希望在他的include路径中包含
/var/www/common_文件
。它可以工作,但我不明白。如果包含Debug路径只是<代码> /VAR/WWW/UngyFixs和i>代码>要求一次(“mail .php”)< />代码,它如何知道将<代码> ZTeN/COD>置于中间?
Mail.php
的路径是
/var/www/common_files/Zend/Mail.php
哦,我明白了。它会递归搜索目录!:PIf Mail.php与包含它的php文件存在于同一目录中,并且
位于include\u路径中,那么将在不搜索include\u路径的其余部分的情况下找到它。它不存在于同一目录中。它存在于上面一个目录中,在一个公共目录中,所以我不必在五个不同的项目中冗余地包含它。我会包含它,但还有其他包含,那么有没有办法为每个文件编写一个包含?为什么
不能要求Zend人写进他们文件中的_once