2012-01-20 14 views
0

サーバー上でcURLは何も返しません。すべてがローカルホスト上でうまく動作しますが、リモートホスティングではgetSearchResults()は何も返しません(または302ヘッダー)。これはサーバーの構成に問題がありますか(2つ試しました)。それはCURLOPT_FOLLOWLOCATIONで何かできますか?ローカルホストで真と偽の両方を試しました - それでも動作します。リモートホスティングでは、何らかの理由で場所をたどることは許されませんが、ローカルでないとうまくいけば、それは問題ではないと思います。cURLは何も返しません。

<?php 
class cURL 
{ 
    private $username; 
    private $password; 
    private static $tmpfname; 

    public function __construct($username,$password) { 
     $this->username = $username; 
     $this->password = $password; 
     $this->makeCookies($username, $password); 
    } 

    private function makeCookies($username, $password) { 
     self::$tmpfname = tempnam("/tmp", "Cookie"); 
     $useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"; 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 
     curl_setopt($ch, CURLOPT_COOKIEFILE, self::$tmpfname); 
     curl_setopt($ch, CURLOPT_COOKIEJAR, self::$tmpfname); 
     curl_setopt($ch, CURLOPT_URL,"http://vk.com/login.php"); 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, "email={$username}&pass={$password}"); 
     ob_start(); 
     curl_exec($ch); 
     ob_end_clean(); 
     curl_close($ch); 
     unset($ch); 
    } 

    private function getHTML($url){ 
     $useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"; 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 
     curl_setopt($ch, CURLOPT_COOKIEFILE, self::$tmpfname); 
     curl_setopt($ch, CURLOPT_COOKIEJAR, self::$tmpfname); 
     curl_setopt($ch, CURLOPT_HEADER, true); 
     curl_setopt($ch, CURLOPT_URL,$url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 
     $contents = curl_exec($ch); 
     curl_close($ch); 

     return $contents; 
    } 

    public function getSearchResults($songname) { 
     $songname = urlencode($songname); 
     $contents = $this->getHTML("http://vk.com/search?c[section]=audio&c[q]={$songname}"); 
     return $contents; 
    } 
} 
?> 
+0

私はこのようなホスティングで特定のcURLオプションが無効になっていることを聞いたことがありません。ホストまたはスイッチに問い合わせてください。 – ceejayoz

+0

@ceejayoz PHPがセーフモードで動作する場合、 'FOLLOWLOCATION'は無効になっています。 – Ranty

+1

@heroixフレンドリーなお知らせ!私的ではなく保護を使用してください。後で拡張性と単体テストを可能にし、良い方法と考えられています。 –

答えて

1

302のコードは、リダイレクトされ、あなたはそれのうち有益な何かを得るためにCURLOPT_FOLLOWLOCATIONを使用できるようにする必要があります。

+0

OPはこれを真と偽の両方に設定しましたが、役に立たないと言いました... –

+2

また、 'ob_start()'と ' cURLの結果を取得するには、 'CURLOPT_RETURNTRANSFER'オプションの設定を検討してください。 'curl_exec()'は結果を文字列として出力するのではなく文字列として返します。 出力を抑制する場合は、 'CURLOPT_MUTE'を使用してください。 –

+0

@GigaWatt:ニースの推奨事項は、答えとしてそれを置く必要がありますので、騒音で迷子にならないようにしてください。 –

0

セーフモードでphpを実行するWebサーバー用のリダイレクトメカニズムの実装には、多くのものがあります。たとえば、here(最初は実際にそれを探す必要があります)は、自分のスクリプト用に一日修正したものです。複数のリダイレクトを処理することができ、簡単に理解して変更できる方法で書かれています。

関連する問題