Pregunta

Este es mi código:

<?php
$url = "http://www.uhasselt.be/collegeroosters/2009_2010_298_5_10.html";
$headers = get_headers($url, 1);
print_r($headers);
$contloc = $headers["Content-Location"];
echo "Content-Location: " . $contloc . "\n";
$soft404test = strpos($contloc, "http://www.uhasselt.be/404b.htm") ? true : false;
var_dump($soft404test);
?>

Esta es su salida:

Array
(
    [0] => HTTP/1.1 200 OK
    [Content-Length] => 2030
    [Content-Type] => text/html
    [Content-Location] => http://www.uhasselt.be/404b.htm?404;http://www.uhasselt.be:80/collegeroosters/2009_2010_298_5_10.html
    [Last-Modified] => Mon, 22 Aug 2005 07:10:22 GMT
    [Accept-Ranges] => bytes
    [ETag] => "88a8b68fe8a6c51:31c9e"
    [Server] => Microsoft-IIS/6.0
    [MicrosoftOfficeWebServer] => 5.0_Pub
    [X-Powered-By] => ASP.NET
    [Date] => Tue, 24 Nov 2009 08:40:25 GMT
    [Connection] => close
)
Content-Location: http://www.uhasselt.be/404b.htm?404;http://www.uhasselt.be:80/collegeroosters/2009_2010_298_5_10.html
bool(false)

Este comportamiento es inesperado. Lo que pensé que estaba haciendo es detectar 404 suaves al observar el atributo de ubicación de contenido en mis encabezados HTTP. La función STRpos toma decisiones que no tengo. ¿Qué hice mal? (Por cierto, no necesito que esto trabaje en otros sitios).

¿Fue útil?

Solución

strpos() puede devolver falso si la cadena no se encuentra o 0 si la cadena se encuentra al principio. Sin embargo, 0 se evalúa en falso en un cheque booleano, por lo que debe verificar explícitamente el tipo:

$soft404test = strpos($contloc, "http://www.uhasselt.be/404b.htm") !== false;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top