0
我有一个30MB的XML文件,我想使用Google App Engine(PHP)进行处理。由于该文件非常大,所以建议的存储空间是Google云端存储,因此我将它放在了那里。由于内存限制,我无法一次解析整个文件,但它包含5000个非常合理的节点,因此我试图使用XML Reader一次拉入一个节点。将XMLReader与Google App Engine云存储结合使用
该流程在本地完美运行,但是我遇到的问题是XMLReader一直无法从我的云存储中读取“无法打开源数据”的消息。
这里是我的代码的例子:“内部”和公众的URL失败,相同的错误
$path = "gs://my_bucket/my_file.xml";
require_once 'google/appengine/api/cloud_storage/CloudStorageTools.php';
use google\appengine\api\cloud_storage\CloudStorageTools;
$public_url = CloudStorageTools::getPublicUrl($path, true);
$reader = new XMLReader;
$reader->open($path); // fails
$reader->open($public_url); // fails
:
XMLReader::open(): Unable to open source data in /[gaepath]/myapp.php on line X
看了周围,大约有权限的建议,但文件不受限制,以下确实工作:
$xml = file_get_contents($path); // $xml contains the file contents as a string
个
两个解决方案将帮助我:
- 有些方法有XMLReader的打开谷歌云存储URL
- 一些方式来传递一个字符串的XMLReader,这似乎并不可能(和写入临时本地文件也似乎被禁止GAE)
是否确定的XMLReader可以从流读取不是本地文件? –
@StuartLangley(不是特别详细)文档建议如此(http://www.php.net/manual/en/xmlreader.open.php),它似乎与本地URL一起工作... – Johno
我看着代码,它似乎表明它只适用于本地文件.... https://github.com/php/php-src/blob/master/ext/xmlreader/php_xmlreader.c#L241 –