2009-10-03 16 views
0

我编写了具有方法shortTolong()的类Link,它应该通过返回'location'响应头来返回缩短url的实际URL。我测试了它和它的工作原理确定 这里是代码无法在foreach循环中使用类方法 - php

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获得包含此短网址供稿条目的其他文件,这个方法我定义一些分析问题开始我之所以得到结果的短网址,而不是在这里长一个是代码:

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 我收到此错误信息:“协议HTTP不支持或libcurl中禁用” 正如我所说的,我从测试这种方法,它的工作罚款因为独立在相同的环境(没有变化),我怀疑它与FeedParser也使用卷曲...

+0

你试过echo $ server_output = curl_exec($ ch); ??是否打印一些输出? – 2009-10-03 23:28:15

+0

对网址进行了修剪,看看是否有帮助。 – 2009-10-03 23:38:50

+0

沙特阿拉伯 - 谢谢你的响应$ server_output输出URL的响应标题如预期 你能解释为什么你认为trim()会有帮助吗?正如我所说,当我在静态生成的对象上测试它时,此方法工作良好,当对象以动态方式初始化时,feedparser – 2009-10-03 23:53:49

回答

1

我认为你应该修剪()的网址,并应该解决问题。

+0

确定如此不确定... ur编辑“协议http不支持或禁用libcurl”..什么时候出现?如果它出现时,你的请求从饲料循环..有可能是网址有一些额外的东西,它无法看到..给它一个尝试..否则..这是没有理由发生的方式是发生..也很好发送显式curl_close($ ch);请求完成后 – 2009-10-03 23:59:06

+0

Sab - 我想我欠你一个道歉:)虽然我怀疑修剪()解决方案,它的工作就像一个魅力! - 尊重! – 2009-10-04 00:02:59

+0

我很高兴它为你工作:) – 2009-10-04 00:06:07