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 –