112

$httpCode をいつエコーするか理解できません。常に 0 を取得します。$html_brand を壊れた URL に変更すると、404 が返されると予想していました。見逃している、または知らないことはありますか? ありがとう。

 //check if url exist
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $html_brand);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 404) {
    echo "The Web Page Cannot Be Found";
    return;
}
curl_close($ch);
4

10 に答える 10

106

サーバーに接続すると、そこからリターン コードを取得できます。それ以外の場合は失敗し、0 が返されます。したがって、「www.google.com/lksdfk」に接続しようとすると、次のリターン コードが返されます。 400、google.com に直接アクセスすると 302 が返されます (次のページに進むと 200 になります... google.com.br に転送されるため、取得できない可能性があります)。 「googlecom」にアクセスすると、0 (ホストが見つかりません) が返されるため、最後のものでは、コードを送り返す人は誰もいません。

以下のコードを使用してテストしました。

<?php

$html_brand = "www.google.com";
$ch = curl_init();

$options = array(
    CURLOPT_URL            => $html_brand,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER         => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_ENCODING       => "",
    CURLOPT_AUTOREFERER    => true,
    CURLOPT_CONNECTTIMEOUT => 120,
    CURLOPT_TIMEOUT        => 120,
    CURLOPT_MAXREDIRS      => 10,
);
curl_setopt_array( $ch, $options );
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ( $httpCode != 200 ){
    echo "Return code is {$httpCode} \n"
        .curl_error($ch);
} else {
    echo "<pre>".htmlspecialchars($response)."</pre>";
}

curl_close($ch);
于 2012-04-19T12:50:33.107 に答える
93

curl_exec の後にこれを試して、何が問題なのかを確認してください。

print curl_error($ch);

「不正な形式」のような出力の場合は、URL 形式を確認してください。

于 2012-04-19T12:28:30.857 に答える
8

curl_getinfoの後に curl_error をチェックして、隠れたエラーを見つけてください。

if(curl_errno($ch)){   
    echo 'Curl error: ' . curl_error($ch);
}
于 2014-11-20T14:22:09.283 に答える
3

私は同じ問題を抱えていました。私の場合、これはphp.iniでcurl_exec機能が無効になっているためです。ログを確認します。

PHP Warning:  curl_exec() has been disabled for security reasons in /var/www/***/html/test.php on line 18

解決策は、サーバー構成ファイルの php.ini で無効になっている関数から curl_exec を削除することです。

于 2016-04-19T10:52:12.457 に答える
3

ここと以下で述べたように、失敗したリクエスト (つまり、サーバーが見つからない) は、応答が受信されていないため、HTTP ステータス コードではなく false を返します。

コールしcurl_error()ます。

于 2012-04-19T12:25:48.260 に答える
2

$html_brand に渡す正確なコンテンツは何ですか?

URL 構文が無効な場合、HTTP コード 0 が返される可能性が非常に高くなります。

于 2012-04-19T12:22:45.913 に答える