2017-05-24 14 views
0

私はここにコードを持っています私にウェブページのソースコードを返してください。単純なcURLが動作しない

<?php 
function curlGet($url){ 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_URL, $url); 

    $results = curl_exec($ch); 

    curl_close($ch); 

} 

$packtPage = curlGet('https://www.google.com'); 

print_r($packtPage); 

このコードは、そのWebページのソースコードを返信してエコーアウトすることを理解しています。ただし、このコードを実行すると空白のページが表示されます。

予想通り、これは機能しない理由を理解するためにどこでも検索した後、私はtroubleshootedと

// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

次の行をコメントアウトすると、Webページは「」ここ

302 Moved 

The document has moved here. 

を示していることを発見与えられたURLにリダイレクトするリンク。

私は何が起こっているのか理解してください!

+3

以下の回答に加えて、あなたの関数 –

+0

の最後にreturn文を追加し、あなたはまた、[この]を見てみたいことがあり(HTTPS: //stackoverflow.com/questions/3519939/make-curl-follow-redirects) – GentlemanMax

+0

@GentlemanMax私はそれを私の答えに追加します:) – thepieterdc

答えて

3

あなたはあなたが「$results変数のカール要求の出力を保存し、画面に何も出力しないためにPHPを言っている

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$results = curl_exec($ch); 

を使用しています。

あなたが見たい場合はCOMMでGentlemanMaxによって示唆されるように

<?php 
function curlGet($url){ 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_URL, $url); 

    $results = curl_exec($ch); 

    curl_close($ch); 
    return $results; 
} 

$packtPage = curlGet('https://www.google.com'); 

print_r($packtPage); 

:ますprint_r関数に$resultsの値を返すために、次のような出力は、コードを変更しますまた、あなたのcURL要求に次の行を含めることも良い考えです。この行は、ページが移動されたことを意味するHTTP/302ステータスコードを受け取っているため、cURLにリダイレクトを指示します。カールは、以下の余分なオプションを使用してリダイレクトのこれらの種類を追跡することができます

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
+0

はい。ありがとうございました。私は最後にreturnステートメントを追加するのを忘れていました。しかし、それは本当に302のリダイレクトだったので、少し悩まされていました。また、エコーの代わりにトラブルシューティングをするときに、var_dumpやprint_rを試してみて、同じ結果が表示されてしまうのは混乱していました。しかし、今私はもっと理解して、答えに感謝します。それはcURLへの私の最初の進出で私を助けました! – Ben

関連する問題