我编写了一个类 Link ,它有一个方法 shortTolong() 这应该通过返回“位置”响应头来返回缩短 url 的真实 URL。我测试了它,它工作正常这里是代码
public function shortTolong()
{
$urlMatch = array();
$ch = curl_init();
$options = array
(
CURLOPT_URL=>$this->getUrl(),
CURLOPT_HEADER=>true,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_FOLLOWLOCATION=>false,
CURLOPT_NOBODY=>true);
curl_setopt_array($ch, $options);
$server_output = curl_exec($ch);
preg_match_all(LINK, $server_output,&$urlMatch,PREG_SET_ORDER);
if($urlMatch)
{
foreach($urlMatch as $set)
{
$extracted_url = $set[2].'://'.$set[3];
}
return $extracted_url;
}
else
{
return $this->getUrl();
}
}
当我尝试在其他文件上使用此方法时,问题就开始了,该文件使用 FeedParser 来获取包含此短 url 的提要条目,我需要分析由于某种原因我得到的结果是短 url 而不是长的,这里是代码:
foreach($parser->getItems() as $item)
{
$idpreg = '/\d+/';
preg_match_all($idpreg, $item['ID'],$statusid);
$retweetid = ($statusid[0][1]);
$datetime = $item['PUBLISHED'];
$user = $item['AUTHOR']['NAME'];
preg_match_all(LINK, $item['TITLE'], &$linkMatch);
$final = $linkMatch[0][0];
//if($linkMatch[0][0])
echo '<p>';
$link = new Link($final);
echo $link->getUrl();
echo '<br>';
echo $link->shortTolong();
echo '<br>';
echo $user;
echo '<br>';
echo $retweetid;
echo '</p>';
}
由于某种原因,我对 getUrl() 和 shortTolong() 得到了相同的结果,并且我确定这是一个错误。
任何想法为什么会这样?谢谢
编辑-我使用 curl_eror 向该方法添加了一个错误通知,我收到此错误消息:“libcurl 中不支持或禁用协议 http”,正如我所说,我从没有变化)我怀疑它也与使用 curl 的 FeedParser 有关....