2012-04-19 11 views
70

No entiendo cuando echo $ httpCode Siempre obtengo 0, esperaba 404 cuando cambio $ html_brand en una URL rota. ¿Hay algo que extraño o no sé? Gracias.CÓDIGO PHP CÓDIGO HTTP return 0

//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); 

Respuesta

65

Si se conecta con el servidor, puede obtener un código de retorno, de lo contrario, fallará y obtendrá un 0. Por lo tanto, si intenta conectarse a "www.google.com/lksdfk" obtendrá un código de retorno de 400, si vas directamente a google.com, obtendrás 302 (y luego 200 si pasas a la página siguiente ... bueno, lo hago porque se reenvía a google.com.br, por lo que puede que no obtén eso), y si vas a "googlecom" obtendrás un 0 (no se encuentra el host), por lo que con el último, no hay nadie para devolver un código.

Probado usando el siguiente código.

<?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); 
+0

También para refencing followlocation también, a veces recibo 301 que es un problema de redirección. – Ardeus

+0

Es extraño aunque $ response tiene contenido html, pero el $ httpcode siempre devuelve 0, además el curl_error es nulo. lo que podría ser posible salió mal. Solo incluyo returntransfer, header (false), followlocation solo en la configuración. – Ardeus

+0

¡muy útil! muchas gracias. –

1

¿Cuál es el contenido exacto que está pasando a $ html_brand?

Si se tiene una sintaxis URL no válida, es muy probable que obtener el código HTTP 0.

1

Como dijo here y por debajo, una solicitud fallado (no se encuentra es decir, el servidor) devuelve falso, sin Código de estado HTTP, ya que nunca se recibió una respuesta.

Llamada curl_error().

54

después de probar este curl_exec para ver cuál es el problema:

print curl_error($ch); 

Si se trata de imprimir algo así como 'mal formado' a continuación, comprobar el formato de URL.

+4

Gracias por esa sugerencia - guardado mi trasero :) – wbj

+0

¡SÍ! Me salvó el culo – pimbrouwers

1

Compruebe el curl_error después del curl_getinfo para descubrir los errores ocultos.

if(curl_errno($ch)){ 
    echo 'Curl error: ' . curl_error($ch); 
} 
1

Tuve el mismo problema y en mi caso esto fue porque la función curl_exec está deshabilitada en php.ini. Comprobar si los registros:

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

solución es eliminar curl_exec de funciones con discapacidad en php.ini en el archivo de configuración del servidor.