【问题标题】:PHP XML Parsing FailsPHP XML 解析失败
【发布时间】:2012-12-17 22:19:32
【问题描述】:

我有一个读取 RSS 提要并在页面上显示项目的 php 脚本:

 <?php
    function getFeed($feed_url) {

         $content = file_get_contents($feed_url);
         $x = new SimpleXmlElement($content);
         $j=0;

         foreach($x->channel->item as $entry) {
              if ($i <5){
                   echo "<li>
                   <a href='$entry->link' title='$entry->title'>" .
                   $entry->title . "</a><br/>
                   <span style='color: 444444;'>".$entry->description."
                   </span>..<a href='$entry->link' title='$entry->title'>
                   <b>more</b></a>
                   </li>";      
              }$i +=1;
         }
    }
    getFeed("http://example.org/feed/");    

    ?>

它运行良好并显示带有链接的 RSS 项目。问题是当 rss 提要关闭或变成 0byte 大小的文件并且它不显示任何内容时。有没有办法在服务器超时之前检查文件是否存在且不为空并让这个脚本优雅地失败?

【问题讨论】:

    标签: php html xml rss


    【解决方案1】:

    使用curl函数:

    function getFeed($feed_url) {
    
        // GET request
        $handle = curl_init($feed_url);
        curl_setopt($handle,  CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($handle);
        $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
    
        if($httpCode != 200 || empty($response)) {
            echo "feed url not found or missed";
            exit;
        }
        curl_close($handle);
    
        // also catch error in xml
        try {
            $x = new SimpleXmlElement($response);
        catch (Exception $e){ 
             echo 'XML not valid'; 
             exit; 
        } 
        // rest of function
     }
    

    【讨论】:

      【解决方案2】:

      如果失败file_get_contents返回false,你可以检查是否发生错误并退出。

      $content = file_get_contents($feed_url);
      if (content === false) return;
      $x = new SimpleXmlElement($content);
      

      【讨论】:

        【解决方案3】:

        你可以检查你在 $content 中得到了什么。就像它是空的或者不是以 xml 标头开头的,你就停下来。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-28
          • 1970-01-01
          • 2019-08-17
          • 2011-03-19
          • 2014-12-30
          • 1970-01-01
          • 2018-09-24
          相关资源
          最近更新 更多