Voor een pagina met externe links heb ik een functie die checkt of een
url nog bestaat. Zo niet dan verandert een status in een database en
wordt de url niet meer getoond. Dit werkt voor de meeste urls's.
Nu heb ik een aantal url's waarbij het php-script een 404 - Not Found
geeft, terwijl de url toch bestaat. Tik ik in een console HEAD `url` in,
krijg ik inderdaad een 200 - OK terug voor die url's. Dat snap ik dus
niet. Hoe kan een url benaderd via PHP 404 geven en via de command line
200?
Dit is de functie uit mijn script:
<?
function checkurl($url)
{
$url_parsed = parse_url($url);
$host = $url_parsed["host"];
$port = $url_parsed["port"];
if ($port==0) {
$port = 80;
}
$path = $url_parsed["path"];
if ($url_parsed["query"] != "") {
$path .= "?".$url_parsed["query"];
}
$fp = @fsockopen($host, $port, $errno, $errstr, 15);
if($fp)
{
fputs($fp, "HEAD http://".$host.$path." HTTP/1.0\r\n\r\n");
while(!feof($fp))
{
$check = $check.fgets($fp);
}
$checkstat = strpos(strtolower($check), '404 not found');
if ($checkstat === false) {
return 1;
} else {
return 0;
}
} else {
return 0;
}
}
?>
Is de input bijvoorbeeld http://www.mandarintools.com/chinesename.html,
dan wordt een 0 teruggegeven. De inhoud van $check is dan: HTTP/1.1 404
Not Found Date: Wed, 12 Jan 2005 20:15:10 GMT Server: Apache/1.3.26
Connection: close Content-Type: text/html.
Open ik een console en type HEAD
http://www.mandarintools.com/chinesename.html, dan krijg ik:
200 OK
Connection: close
Date: Wed, 12 Jan 2005 20:17:39 GMT
Accept-Ranges: bytes
ETag: "26ebd9-1f60-41e4b68b"
Server: Apache/1.3.26
Vary: Host
Content-Length: 8032
Content-Type: text/html
Last-Modified: Wed, 12 Jan 2005 05:32:59 GMT
Client-Date: Wed, 12 Jan 2005 20:17:40 GMT
Client-Peer: 207.172.16.151:80
Client-Response-Num: 1
Iemand enig idee hoe dit kan, en beter nog, hoe dit op te vangen?
Alvast bedankt voor het meedenken,
Emile.

Likes:
![[PHP] Bestaan van URL checken](https://www.webhostingtalk.nl/images/WHT_rd/misc/dT.png)
Quote