• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPでsimplexml_load_fileの引数に長いURLを指定)

PHPでsimplexml_load_fileの引数に長いURLを指定すると結果が返りません。

このQ&Aのポイント
  • PHPでsimplexml_load_fileの引数に長いURLを指定すると結果が返りません。file_get_contents でも同様です。
  • Yahooの形態素解析APIを使用するため奮闘しています。取得したサンプルに倣いエンコードしたテキストをURLに加え送信するのですが、短いテキストだとうまくいきますが、長いテキストではPHP Warningがログに残り失敗します。
  • 長いURLを送信しようとするとphpのログにエラーが記録され、xmlが返ってきません。テキストを短くすると送信でき期待通りxmlが返ってきます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

興味があったので、file_get_contentsに何文字までなら入力可能なのか調べてみました。 結果、「8193」バイトの文字列以上入力するとこけるようです。 ※XAMPPのPHP5.2.3にて計測 8192は2/8/16進数的にきりのいい数値ですので、何か意味があるのでしょうかね・・・ とりあえず、しようがないので、 fsockopen関数で代替してはどうでしょう。 http://php.net/manual/ja/function.fsockopen.php ホスト名でソケットをあけて、HTTPヘッダを送信してやるという感じです。 マニュアルのサンプルを参考にして作成してみてはいかがでしょう。 または、Zend Frameworkの「Zend_Client」や、PEARの「HTTP_Request2」などはこれをラップしたライブラリなので、もっと簡単に出来ます。

hiragai
質問者

お礼

お返事が遅れてすみません。限度数、調査いただきましてたいへんありがとうございました。 おかげさまでここでの調査時間が短縮できましたこと深く御礼申し上げます。 ご指導いただいた fsockopen で悪戦苦闘しながら解決策を模索しておりましたが、今度は受け側であるYahooから切断されるようになりました。一歩進みましたがまた後退ということで、ほかの解決策を模索してみます。 PHP Notice: fwrite(): send of 8192 bytes failed with errno=10054 既存の接続はリモート ホストに強制的に切断されました。

その他の回答 (1)

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.2

(ア)Warning かどうかじゃなく、エラーメッセージに注目しようとは思わなかったんですか? (イ)failed to load external entity. 外部実体の読み込みに失敗しました。 要するに、送ったけど、返事が返ってこなかったぜ、と言っている。 マニュアルはちゃんと読んだんですか?PHP は元より、Yahoo のほうも。