0

メソッド shortTolong() を持つクラス Link を作成しました。これは、'location' 応答ヘッダーを返すことによって短縮 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 ではなく短い 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 を使用してメソッドにエラー通知を追加しました。「プロトコル http は libcurl でサポートされていないか、無効になっています」というエラー メッセージが表示されます。変更はありません) curl を使用する FeedParser と関係があるのではないかと思います....

4

1 に答える 1

2

URLをtrim()する必要があり、それで問題が解決するはずです。

于 2009-10-03T23:42:13.413 に答える