当调用mysqli_real_connect时,用户从PHP脚本接收到一条截断的消息(最多19109个字符)


The user receives a truncated message (max 19109 chars) from a PHP script when calling to mysqli_real_connect

我的一个PHP脚本有问题,它有时会返回截断的消息。

流程:

  1. 用户调用search.php
  2. 脚本处理请求:

    • a连接到数据库
    • b使用SimpleXML类构建XML
    • c类型将SimpleXML转换为字符串
    • d将该字符串打印到客户端
  3. 在某些情况下,用户只接收(输出到浏览器)消息的一部分

在研究了这个问题之后,我发现了以下事实:

  1. 最大长度为19109个字符->超过这个长度,它就会被截断
  2. 我记录了2.c typeCast XML字符串,发现该日志包含完整的XML(未截断!)
  3. 其他返回较短/较长响应的脚本运行良好
  4. 这个问题在某种程度上与数据库连接有关:

    • 为了检查问题是否与SimpleXML或XML字符串有关,我在#2.d->上打印了一个不同的硬编码XML,它也被截断了。

    • 然后,我试图找到导致它的原因(而不同的硬编码XML仍然存在),所以我使用"die;"调试了脚本。然后Iv'e发现,只有当调用mysqli_real_connect或mysql_real_connect时,返回值才会被截断。

你知道如何解决/调试这个问题吗?

也许消息#2会给您一个答案?简而言之,PHP手册拒绝在PHP中几乎不存在这样的函数。

如果是这种情况,您可能会看到截断的输出,因为您启用了隐式刷新,因此在脚本执行期间会立即将响应刷新到浏览器。然后,在某个时刻脚本调用了不存在的mysql_real_connect。这会导致脚本停止执行,所以您可以看到部分格式的输出。如果已禁用display_errors,则不会看到错误消息。

因此,请尝试在PHP安装中启用错误输出(diplay_errors config指令)。解决此问题的另一个好方法是检查mysql_real_connect是否真的存在于function_exists