我的实时设置如下:
php文件现在第一次被指示在其中一个函数中包含第二个PHP类:
if ($stmnt) {
require_once('path/to/statement.class.php');
$statement = new STATEMENT();
}
第二个类(“statement.class.php”)还包含与第二个类在同一文件夹中的第三个类,并尝试扩展它:
require_once('tcpdf_include.php');
class MYPDF extends TCPDF {...}
class STATEMENT {
public function __construct() {...}
}
我一直在语句类上运行大量测试,当我直接从浏览器调用它时,我没有错误。它正确地包含了tcpfd类并扩展了它,我可以按预期使用它。
然而,当使用上面提到的Ajax调用来指示“ajax.php”作为中间,突然,服务器声称它找不到包含的文件“tcpfd_include.php” “statement.class.php”中的错误,因此无法实例化或扩展其类TCPDF:
在执行简单的require_once('tcpdf_include.php');
:
致命错误:在第10行的/home/[userxyz]/public_html/[ajax.php路径] /path/to/statement.class.php中找不到类'TCPDF'
(第10行是我试图扩展该类的地方,这意味着它没有抱怨不成功的包含,但是关于现在应该包含的类的不成功扩展)
如果我将包含更改为include('tcpdf_include.php') or die ('dead');
,我会通过ajax返回给我一个不同的错误消息:
警告:include(1):无法打开流:/home/[userxyz]/public_html/[ajax.php路径中没有此类文件或目录] /path/to/statement.class.php on第4行
警告:include(1):无法打开流:/home/[userxyz]/public_html/[ajax.php路径中没有此类文件或目录] /path/to/statement.class.php on第4行
警告:include():在/ home / [userxyz] /中打包'1'(include_path ='。:/ usr / lib / php:/ usr / local / lib / php')失败第4行的public_html / [ajax.php路径] /path/to/statement.class.php
致命错误:在第10行的/home/[userxyz]/public_html/[ajax.php路径] /path/to/statement.class.php中找不到类'TCPDF'
现在这让我相信相对路径不知何故搞砸了,所以我试过了:
echo (file_exists($_SERVER['DOCUMENT_ROOT'].'/[ajax.php path]/path/to/tcpdf_include.php')?"true":"false");
正好位于麻烦的包含之外,它甚至通过Ajax吐出 true 。 但即使我将include更改为:
include_once ($_SERVER['DOCUMENT_ROOT'].'/[ajax.php path]/path/to/tcpdf_include.php') or die ("file doesn't exist");
我得到同样的错误,该文件不存在,无法打开流,等等等等。
我在这里缺少什么?
答案 0 :(得分:0)
好的,我在浪费了几个小时之后终于解决了问题: 事实证明,@ Ryan的答案是解决方案的主旨。但是,我在错误的地方寻找问题。
我将B.php包含在A.PHP中,将C.PHP包含在B.PHP中,当它不起作用时,我错误地认为C.PHP未正确包含在B.PHP中。我没有考虑到我试图在B.PHP中扩展的I类实际上并不在C.PHP内部,而是在D.PHP或E.PHP内,因为TCPDF类自己做了包括相对路径。通过尝试从C.PHP所在的文件夹之外的目录中包含整个shebang,我在整个TCPDF包中引起了子包含问题。