1

これは私のコードです:

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

これはその出力です:

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)

この動作は予期しないものです。私がやっていると思っていたのは、HTTP ヘッダーの Content-Location 属性を見て、ソフト 404 を検出することでした。strpos 関数は、私が理解できない決定を下します。どこで私は間違えましたか?(ちなみに、これは他のサイトで動作する必要はありません。)

4

1 に答える 1

6

strpos()文字列が見つからない場合は false を返し、文字列が最初に見つかった場合は 0 を返します。ただし、ブール値チェックでは 0 は false と評価されるため、型を明示的にチェックする必要があります。

$soft404test = strpos($contloc, "http://www.uhasselt.be/404b.htm") !== false;
于 2009-11-24T08:50:57.263 に答える