【问题标题】:RSS Works fine on my Development Server, not on my Live oneRSS 在我的开发服务器上运行良好,而不是在我的 Live 上
【发布时间】:2009-10-14 18:04:19
【问题描述】:

好的,这是规格:

开发服务器:Windows、WAMP、PHP 5+、Codeigniter

实时服务器:Ubuntu Linux、PHP、CodeIgniter、LAMP

我的 Live Server 在 Firefox 中收到以下错误:

XML 解析错误:文档元素后出现垃圾 地点:http://www.mysite.com/feed/rss2/ 第 2 行,第 1 列:

语法错误,...rss2.php 中出现意外的 T_STRING

但是,在我的开发环境中,一切都像 Windows 中的美女一样运行。

谁能帮帮我?


代码如下:

function rss2() {
    @header("Content-Type: text/xml");
    $settings = $this->db_model->get_db_settings();

    $data['encoding'] = 'utf-8';
    $data["feed_name"] = $settings["sitename"];
    $data["feed_url"] = base_url() . "feed/rss2";
    $data["page_description"] = "RSS Feed for " . $settings["sitename"];
    $data["page_language"] = "en-us";
    $data["creator_email"] = "noreply@noreply.com";

    $data["todays_date"] = date("c");     

    //Array?
    $rssfeed = $this->blog_model->get_blog_posts_by_status("published");

    $i = 0;
    foreach ($rssfeed as $row) {
        //feed the details into the array
        $rss_data[$i]["title"] = $row["title"];
        $rss_data[$i]["permalink"] = base_url() . "content/blog/" . $row["slug"];
        $rss_data[$i]["date"] = $row["date"];
        $rss_data[$i]["description"] = utf8_encode(html_entity_decode($row["content"], ENT_QUOTES));            
        $rss_data[$i]["category"] = "No Category";
        $i=1;
    }

    if ($i == 0) {
        $data["rss_data"] = NULL;
    } else {
        $data["rss_data"] = $rss_data;
    }

    $this->load->view("system/feed/rss2", $data);

}

【问题讨论】:

  • 拥有完整的差异开发和生产服务器不是一件好事。请张贴rss2.php的代码。我们会看看它
  • 检查是否遗漏了任何;在您的代码中。
  • 谢谢。顺便说一句,我用 w3c 验证了 rss 视图文件,它工作正常。我还在努力让另一台简单的计算机一起设置一个 Ubuntu 开发服务器。
  • 我在我的 Windows 7 机器上遇到了同样的错误。检查它
  • 顺便说一句,我在控制器文件的末尾没有“?>”。它曾经给我带来麻烦。要我添加 rss2 视图文件吗?它只是一个经过验证的 RSS 2.0 xml 文件。

标签: windows linux codeigniter rss


【解决方案1】:

听起来 XML 声明开头的 <? 被误识别为 PHP 代码块,然后 PHP 解释器会阻塞。

我似乎记得(尽管这可能是完全错误的)关闭short_open_tags 支持并不能解决这个问题。

解决方法是从 PHP 本身发出声明,如下所示:

<?php echo( '<?xml version="1.0" encoding="UTF-8"?>' ); ?>

【讨论】:

    【解决方案2】:

    好的,如果这一切都错了,请有人帮助我。我在 Live 服务器上解决了这个问题,在开发服务器上仍然可以。我唯一做的就是取出xml文档的第一行:

    <?xml version="1.0" encoding="UTF-8"?>
    

    现在 rss2.php 文件如下所示:

    <rss version="2.0"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
        xmlns:admin="http://webns.net/mvcb/"
        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:content="http://purl.org/rss/1.0/modules/content/"
        xmlns:atom="http://www.w3.org/2005/Atom">
        <channel>
        <atom:link href="<?php echo base_url() . 'feed/rss2/'; ?>" rel="self" type="application/rss+xml" />
        <title><?php echo $feed_name; ?></title>
        <link><?php echo $feed_url; ?></link>
        <description><?php echo $page_description; ?></description>
        <dc:language><?php echo $page_language; ?></dc:language>
        <dc:creator><?php echo $creator_email; ?></dc:creator>
        <dc:rights>Copyright <?php echo gmdate("Y", time()); ?></dc:rights>
        <dc:date><?php echo $todays_date; ?></dc:date>
        <admin:generatorAgent rdf:resource="http://www.codeigniter.com/" />
    
        <?php if ($rss_data == null) { ?>
    
            <item>
              <title>We're Sorry. There is no data to view.</title>
              <link><?php echo base_url(); ?></link>
              <guid><?php echo base_url(); ?>#When:<?php echo $todays_date; ?></guid>
              <description></description>
              <dc:subject></dc:subject>
              <dc:date><?php echo $todays_date; ?></dc:date>
            </item>
    
        <?php } else { ?>
        <?php foreach($rss_data as $row) { ?>
    
            <item>
              <title><?php echo xml_convert($row['title']); ?></title>
              <link><?php echo $row['permalink']; ?></link>
              <guid><?php echo $row['permalink']; ?>#When:<?php echo $row['date']; ?></guid>
              <description><?php echo xml_convert($row['description']); ?></description>
              <dc:subject><?php echo xml_convert($row['category']); ?></dc:subject>
              <dc:date><?php echo $row['date']; ?></dc:date>
            </item>
    
        <?php } } ?>
    
        </channel>
    </rss> 
    

    一切正常,但这是正确的吗?我不应该有那条编码线吗?让我知道。提前致谢。

    【讨论】:

    • 对我来说,这基本上是关闭的。
    • 如果这解决了您的问题,您应该将其标记为答案,而不是重命名问题。
    猜你喜欢
    • 2013-06-08
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    相关资源
    最近更新 更多