※ 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が返ってきます。
PHPでsimplexml_load_fileの引数に長いURLを指定
PHPでsimplexml_load_fileの引数に長いURLを指定すると結果が返りません。
file_get_contents でも同様です。
PHP初心者です。
ある程度の長さまで(バイト数不明)までは大丈夫です。
今日一日検索と実験をかなり行いましたが、解決できず困り果てています。
どなたかヒントやアドバイスをいただけると大変助かります。
サーバー Windows 2008 Server + IIS
PHP Ver 5.3.2
【概要】
Yahooの形態素解析APIを使用するため奮闘しています。
http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html
取得したサンプルに倣いエンコードしたテキストをURLに加え送信するのですが
A) 短いテキストだとうまくいきますが(UTF8の日本語で900文字ぐらいか)B) 長いテキストたとえばどこかのWebページのテキストすべてなどでは PHP Warningがログに残り失敗ます。
最終的には以下のようなクエリーストリングを生成し(simplexml_load_fileの引数として)送信しようとしています。が送信できていません。
http://jlp.yahooapis.jp/MAService/V1/parse?appid=<yahoo app id>&results=ma&sentence=+%5BPR%5D+2010%E5%B9%B49%E6%9C%8816%E6%97%A5%28%E6%9C%A8%29+%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3+%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%
<長いので途中省略>
AA%E5%B7%A5%E4%BC%9A+10%E2%80%9012%E6%9C%88%E6%9C%9F%E3%81%AF%E8%B8%8A%E3%82%8A%E5%A0%B4%E5%85%A5%E3%82%8A%E3%81%AE%E5%85%AC%E7%AE%97%E3%81%8B+%E9%81%8A%E5%9C%92%E5%9C%B0%E3%81%AE%E3%83%87%E3%83%BC%E3%83%88%E3%80%81%E3%83%88%E3%83%83%E3%83%97%E3%81%AF%E8%A6%B3%E8%A6%A7%
【試したこと・わかったこと】
長いURLを送信しようとするとphpのログには2種類のエラーが記録される
(ア)PHP Warning: simplexml_load_file(http://jlp.yahooapis.jp <以下上記サンプルのURL続く>
(イ)PHP Warning: simplexml_load_file(): I/O warning : failed to load external entity "http://jlp.yahooapis.jp/MAService/V1/parse?<以下上記サンプルのURL続く>
テキストを短くすると送信でき期待通りxmlが返ってくる。
上記の元URLをIEのアドレスバーに入力すると xml が正常に返ってくる
file_get_contents で同じことを行う場合も同様にエラー(上記エラー(ア)となり値が返らない
http://developer.yahoo.co.jp/sample/jlp/sample2.html で紹介されているデモサイトでも同様の問題が起きている模様。。。
http://cgi.geocities.jp/ydevnet/sample/jlp/sample2/ma_sample.php
【関係ありそうな php.ini の現在の設定】
allow_url_fopen = On
allow_url_include = On
以上 よろしくお願いいたします。
お礼
お返事が遅れてすみません。限度数、調査いただきましてたいへんありがとうございました。 おかげさまでここでの調査時間が短縮できましたこと深く御礼申し上げます。 ご指導いただいた fsockopen で悪戦苦闘しながら解決策を模索しておりましたが、今度は受け側であるYahooから切断されるようになりました。一歩進みましたがまた後退ということで、ほかの解決策を模索してみます。 PHP Notice: fwrite(): send of 8192 bytes failed with errno=10054 既存の接続はリモート ホストに強制的に切断されました。