gpt4 book ai didi

php - HTTPS PHP 大型 XML 负载无法通过回显到达客户端

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:32 25 4
gpt4 key购买 nike

我们的网络服务在一些客户中遇到了一个大问题。 Web 服务是 SSL 下的 PHP 脚本,它使用 GET 参数在 MySQL 数据库上配置多个繁重的查询并返回 XML 有效负载。有效载荷只有 1 MB,但处理非常复杂,大约需要 5-6 分钟才能完成。客户端是运行特定应用程序的 iPad。有时,在某些网络上,客户端不会收到有效负载并一直等待直到超时。我们开始在我们的服务器上记录所有内容。正常的 response_ssl 报告大约 290 秒来处理负载,但当问题发生时,我们可以看到相同负载的时间为 900 秒。然而,即使在 900 秒后,客户端仍未收到有效负载。

在 PHP 脚本中,我们有一些这样的调试日志记录:

[perform long-time operation]
[create XML dom]
$xmlPayload=$dom->saveXML();
LOG: "Start print XML"
echo $xmlPayload;
LOG: "End print XML"

当问题发生时,我们可以在日志文件中找到“Start print XML”行,但“End print XML”从未被附加。似乎 php 脚本退出或卡住。我们尝试在 PHP 中激活 log_error,但没有记录任何通知、警告或错误!

我们无法访问遇到问题的客户端,并且在我们的客户端上从未发生过(我们在每种情况下都尝试过)。受影响的客户端没有共同模式(不同的网络、不同的 iOS 版本、不同的 iPad 版本等)。我们想知道如何调试这个烦人的问题!关于如何调试“卡住”的 echo 有什么想法吗?谢谢你!

最佳答案

我无法完全回答您的问题,因为从您的错误描述中并不清楚发生了什么。

如果 PHP 崩溃,通常应该有一条错误消息,该消息通常会被记录下来(因为您启用了错误记录)。一个异常(exception)是段错误,或者如果操作系统在没有通知它的情况下终止了进程(例如一些硬限制)。

即使我不能确切地告诉您出了什么问题,您也可以节省一些资源(如果确实存在一些硬性限制,这可能会有所帮助)。您可以通过将 XML 文档直接“保存”到标准输出来节省资源。这使您无需将 XML 存储到一个变量中,只是为了稍后回显它:

[perform long-time operation]
[create XML dom]
LOG: "Start print XML"
$dom->save('php://output');
LOG: "End print XML"

这只是利用 DOMDocument::save 来保存到一个"file",该文件确实是一个标准输出的 PHP 流(与 echo 使用的目标相同),即php://output.

希望这个小改动能让它正常工作,否则所提供的信息或它引入的更改会为您提供更多信息来解决问题。

关于php - HTTPS PHP 大型 XML 负载无法通过回显到达客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29827722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com