• 締切済み

wordpress上でxmlが読み込めない

<?php $fileName="http://~~~/jouhou.xml"; if(file_exists($fileName)){ $xml=simplexml_load_file($fileName); }else{ echo "失敗しました。"; } ?> 上記の式を、Wordpress内に設置したphp上で実行したのですが、失敗しか表示してくれません。 環境がセーフモードでないことは確認していて、xmlファイル自体もきちんと該当URLに存在を確認できるのに、なぜ読み込めないのでしょうか? PHP Version 5.1.6 WordPress 3.1.1(自分でインストール) 該当環境にはベーシック認証がかかっています。

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • 4017B
  • ベストアンサー率73% (1304/1775)
回答No.1

恐らく $fileName に格納されているファイル名(絶対パス名)が間違っているのが原因かと…。 glob("*.xml"); ~とかを実行してみて「PHP内での正式なファイル名」を調べてみてはどうでしょうか? P.S. 存在が確定しているファイルの確認だけなら、is_file()関数の方が実行速度早いと思います(まあ数百件程度ならあまり差はないと思いますが)。

picicate
質問者

お礼

すいません自己解決しました。 is_fileやfile_existsがWordpress上で通らない問題は残りますが…。 $xml=@simplexml_load_file(WP_CONTENT_URL."/uploads/~~.xml") or die ("document.write('XMLが読み込めません');"); if($xml){ 処理 } }else{ echo "失敗しました"; }

picicate
質問者

補足

言葉が足りなくてすいません。 そのあたりは試した後です。 「PHP内での正式なファイル名」と仰られるパスの記載で間違っている可能性はあると思います。 参照したいフォルダは/wp/wp-content/uploads/で、「/wp/wp-content/uploads/~.xml」や、「http://サーバー名.jp/wp/wp-content/uploads/~.xml」は試しましたがだめでした。

