문제
내가 오래된 사이트를 생성하는 그것의 자신의 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 을 생산합니다.