2

我在 php 中调试它时遇到了一些问题。当我包括这一行时:

require_once("http://" . $_SERVER["HTTP_HOST"] . "/dompdf/dompdf_config.inc.php");

我得到的只是一个空白页面,我没有得到任何 html 代码作为响应。也许错误消息被隐藏了?

4

5 回答 5

8

很多时候,当你得到一个 WSOD (死机白屏)时,这是因为有一个致命错误,它没有显示在标准输出上——即生成的页面上。


要显示它,您需要:

一种简单的方法是在 PHP 脚本的顶部执行此操作,其中的一部分代码如下所示:

error_reporting(E_ALL);
ini_set('display_errors', 'On');


在您的特定情况下,您正在尝试通过 HTTP 包含/要求某些内容;这通常是禁用的。

allow_url_include指令,关于那个。

一种可能性是在您的 PHP 配置中启用该配置...但通常不认为这是一个好主意:出于安全原因,它已被禁用。
并且发送包含文件的 HTTP 请求很慢——这意味着如果远程服务器没有响应,您的应用程序将不再工作!


此外,在这里,您正在尝试包含来自远程服务器的文件$_SERVER["HTTP_HOST"]...

...所以,您正在尝试包含来自远程服务器的文件,实际上,您自己的服务器?即不是远程的?

如果是这样,您不应该尝试通过 HTTP 包含;相反,您应该使用本地文件;这样(需要一些调整)

require_once dirname(__FILE__) . "/dompdf/dompdf_config.inc.php";

这边走 :

  • 没有网络不需要的请求(您只需从本地磁盘读取) => 更快更安全
  • 并且无需启用allow_url_include


我还应该补充:

  • 包含本地 .php 文件时,该 .php 文件的内容将包含在您的页面中;就像复制粘贴一样
  • 通过 HTTP 包含 .php 文件时,远程服务器很可能会解释 PHP 代码,并且只会将输出发回给您
    • 这意味着您的脚本不会包含 PHP 代码
    • 但只有你通过执行那个 PHP 代码得到的输出!
于 2010-07-14T15:38:20.660 回答
6

您不应要求/包含这样的远程文件。而是提供本地绝对或相对路径。

虽然不安全且不推荐,但如果设置了某些配置选项,从技术上讲是可行的。(allow_url_include)

请参阅下面有关 display_errors 的其他答案,以了解未来的调试问题。我经常使用 PHP 命令行解释器来获取真正的错误,而不允许将错误详细信息呈现给 Web 访问者。

于 2010-07-14T15:37:16.700 回答
1

这是包含文件的一种非常不寻常且不安全的方式,但是如果您仍想使用它,请确保您包含的文件没有在远程服务器上执行,因为您可能将 php 源代码定位在 require_once这里不是它的最终输出。

于 2010-07-14T15:43:50.787 回答
0

尝试将此添加为脚本的第一行(显然在 <?php 之后):

error_reporting(E_ALL);
于 2010-07-14T15:37:40.427 回答
0

语句的参数require_once应该是文件路径,而不是 URL。

您是在告诉 Web 服务器从文件系统导入文件,而不是告诉客户端从 Web 导入文件。

它记录在包含语句页面上。

于 2010-07-14T15:38:31.767 回答