PHP:XML 文件到字符串,使用 asXML() 的 file_get_contents 或 simplexml_load_file 更快

发布于 2024-09-18 12:16:43 字数 427 浏览 4 评论 0原文

我正在编写一个代理服务来缓存我的移动应用程序对网络服务进行的查询。 (就像中间的一个人)

我构建的代理站点的任务是将其从应用程序获取的查询传递到第三方 Web 服务,并将来自第三方 Web 服务的响应保存为 XML 文件,并供所有后续调用使用查询从 XML 文件读取并提供响应(基本上是使用 Php、curl 和 simplexml_load_file 缓存响应)。

现在我的问题是 - 读取 xml 文件并返回字符串的推荐方法是什么。

选项 1: $contents = file_get_contents($filename); 回显$内容;

选项 2: $xml=simplexml_load_file($文件名) echo $xml->asXML();

I am writing a proxy service for caching the queries that my mobile app makes to webservice. (like a man in the middle)

The task of proxy site I have built is pass the query it gets from the app onto third party webservice and save the response from the third party webservice as an XML file and for all subsequent calls for the same query read from the XML file and provide the response (basically caching the response -using Php, curl and simplexml_load_file).

Now my question is - What is the recommended way to read an xml file and return the string.

option 1:
$contents = file_get_contents($filename);
echo $contents;

option 2:
$xml=simplexml_load_file($filename)
echo $xml->asXML();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

树深时见影 2024-09-25 12:16:43
readfile($filename);

file_get_contents/echo 首先将整个内容读取到 php 进程的内存中,然后将其发送到输出流。如果您只想转发它,则无需将整个内容存储在内存中。
simplexml_load_file() 不仅将整个内容读取到内存中,而且还解析文档,这需要额外的时间。如果您不想从文档中获取特定数据或测试/修改它,则同样没有必要。

readfile() 将内容直接发送到输出流,并且可以“以任何合适的方式”执行此操作。即,如果支持可以使用内存映射文件,如果不支持,它至少可以读取较小块的内容。

readfile($filename);

file_get_contents/echo first reads the entire contents into the php process' memory and then sends it to the output stream. It's not necessary to have the entire content in memory if all you want to do id to forward it.
simplexml_load_file() not only reads the entire content into memory, it also parses the document which takes additional time. Again unnecessary if you don't want to get specific data from the document or test/modify it.

readfile() sends the content directly to the output stream and can do so "any way it see's fit". I.e. if supported in can use memory mapped files, if not it can at least read the contents in smaller chunks.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文