simplexml_load_string 不适用于 .csp 文件中的 RSS (PHP 5.2)
simplexml_load_string not working for RSS from .csp file (PHP 5.2)
我有一个脚本,当从 RSS 提要中提供 URL 时,它会 returns 一个链表。它在服务器 运行 PHP 5.2 上。该脚本适用于我提供的其他 RSS 提要,但不适用于以下 URL。
URL: https://www.nwp.org/rss.csp
<?php
//SETUP THE VARIABLES
if(!strlen($RSSFEED_URL)) { $RSSFEED_URL = $_GET['url']; }
if(!strlen($RSSFEED_LIMIT)) { $RSSFEED_LIMIT = abs($_GET['limit']); }
if(!strlen($RSSFEED_EXCERPT)) { $RSSFEED_EXCERPT = abs($_GET['excerpt']); }
if(!strlen($RSSFEED_DATE)) { $RSSFEED_DATE = abs($_GET['date']); }
if(!strlen($RSSFEED_LINK)) { $RSSFEED_LINK = $_GET['link']; }
//SET DEFAULTS
if($RSSFEED_LIMIT > 15 || !strlen($_GET['limit'])) { $RSSFEED_LIMIT = 5; }
if($RSSFEED_EXCERPT !== 0) { $RSSFEED_EXCERPT = 1; }
if($RSSFEED_DATE !== 0) { $RSSFEED_DATE = 1; }
//CONNECT THE FEED
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, .6);
curl_setopt($ch, CURLOPT_URL, $RSSFEED_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_HEADER, false);
$RSSFEED_CONTENTS = curl_exec($ch);
$RSSFEED_CONTENTS = preg_replace('/&(?![A-Za-z0-9#]{1,7};)/','&',$RSSFEED_CONTENTS);
curl_close($ch);
if($RSSFEED_CONTENTS){
$RSSFEED = simplexml_load_string($RSSFEED_CONTENTS);
if(!strlen($RSSFEED_LINK)) { $RSSFEED_LINK = $RSSFEED->channel->link; }
if(sizeof($RSSFEED->channel->item) < $RSSFEED_LIMIT){ $RSSFEED_LIMIT = sizeof($RSSFEED->channel->item); }
for($i = 0; $i < $RSSFEED_LIMIT; $i++){
echo '
<p>
<a href="'. $RSSFEED->channel->item[$i]->link .'">'. $RSSFEED->channel->item[$i]->title .'</a>';
if($RSSFEED_EXCERPT){
echo '
<br />' . $RSSFEED->channel->item[$i]->description;
}
if($RSSFEED_DATE){
echo '
<br />' . date("F j h:ia", strtotime($RSSFEED->channel->item[$i]->pubDate));
}
echo '
</p>';
}
echo '
<p class="last" align=right>
<span class="more">
<a href="'. $RSSFEED_LINK .'">Read More ›</a>
</p>';
}
else{
echo '
<p>RSS Feed Unavailable.</p>';
}
?>
好的,感谢 curl_error(),我弄明白了。看起来 https 是导致问题的原因。所以我在传输设置中添加了以下内容:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
这告诉 curl 命令不验证对等方的证书。
我有一个脚本,当从 RSS 提要中提供 URL 时,它会 returns 一个链表。它在服务器 运行 PHP 5.2 上。该脚本适用于我提供的其他 RSS 提要,但不适用于以下 URL。
URL: https://www.nwp.org/rss.csp
<?php
//SETUP THE VARIABLES
if(!strlen($RSSFEED_URL)) { $RSSFEED_URL = $_GET['url']; }
if(!strlen($RSSFEED_LIMIT)) { $RSSFEED_LIMIT = abs($_GET['limit']); }
if(!strlen($RSSFEED_EXCERPT)) { $RSSFEED_EXCERPT = abs($_GET['excerpt']); }
if(!strlen($RSSFEED_DATE)) { $RSSFEED_DATE = abs($_GET['date']); }
if(!strlen($RSSFEED_LINK)) { $RSSFEED_LINK = $_GET['link']; }
//SET DEFAULTS
if($RSSFEED_LIMIT > 15 || !strlen($_GET['limit'])) { $RSSFEED_LIMIT = 5; }
if($RSSFEED_EXCERPT !== 0) { $RSSFEED_EXCERPT = 1; }
if($RSSFEED_DATE !== 0) { $RSSFEED_DATE = 1; }
//CONNECT THE FEED
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, .6);
curl_setopt($ch, CURLOPT_URL, $RSSFEED_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_HEADER, false);
$RSSFEED_CONTENTS = curl_exec($ch);
$RSSFEED_CONTENTS = preg_replace('/&(?![A-Za-z0-9#]{1,7};)/','&',$RSSFEED_CONTENTS);
curl_close($ch);
if($RSSFEED_CONTENTS){
$RSSFEED = simplexml_load_string($RSSFEED_CONTENTS);
if(!strlen($RSSFEED_LINK)) { $RSSFEED_LINK = $RSSFEED->channel->link; }
if(sizeof($RSSFEED->channel->item) < $RSSFEED_LIMIT){ $RSSFEED_LIMIT = sizeof($RSSFEED->channel->item); }
for($i = 0; $i < $RSSFEED_LIMIT; $i++){
echo '
<p>
<a href="'. $RSSFEED->channel->item[$i]->link .'">'. $RSSFEED->channel->item[$i]->title .'</a>';
if($RSSFEED_EXCERPT){
echo '
<br />' . $RSSFEED->channel->item[$i]->description;
}
if($RSSFEED_DATE){
echo '
<br />' . date("F j h:ia", strtotime($RSSFEED->channel->item[$i]->pubDate));
}
echo '
</p>';
}
echo '
<p class="last" align=right>
<span class="more">
<a href="'. $RSSFEED_LINK .'">Read More ›</a>
</p>';
}
else{
echo '
<p>RSS Feed Unavailable.</p>';
}
?>
好的,感谢 curl_error(),我弄明白了。看起来 https 是导致问题的原因。所以我在传输设置中添加了以下内容:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
这告诉 curl 命令不验证对等方的证书。