Domanda
Questo è il mio codice:
<?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);
?>
Questa è la sua uscita:
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)
Questo comportamento è inaspettato. Quello che ho pensato che stavo facendo è rilevare 404 molli del, cercando in l'attributo Content-Location nei miei intestazioni HTTP. La funzione strpos prende decisioni che non capisco. Dove ho sbagliato? (Non ho bisogno di questo per lavorare su altri siti, tra l'altro.)
Soluzione
strpos()
può restituire false se la stringa non si trova o 0 se la stringa si trova proprio all'inizio . Tuttavia 0 restituisce false in un controllo booleano quindi è necessario controllare in modo esplicito il tipo:
$soft404test = strpos($contloc, "http://www.uhasselt.be/404b.htm") !== false;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow