3

サードパーティのサーバーからリモートの動的 XML ファイルを GAE-PHP アプリケーションにロードしたいと考えています。

$itemId = 5;
$uri = "http://www.myserver.com/getInfoItem.php?itemId={$itemId}&format=xml";

simplexml_load_file 関数を使用して XML 情報を読み込もうとしました。

if ($xmlItem = simplexml_load_file($uri)) {
  // Code dealing with the XML info
}

しかし、それは常にこのエラーにつながります:

PHP Warning: simplexml_load_file(): I/O warning : failed to load external entity "..."

そこで、コードを変更し、XML を一般的なテキスト ファイルとして読み込もうとしました。このようにして、期待どおりに動作します。

if ($fileContents = file_get_contents($uri)) {
  $xmlItem = simplexml_load_string($fileContents);
  // Code dealing with the XML info
}

2 つの関数が同じhttp wrapperを使用してリモート コンテンツを取得すると考えていましたが、このようには機能しないようです。GAE URL Fetchのドキュメントも参照しました。

私の質問は次のとおりです。最初のアプローチが機能しないのはなぜですか? 何か不足していますか?

4

1 に答える 1

11

外部エンティティの自動読み込みはデフォルトで無効になっています。オプトインする必要があります。

入れてみて

libxml_disable_entity_loader(false);

あなたが呼ばれる前に。これは、無効な機能セクションに記載されています

これには、追加の手順が 1 つあります。まず、次の行を含むphp.iniファイルを作成する必要があります。

google_app_engine.enable_functions = "libxml_disable_entity_loader"
于 2013-09-24T00:35:44.077 に答える