我的一个PHP脚本有问题,它有时会返回截断的消息。
流程:
- 用户调用search.php
-
脚本处理请求:
- a连接到数据库
- b使用SimpleXML类构建XML
- c类型将SimpleXML转换为字符串
- d将该字符串打印到客户端
- 在某些情况下,用户只接收(输出到浏览器)消息的一部分
在研究了这个问题之后,我发现了以下事实:
- 最大长度为19109个字符->超过这个长度,它就会被截断
- 我记录了2.c typeCast XML字符串,发现该日志包含完整的XML(未截断!)
- 其他返回较短/较长响应的脚本运行良好
-
这个问题在某种程度上与数据库连接有关:
-
为了检查问题是否与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