【问题标题】:Parsing RSS, maybe php4->php5 issue?解析 RSS,可能是 php4->php5 问题?
【发布时间】:2012-01-13 19:16:30
【问题描述】:

长时间的听众第一次来电...

我有这个功能(我不记得它从哪里来的,对不起,我永远拥有它)

它只是解析一个 XML 提要并创建一个即将到来的演出列表 - 它工作正常,但更改为使用最新 PHP 的新服务器却无法正常工作。

    function parseRSS($url) { 

    $feedeed = implode('', file($url));
    $parser = xml_parser_create();
    xml_parse_into_struct($parser, $feedeed, $valueals, $index);
    xml_parser_free($parser);

    foreach($valueals as $keyey => $valueal){
        if($valueal['type'] != 'cdata') {
            $item[$keyey] = $valueal;
        }
    }
    $i = 0;
    foreach($item as $key => $value){
        if($value['type'] == 'open') {
            $i++;
            $itemame[$i] = $value['tag']; 
        } elseif($value['type'] == 'close') {

            $feed = $values[$i];
            $item = $itemame[$i];
            $i--;

            if(count($values[$i])>1){
                $values[$i][$item][] = $feed;
            } else {
                $values[$i][$item] = $feed;
            }
        } else {
            $values[$i][$value['tag']] = $value['value'];  
        }
    }
    return $values[0];
} 

$xml = parseRSS("http://acousti.co/feeds/artist/AboveThem");

$count = 0;

foreach($xml['RSS']['CHANNEL']['ITEM'] as $item) {
        $pubDate = $item['PUBDATE'];
        $pubDateFormatted = date('D j M Y', strtotime($pubDate));

        echo("<a href=\"{$item['LINK']}\" target=\"_blank\" class=\"indexBoxNews\">{$item['DESCRIPTION']}{$link}</a>
            <p class=\"rss-date\">$pubDateFormatted</p>");

        if (++$count == 5) break;
}

有谁知道为什么它可能会停止工作 - 代码是在 PHP5 之前编写的,可以肯定的是,这可能是兼容性问题?

非常感谢任何帮助:) 抢

【问题讨论】:

  • omg 是否还有提供 php 4 的托管公司?这是一个可怕的发展。
  • 您收到任何警告吗?在脚本顶部启用error_reporting(E_ALL);。和/或在xml_parse_into_struct 示例之后向我们展示print_r($valueals);
  • 谢谢。完全没有错误,并且将 print_r 放入会给出一个空数组。 abovethem.net/test/abovethem_xml.php

标签: php xml rss feed


【解决方案1】:

由于您现在使用的是 PHP 5,您可能只想使用 simplexml 重写代码。 PHP4,没有添加额外的库,没有一个很好的简单方法来处理 XML,但是现在使用 PHP 5,你的代码应该是你用于 PHP 4 的一小部分。

试试这个:

$xml = simplexml_load_file('http://acousti.co/feeds/artist/AboveThem');

foreach ($xml->channel->item as $item)
{
    $pubDateFormatted = date('D j M Y', strtotime((string) $item->pubDate));
    echo '<a href="' . (string) $item->link . '" target="_blank" class="indexBoxNews">' . (string) $item->description . '</a>
            <p class="rss-date">' . $pubDateFormatted . '</p>';
}

【讨论】:

  • 哇,感谢弗朗西斯,该代码在本地运行良好,但仍然无法在现场运行 - 多么奇怪?看起来问题毕竟不是代码(但是我不会回到旧版本:) 我可以做任何测试吗?我已经在 $xml (false) 上尝试了 var_dump,但我仍然坚持在那之后我能做什么。
  • 嗯,检查以确保您使用的 PHP 是用 XML 编译的。如果使用 XML 支持编译,您之前的 XML 应该可以在 PHP 5 上运行。如果您在服务器上创建一个新页面并输入&lt;?php phpinfo();,然后浏览到该页面并搜索 XML - 查看它是否在页面上列出。如果它没有被列出,你可能会想要让你的主机使用 XML 编译 PHP(这是一个非常关键的组件)或更改主机(有点痛苦,但如果主机没有使用 XML 编译 PHP,那将是愚蠢的)。完成查看后,从服务器中删除 phpinfo 页面。
  • 另外,请确保 allow_url_fopen 已打开。在另一个页面中,您可以这样做:echo ini_get('allow_url_fopen'); 如果结果为 false,您可以通过 .htaccess 将其打开,如果没有,请询​​问您的主机。
  • 谢谢弗朗西斯,我已经给服务员发了消息——希望他们能够解决这个问题。谢谢。
【解决方案2】:

确保 PHP 的 "allow_url_fopen" ini 设置在新服务器上设置为 true,否则文件 ($url) 将不起作用

http://gr.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

【讨论】:

  • 太棒了 - 检查了 phpinfo,它已经关闭了。是时候联系支持人员并进行整理了,我希望他们可以整理一下。
  • 再次感谢大家 - 希望这可行,我会在它启动并运行时回来。
猜你喜欢
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
相关资源
最近更新 更多