2

次のコードを使用してRSSフィードを読み取り、結果を出力しています。

function home_page_parser($feedURL) {
    $rss = simplexml_load_file($feedURL);
    $i = 0;
    
    echo  "<ul>";
    
    foreach ($rss->channel->item as $feedItem) {
        $i++;
        $myDate = ($feedItem->pubDate);
        $dateForm = explode(" ", $myDate);
        echo "<li class=\"rss-feed\"><a href=\"$feedItem->link\" title=\"$feedItem->title\" target=\"_blank\">".$feedItem->title."</a><br />" .$feedItem->pubDate. "</li>";
                
    if($i >= 3) break;
        
    echo "</ul>";
    }
}

PHP5.2を実行しているRackspaceCloudのテストサイトで正常に動作しています

PHP5.3を実行しているMediaTempleのライブサイトで、次のエラーが発生します。


警告:simplexml_load_file()[function.simplexml-load-file]:http://ラッパーは、39行目の/.../html/includes/functions.phpのallow_url_fopen=0によってサーバー構成で無効になっています

警告:simplexml_load_file(http://www.chinaknowledge.com/Newswires/RSS_News/RSS_News.xml)[function.simplexml-load-file]:ストリームを開くことができませんでした:39行目の/.../html/includes/functions.phpに適切なラッパーが見つかりませんでした

警告:simplexml_load_file()[function.simplexml-load-file]:I / O警告:"http://www.chinaknowledge.com/Newswires/RSS_News/RSS_News.xml"39行目の/.../html/includes/functions.phpに外部エンティティを読み込めませんでした

警告:44行目の/.../html/includes/functions.phpのforeach()に無効な引数が指定されています


39行目は次のとおりです。

$rss = simplexml_load_file($feedURL);

何が間違っているのですか、または5.3で動作するように変更する必要がありますか?

4

4 に答える 4

5

エラーはかなり説明的だと思いませんか?

http://ラッパーは、allow_url_fopen=0によってサーバー構成で無効にされます

PHP構成ファイルを編集し、構成を変更する必要がありますallow_url_fopenこれを直接行うことができない場合は、ini_set()を試してください

編集: @evanmcdがコメントで指摘しているように、この構成はphp.iniでのみ設定できます。PHPドキュメントリファレンス。

于 2012-07-04T20:41:46.430 に答える
2

このエラーは、「http://ラッパーがallow_url_fopen = 0によってサーバー構成で無効になっている」ために発生します。この問題を回避するには、この設定をオフではなくオンにオーバーライドする必要があります。私の見解では、ほとんどの共有ホスティングサーバーでは許可されていません。これらの設定は、ini_set('allow_url_fopen'、'on');のいずれかを介して行います。またはhtaccessオーバーライド。したがって、これらのメソッドを試す代わりに、そのフィードをフェッチする方法を提案します。CURLを使用して、フィードxmlのコンテンツを変数にフェッチする必要があります。次に、simplexmlファイル操作を処理します。

$feed ='http://api.twitter.com/1/statuses/user_timeline.rss?screen_name=mytwittername';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $feed);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// get the result of http query
$output = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_file($output);
于 2012-11-20T05:45:45.393 に答える
1

サーバーでphp.iniを編集することが許可されていない場合は、curlを使用してxmlを取得し、以下のようにxmlstirngを読み取ることができます。

function home_page_parser($feedURL) {
    $rss = simplexml_load_file(curlXML($feedURL);
    $i = 0;

    echo  "<ul>";

    foreach ($rss->channel->item as $feedItem) {
        $i++;
        $myDate = ($feedItem->pubDate);
        $dateForm = explode(" ", $myDate);
        echo "<li class=\"rss-feed\"><a href=\"$feedItem->link\" title=\"$feedItem->title\" target=\"_blank\">".$feedItem->title."</a><br />" .$feedItem->pubDate. "</li>";

    if($i >= 3) break;

    echo "</ul>";
    }
}

function curlXML($url){
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   // get the result of http query
   $output = curl_exec($ch);
   curl_close($ch);

   return $output;
}
于 2016-11-21T07:24:18.150 に答える
0
ini_set("allow_url_fopen", 1);

これにより、php.iniファイルでallow url open = Onが設定されますが、easyphp、xamp、wamp、またはホスティングでphpを再起動する必要があります。

于 2016-05-09T14:16:50.123 に答える