将PHP类包含在Ajax

时间:2016-12-10 01:39:33

标签: php ajax class subclass

我的实时设置如下:

  • 我在服务器上对一个PHP文件(“ajax.php”)进行了Ajax调用,并且工作正常。
  • 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");

我得到同样的错误,该文件不存在,无法打开流,等等等等。

我在这里缺少什么?

1 个答案:

答案 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包中引起了子包含问题。