문제

내가 오래된 사이트를 생성하는 그것의 자신의 RSS 마다 새로운 게시물이 만들어집니다.모든 일이었을 때 서버에서 PHP4 지만 이제는 호스트로 변경하 PHP5,나는 항상 있는"나쁜 형성된 XML".용 xml_parser_create()및 xml_parse(...)및 fwrite(..)하는 모든 것을 저장합니다.

여기에 예를 저장하는 경우(I 읽기 전에 저장하여 추가 old RSS 라인의 코스).

function SaveXml()
{
    if (!is_file($this->getFileName()))
    {
        //Création du fichier
        $file_handler = fopen($this->getFileName(),"w");

        fwrite($file_handler,"");

        fclose($file_handler);
    }//Fin du if

    //Header xml version="1.0" encoding="utf-8"
    $strFileData = '<?xml version="1.0" encoding="iso-8859-1" ?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>'.$this->getProjectName().'</title><link>http://www.mywebsite.com</link><description>My description</description><lastBuildDate>' . date("r"). '</lastBuildDate>';

    //Data
    reset($this->arrData);
    foreach($this->arrData as $i => $value)
    {
        $strFileData .= '<item>';
            $strFileData .= '<title>'. $this->GetNews($i,0) . '</title>';
            $strFileData .= '<pubDate>'. $this->GetNews($i,1) . '</pubDate>';
            $strFileData .= '<dc:creator>'. $this->GetNews($i,2) . '</dc:creator>';
            $strFileData .= '<description><![CDATA['. $this->GetNews($i,3) . ']]> </description>';
            $strFileData .= '<link><![CDATA['. $this->GetNews($i,4) . ']]></link>';
            $strFileData .= '<guid>'. $this->GetNews($i,4) . '</guid>';
            //$strFileData .= '<category>'. $this->GetNews($i,5) . '</category>';
            $strFileData .= '<category>Mycategory</category>';
        $strFileData .= '</item>';

    }//Fin du for i


    $strFileData .= '</channel></rss>';



    if (file_exists($this->getFileName()))//Détruit le fichier
        unlink($this->getFileName());


    $file_handler = fopen($this->getFileName(),"w");



    fwrite($file_handler,$strFileData);

    fclose($file_handler);
}//Fin de SaveXml

나의 질문은:당신은 어떻게 만들과 채우 RSS PHP?

도움이 되었습니까?

해결책

에 swcombine.com 우리가 사용하는 Feedcreator.용하는 것이며 당신의 문제는 사라질 것입니다.:)

여기 PHP 코드를 사용하다면 설치:

function feed_simnews() {
    $objRSS = new UniversalFeedCreator();
    $objRSS->title = 'My News';
    $objRSS->link = 'http://link.to/news.php';
    $objRSS->description = 'daily news from me';
    $objRSS->xsl = 'http://link.to/feeds/feedxsl.xsl';
    $objRSS->language = 'en';
    $objRSS->copyright = 'Copyright: Mine!';
    $objRSS->webmaster = 'webmaster@somewhere.com';
    $objRSS->syndicationURL = 'http://link.to/news/simnews.php';
    $objRSS->ttl = 180;

    $objImage = new FeedImage();
    $objImage->title = 'my logo';
    $objImage->url = 'http://link.to/feeds/logo.jpg';
    $objImage->link = 'http://link.to';
    $objImage->description = 'Feed provided by link.to. Click to visit.';
    $objImage->width = 120;
    $objImage->height = 60;
    $objRSS->image = $objImage;

    //Function retrieving an array of your news from date start to last week
    $colNews = getYourNews(array('start_date' => 'Last week'));

    foreach($colNews as $p) {
        $objItem = new FeedItem();
        $objItem->title = $p->title;
        $objItem->description = $p->body;
        $objItem->link = $p->link;
        $objItem->date = $p->date;
        $objItem->author = $p->author;
        $objItem->guid = $p->guid;

        $objRSS->addItem($objItem);
    }

    $objRSS->saveFeed('RSS2.0', 'http://link.to/feeds/news.xml', false);
};

매우스 키스입니다.:)

다른 팁

내가 사용하는 것 이 라이브러리는 그러한 문제를 을 만들 필요한 구조 및 내보내기 합니다.그때 나는 그것을 캐시 디스크와 file_put_contents().

이 LGPL 라이센스 feedcreator 클래스 과거에 그것에 많은 관심을 갖고에 대한 매우 간단한 사용했습니다.

전체 대답하지만,당신 야 하지 않는 구문 분석 당신의 자신의 XML.그것은 상처는 성능 및 신뢰성을 제공합니다.

하지만 확실히이 있는지 확인 잘 형성.그것이 안 될 매우드를 생성하는 경우에는 그 손으로 사용하거나 다목적 도구입니다.또 어쩌면 당신의 포함되어 있 HTML 유적은?

많은 것들을 만들 수 있는 XML 형식이 잘못되었습니다.그것이 문제가 될 수 있는 캐릭터와 함께 엔(a'<','>',또는'&'데이터 사 XML 태그).실행해도 출력에서 데이터베이스를 통해 htmlentities()연결할 때 이 문자열입니다.당신은 예를 생성된 XML 을 위해 저희에 그래서 우리가 볼 수 있는 문제입니까?

PHP5 지금 함께 제공됩 SimpleXML 확장,그것은 매우 빠른 방법으로 구축하는 유효한 XML 가 더 이상 필요하지 않은 경우 복잡하지 않습니다.

그러나 문제는 당신이 제안하지 않는 것이 문제의 구현상의 문제문입니다.아마도 당신 업데이트와 함께 귀하의 질문 코드를 들어,또는의 사본는 XML 을 생산합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top