2009-10-03 4 views
0

메소드 shortTolong()이있는 Link 클래스를 작성했습니다. 'location'응답 헤더를 반환하여 단축 URL의 실제 URL을 반환해야합니다. 나는 그것을 테스트하고 그것이 내가 일부에서 분석하는 네드이 짧은 URL이 포함 피드 항목을 얻을 수 FeedParser를 사용하는 다른 파일에이 방법을 사용하려고 할 때 문제가 시작하는 코드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(); 
     } 
    } 

여기 OK 를 작동합니다 이유 나는 결과로 대신 여기에 긴 하나의 짧은 URL을 얻을 코드입니다 : 내가의 getURL()와 shortTolong (에 대해 동일한 결과를 얻을 어떤 이유에서

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>'; 


} 

)이이 인 내가 확실히 알고 오류.

왜 그런가? "프로토콜 HTTP 지원 또는 libcurl에서에서 사용할 수 없습니다" 나는 내가에서이 방법을 테스트 말했듯이 그것은으로 잘 작동 것 : 감사

편집 - 나는 내가이 오류 메시지가 curl_eror 와 방법에 오류 통지를 추가 동일한 환경 (변경 없음)에서 혼자 서서 나는 그것이 너무 곱슬 곱슬 함을 사용하여 FeedParser와 관련이 있다고 의심한다 ....

+0

시도해보십시오. echo $ server_output = curl_exec ($ ch); ?? 출력 결과를 출력합니까? –

+0

URL을 다듬어 도움이되는지 확인하십시오. –

+0

sab - 응답 주셔서 감사합니다 $ server_output URL의 응답 헤더를 출력합니다 왜 trim()이 도움이 될 것이라고 생각하십니까? 내가이 메서드는 위대한 일을 때 정적 정적 객체 생성 문제를 테스트 시작할 때 피드 피어와 함께 동적으로 시작했을 때 –

답변

1

나는 당신이() URL을 trim (trim)해야한다고 생각하고 그 문제를 해결해야한다.

+0

ok 잘 모르겠습니다 ... ur 편집 "http 프로토콜이 지원되지 않거나 libcurl에서 비활성화되었습니다." 그것이 먹이 루프에서 요청할 때 ur가 오면 .. url은 볼 수없는 주변에 몇 가지 여분의 물건이 있습니다. 시도 해보세요 .. 그렇지 않으면 .. 이런 식으로 일어날 이유가 없습니다. 일어나는 .. 또한 명시 적으로 보낼 좋은 그것 curl_close ($ ch); 요청이 완료된 후 –

+0

Sab - 나는 당신에게 사과해야한다고 생각한다. 나는 trim() 솔루션이 매력처럼 작동하는 것을 의심했지만! - 존경! –

+0

나는 그것이 기뻤다. :) –

관련 문제