2009-10-03 20 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