PHP:我得到一个完全空白的页面,我不知道如何在PHP中调试它

ane*_*yzm 2 php include fatal-error

我在php中调试这个问题.当我包括这一行时:

require_once("http://" . $_SERVER["HTTP_HOST"] . "/dompdf/dompdf_config.inc.php");
Run Code Online (Sandbox Code Playgroud)

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

Pas*_*TIN 7

很多时候,当你得到一个WSOD (死亡的白色屏幕)时,这是因为存在致命错误,并且它没有显示在标准输出上 - 即生成的页面.


要显示它,您需要:

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

error_reporting(E_ALL);
ini_set('display_errors', 'On');
Run Code Online (Sandbox Code Playgroud)


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

请参阅该allow_url_include指令.

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


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

...那么,您是否尝试从远程服务器中包含一个文件,实际上是您自己的服务器?即不是一个遥远的?

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

require_once dirname(__FILE__) . "/dompdf/dompdf_config.inc.php";
Run Code Online (Sandbox Code Playgroud)

这条路 :

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


我还应该补充:

  • 当包含本地.php文件时,.php文件的内容将包含在您的页面中; 就像是复制粘贴一样
  • 通过HTTP包含.php文件时,远程服务器可能会解释PHP代码,并且只会将输出发回给您
    • 这意味着您的脚本不会包含PHP代码
    • 但只有你通过执行PHP代码得到的输出!


Fos*_*sco 6

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

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

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