【问题标题】:How to open a file on a distant server with XML Reader in php?如何在 php 中使用 XML Reader 在远程服务器上打开文件?
【发布时间】:2011-12-28 18:33:05
【问题描述】:

我有一个巨大的 xml 文件(~ 85 Mo),我想用 XML Reader 打开它(然后我的脚本读取选定的行)。我已经在我的电脑上下载了它并且我的脚本可以工作(使用 Wamp)。

现在我想在网上做同样的事情。服务器登录是aaa,密码是bbb(当然是例子)。

我尝试了以下说法:

$xml = new XMLReader();
if ($xml->open('ftp://aaa:bbb@ftp.website.com/myfile.xml')){
    echo 'OK';
}

while($xml->read()){
    // my script here... 
}

似乎我错了,因为我的网络浏览器显示页面太长而无法加载。什么是继续的好方法?还是我错过了什么重要的事情?

【问题讨论】:

  • 如果我理解你所说的正确,你总是会遇到这个问题,因为 XML 阅读器会先将整个 XML 文件下载到 PHP 主机,然后再对它进行任何操作。如果您想以任何其他方式处理此问题,您可能必须为您的目的推出自己的文件包装器和 XML 解析器。

标签: php xml ftp xmlreader


【解决方案1】:

由于有问题的文件是 XML,部分下载它是不明智的,因为它可能会破坏 xml 结构,导致解析器失败。

您可以偶尔使用 cronjob 检索文件,然后从服务器上的本地位置打开它,或者检索一次并在本地缓存它,以便加快后续请求。

【讨论】:

  • 最后,一个明智的建议... +1
  • 是的,你是对的,我的目标是将其设置为每日 cron 作业。但是“本地位置”是什么意思?我使用的是共享网络托管服务。
  • @Dacobah 哦,好吧,我的英语有时会失败 :) 我的意思是,通过 cronjob 下载它后,您将在服务器上本地打开它。顺便说一句,如果它那么大,我也建议不要根据用户请求解析它,也许让 cronjob 在下载时解析它并序列化它或将它保存在数据库中。
  • @mobius 不要让我担心 :) 无论如何,我使用 ftp 函数(如 ftp_get)连接并下载我的服务器上的文件。现在它起作用了!再次感谢它解决了我的问题!
【解决方案2】:

您最好先使用 PHP 的FTP functions 将文件下载到服务器,然后在本地打开文件。我不会依赖在 XML 库中使用 FTP,这样您将获得更大的灵活性。

【讨论】:

  • 问题不是“如何下载文件?”,而是(有效地)“如何避免下载整个文件?”
【解决方案3】:

我会使用 curl 连接到 FTP 服务器并下载文件。

http://php.net/manual/en/book.curl.php

【讨论】:

  • 问题不是“如何下载文件?”,而是(有效地)“如何避免下载整个文件?”
【解决方案4】:

http://davidwalsh.name/increase-php-script-execution-time-limit-ini_set 默认执行时间为 20 秒或 30 秒,将其增加到 1 分钟并重试

【讨论】:

  • 问题不是“如何下载文件?”,而是(有效地)“如何避免下载整个文件?”
  • 他说“我的网络浏览器显示页面太长而无法加载”
  • 确实,那是因为他还声明了I have got a huge xml file (~ 85 Mo) and I would like to open it with XML Reader - 这是导致超时的文件大小。没有人会希望用户在生成页面之前必须等待 85Mb 传输,尤其是当他还声明 then my script read selected lines
  • 也许(可能是)——但这有关系吗?在散列之前下载文件数据仍然需要相同的时间。尽管md5_file() 不会在任何给定时间将整个文件加载到内存中,但这并不意味着它可以在无法访问整个文件数据的情况下运行。
  • @DaveRandom 如果他有一个 SOAP 或 REST api 来获取文件而不是通过 FTP,那不是更好吗?我知道通过 FTP...下载可能很慢...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多