関連するQ&A

  • PHPでXMLファイルを読み込みたい

    PHPを使ってxmlファイルを読み込んで、タグの中のデータなどを読み込んだりしたいです。 ですが、自作のxmlファイルだと simplexml_load_file()で読み込めません。xmlファイルの文字コードを色々と変えて試してみましたが、できませんでした。 ちなみに以下のコードは正常に動きました。Yahoo!のxmlファイルです。 $url = "http://rss.weather.yahoo.co.jp/rss/days/5710.xml"; $rss = simplexml_load_file($url); 出力は「【 25日(金) 嶺北(福井) 】 晴れ - 23℃/8℃ - Yahoo!天気・災害」でした。 何度かやるうちにアルファベットは表示できても日本語が表示できないということもありました。 また、xmlファイルをphpのプログラムに作らせたいです。そのときに、simplexml_load_file()で読み込める日本語も含むxmlファイルをphpで作成するプログラムを教えていただけると嬉しいです。 お願いします。

    • ベストアンサー
    • PHP
  • XMLのロードに失敗する

    PHP5においてsimplexml_load_fileを使って、様々なサイトのRSS(XML)を読み込もうとしています。 一部のサイトに対してFalseが返ってきます。いまいちコンディションが掴みきれておらず うまくいくことうまくいかないことを記述させていただきます。 PHP設置環境の種類 ローカルサイト上のLinux、レンタルサーバA、レンタルサーバB、レンタルサーバC ターゲットRSS NHK http://www3.nhk.or.jp/rss/news/cat0.xml はてな http://feeds.feedburner.com/hatena/b/hotentry 毎日新聞 http://mainichi.jp/rss/etc/flash.rss 問題となるのは毎日新聞です。環境によって読めたり読めなかったりします。 ローカルでの結果 NHK、はてな、毎日新聞 いずれもOK レンタルサーバA 毎日だけNG レンタルサーバB すべてOK レンタルサーバC 毎日だけNG 今回はこのサーバAやCの問題をクリアしたいのですが方法がわかりません。 simplexml_load_fileがNHKやはてなに対して動作するのに毎日に対してのみ動かないという 観点からすると毎日側の仕様の影響かとも思うのですが、 PHPの設置環境によって動作が変わるという観点も加味すると PHPの設置環境の何かに依存し、読み込み対象が絞られる、というようなイメージを持っています。 いずれも無料サーバということもあり、検討ぐらいつけてから管理人に相談させていただくのが 良いかと思いこの場をお借りしております。 なお、レンタルサーバCは.land.toです。 よろしくお願いいたします。 エラー文 $data = simplexml_load_file($rss); if ($data == FALSE){ echo "Failed loading XML<br>\n"; foreach(libxml_get_errors() as $error) {echo "\t", $simplexml_load_fileerror->message;}//Failed loading XML was the returned error } Warning: simplexml_load_file(http://rss.yomiuri.co.jp) [function.simplexml-load-file]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /home/httpd/****/public_html/php/rss.php on line 9 Failed loading XML failed to load external entity "http://rss.yomiuri.co.jp" なお、rss.phpのline 9は $data = simplexml_load_file($rss);です。

    • ベストアンサー
    • PHP
  • RSSのXMLロードで失敗してしまう

    RSSのデータを取得する、という処理を行いたいのですが、 文字コードの件でひっかかってしまっているようで なかなか前に進むことができません。 ************ // RSSの内容を取得する $rss_text = file_get_contents(※RSSのフィードURL); // RSSの文字エンコーディングを変換→再変換 $rss_text = mb_convert_encoding($rss_text, 'SJIS', 'UTF-8'); $rss_text = mb_convert_encoding($rss_text, 'UTF-8', 'SJIS'); $rss_text = preg_replace('/[\x00-\x1f]/', '', $rss_text); // RSSをパースする $rss_xml = new SimpleXMLElement($rss_text); if ($rss_xml) { // XML解析に成功した場合 // SimpleXMLElementオブジェクトからデータを取得 $items = $rss_xml->item; foreach($items as $item) { echo 'ID:'. $item->guid. '<br />'; echo 'リンク:'. $item->link. '<br />'; echo '日付:'. $item->pubDate. '<br />'; echo 'タイトル:'. $item->title. '<br />'; echo '本文:'. $item->description. '<br />'; } } ************ こういったコードを組んでいるのですが、現状では Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : attributes construct error in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Couldn't find end of Start Tag rss line 1 in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Extra content at the end of the document in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... このようなエラーが表示されてしまいます。 自分なりに文字コードを処理しているつもりではあるのですが、 他にも何かしなければならないことがあるのでしょうか? どうぞ知恵を貸していただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • [PHP+XML]PHPで動的に出力するXMLをどのようにして読み込めばいいでしょうか?

    こんにちは、どうしても解決ができなくて困っています。 お助け願います。 DBからデータを取得し成形するなどした結果をXMLで出力できるようにPHPを用意しました。 ブラウザから確認でき、XMLをソース表示しても問題ありません。 次にこれを読み込むPHPを書いています。 simplexml_load_fileなどでXMLファイルを開くことはこれまでにもやっていたので、直接XMLファイル名を記述するところに用意したPHPを指定しました。 結果はエラー。 いろいろ検証した結果、PHPがアクションする前にPHPファイルが開かれてしまっている感じ。 DOMDocumentのload()やloadXML()で読み込む方法もトライしましたが結果は同じ・・・。 根本的に間違ってますか? PHPから吐き出されるXMLを読み込むためにXMLファイルを記述するところにPHPスクリプトを指定すること自体が間違っているようにも思っています。 お手数をお掛けいたしますがお教え願います。

    • ベストアンサー
    • PHP
  • XML関数

    ちょっとした設定ファイルをXMLファイルで持ち、 DBのように扱いたいのです。 DBで言うselectは「simplexml_load_file()」で補うとして、 updateやinsertみたいなXMLファイルの内容を手軽に変更できるような XML関数はありますでしょうか? XML関数興味を持ち始めたばかりで、おかしな質問かもしれませんが ご回答の程、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • SimpleXMLでのWordpress ME2.2.3での動的フィードの読み込み

    現在ブログにWordpress ME2.2.3を使用しており、このブログのフィードを simplexml_load_fileで読み込みたいのですがフィードを動的に生成しているため、 ファイルを開くのに失敗してしまいます。 simplexml_load_fileの引数をhttp://からにしてみたら処理がタイムアウトしてしまいました。 WordpressのRSSを静的に生成する方法、もしくは動的なRSSでもsimplexml_load_fileで 読み込むことが可能な方法をご教授下さい。 また、他にも良い方法がありましたら教えて頂きたく思います。 宜しくお願い致します。

    • 締切済み
    • PHP
  • PHP4でのXMLデータの取り扱い

    Webサービスを利用してXMLデータを取得するスクリプトをPHPで書いています。レンタルサーバの関係でバージョンは4.4.4しか使えません。 XMLを扱う関数というと、PHP5ではsimpleXMLやXMLReaderなどがあるようで、各要素へアクセスするにも $xml=simplexml_load_file('books.xml'); foreach($xml->book as $book){ .... という感じでオブジェクトとしてアクセスできるようですが、こういうのをPHP4で実現する方法はないのでしょうか?例えば入れ子になったデータだと、深い階層にたどりつくために foreach($results as $key => $value){ foreach($value $key2 => $value2){ foreach($value $key3 => $value3){ ... } } } みたいな感じで書いているのですが、まったくスマートではないですし、なにか間違っているような気がします。良い方法があればお教えください。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP5でsimple_xml_load_fileするとエラーになっちゃいます。

    simple_xml_load_fileを使ってXMLを読み込んでいるのですが、読み込みの時点でエラーが出てしまいます。 Warning: simplexml_load_file() [function.simplexml-load-file]: input conversion failed due to input error, bytes 0xAD 0xB5 0x3C 0x2F ↑こんな感じです。 原因を探ったところ、XMLファイルのデータ中にローマ数字(I、II、・・)があるとこのようになることが分かりました。 ちなみにsimplexml_load_stringを使用してもほぼ同様のエラーが発生しました。 ローマ数字入りのXMLファイルを読み込むことはできないのでしょうか?ご存じでしたら知恵を拝借したいのですが・・・。 ※SAX、DOMでも読み込めず(T_T)

    • 締切済み
    • PHP
  • UTF-8のXMLがSJISのPHPで文字化け

    携帯サイト用にShift-JISで書いたPHPページにて、以下のように外部XMLファイル(UTF-8)をロードしていますが文字化けしてしまいます。 <?php $list = simplexml_load_file('test.xml'); echo ($list->data[0]->name); echo ($list->data[0]->tel); echo ($list->data[0]->address); ?> 各ファイルの文字コードはそのままで、文字化けせずにデータを表示することは可能でしょうか?php.iniなどの設定変更をする権限もないので、ソースコードレベルでの解決策を探しています。 勉強不足で恐縮ですが、私はPHPに詳しくないため、なるべく具体的なソースコードをご提示いただいた上で対策をご教授いただけると助かります。 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • CekePHPでfile_exists関数を使う

    CakePHP Ver1.3.6で開発をしています。 アクションの中で、画像の存在判定にfile_exists関数を使ったのですが、 2バイトのファイル名のファイルの場合、存在するファイルがfalseになって しまいます。 対象のファイルが存在するときに、 if (file_exists('img/漢字.jpg')) echo 'あります'; else echo 'ありません'; if (file_exists('img/filename.jpg')) echo 'あります'; else echo 'ありません'; このとき、前者は’ありません’、後者は’あります’と表示されます。 app/webrootフォルダにtest.phpを作り、その中で同じ判定をすると、 両方とも’あります’と表示されます。 なぜアクションの中に記述したときのみ、2バイトファイル名を正しく 判定できないのでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう