【发布时间】:2016-12-10 01:39:32
【问题描述】:
我的现场设置如下:
- 我在我一直使用的服务器上对 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]/path/to/statement.class.php 中找不到类“TCPD” p>
(第 10 行是我尝试扩展类的位置,这意味着它没有抱怨包含不成功,而是抱怨现在应该包含的类的不成功扩展)
如果我将包含更改为 include('tcpdf_include.php') or die ('dead');,我会收到通过 ajax 返回给我的不同错误消息:
警告:include(1):打开流失败:/home/[userxyz]/public_html/[ajax.php path]/path/to/statement.class.php 中没有这样的文件或目录第 4 行
警告:include(1):打开流失败:/home/[userxyz]/public_html/[ajax.php path]/path/to/statement.class.php 中没有这样的文件或目录第 4 行
警告:include():在 /home/[userxyz]/ 中打开 '1' 以包含 (include_path='.:/usr/lib/php:/usr/local/lib/php') 失败public_html/[ajax.php 路径]/path/to/statement.class.php 在第 4 行
致命错误:在第 10 行的 /home/[userxyz]/public_html/[ajax.php path]/path/to/statement.class.php 中找不到类“TCPD” p>
这现在让我相信相对路径不知何故搞砸了,所以我尝试了:
echo (file_exists($_SERVER['DOCUMENT_ROOT'].'/[ajax.php path]/path/to/tcpdf_include.php')?"true":"false");
就在麻烦的包含上方,它吐出true,即使是通过Ajax。 但即使我将包含更改为:
include_once ($_SERVER['DOCUMENT_ROOT'].'/[ajax.php path]/path/to/tcpdf_include.php') or die ("file doesn't exist");
我得到同样的错误,文件不存在,无法打开流,等等等等。
我在这里错过了什么?
【问题讨论】:
-
这个文件中有什么:tcpdf_include.php?另请注意,您在提供的代码中拼错了文件名:require_once('tcpfd_include.php');
-
感谢您指出这一点。但这个问题不在我的代码中。 TCPDF 类提供了在服务器上创建 PDF 文件的功能(参见“tcpdf.org")
-
[ajax.php path]应该是什么意思?如果那是指你的脚本file,那么它怎么会在文件系统路径的中间呢?您能否显示完整的真实路径,而不替换它的一部分? -
对不起,我试图让它变得不那么复杂,而不是更复杂:public_html/create/tcpdf/examples/tcpdf_include.php 是完整路径 [ajax.php 路径] 只是应该意味着这是我的 ajax.php 文件所在的文件夹。
-
imo,始终使用绝对文件路径。您可以在绝对文件路径中使用相对目录。当您要访问同一目录中的文件时。例如
require_once(__DIR__ .'/path/to/statement.class.php');。要访问一个目录,然后执行:require_once(__DIR__ .'/../path/to/statement.class.php');。等等。这些总是有效的,因为它们不使用“当前工作目录”。使用getcwd();查看 PHP 将在哪里查找相关文件。