HTTPS PHP大型XML负载无法通过echo到达客户端

HTTPS PHP大型XML负载无法通过echo到达客户端,php,ios,xml,ssl,https,Php,Ios,Xml,Ssl,Https,我们的web服务在某些客户端遇到了一个大问题。web服务是SSL下的PHP脚本,它使用GET参数在MySQL数据库上配置多个繁重的查询,并返回XML负载。有效负载只有1MB,但处理非常复杂,大约需要5-6分钟才能完成。客户端正在运行特定的应用程序。有时,在某些网络上,客户端不接收有效负载并一直等待,直到超时。我们开始在服务器上记录所有内容。正常响应报告大约290秒来服务有效负载,但当问题发生时,我们可以看到相同有效负载的900秒。但是,即使在900秒之后,客户端也不会收到有效负载 在PHP脚本中

我们的web服务在某些客户端遇到了一个大问题。web服务是SSL下的PHP脚本,它使用GET参数在MySQL数据库上配置多个繁重的查询,并返回XML负载。有效负载只有1MB,但处理非常复杂,大约需要5-6分钟才能完成。客户端正在运行特定的应用程序。有时,在某些网络上,客户端不接收有效负载并一直等待,直到超时。我们开始在服务器上记录所有内容。正常响应报告大约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崩溃,通常会出现一条错误消息,该消息最常被记录,因为您启用了错误记录功能。例外情况是分段错误,或者如果操作系统在没有通知的情况下终止进程,例如某些硬限制

尽管我不能确切地告诉你哪里出了问题,但如果确实存在一些硬限制,您可以腾出一些资源来提供帮助。通过将XML文档直接保存为标准输出,可以节省资源。这样,您就不用将XML存储到变量中,以后只需回显:

[perform long-time operation]
[create XML dom]
LOG: "Start print XML"
$dom->save('php://output');
LOG: "End print XML"
这只是利用DOMDocument::save保存到一个文件中,该文件实际上是一个标准输出的PHP流,与echo使用的目标相同,即php://output.


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

$xmlPayload=$dom->saveXML;-我猜您想要$xmlPayload=$dom->saveXML;。请注意结尾处添加的内容。@N.B.很抱歉,这是一个键入错误。编辑。