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>";
    }
}

它在我运行 PHP 5.2 的 Rackspace Cloud 测试站点上运行良好

在运行 PHP 5.3 的 Media Temple 的实时站点上,我收到以下错误:


警告: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:// wrapper is disabled in the server configuration by allow_url_fopen=0”。为了避免这个问题,我们需要将此设置覆盖为 On 而不是 off。在我看来,大多数共享托管服务器不允许你通过 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 并读取 xml Stirng,如下所示。

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 回答