سؤال

هذا هو الكود الخاص بي:

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

هذا السلوك غير متوقع. ما اعتقدت أنني كنت أفعله هو اكتشاف Soft 404 من خلال النظر إلى سمة محتوى الموقع في رؤوس HTTP الخاصة بي. تتخذ وظيفة Strpos القرارات التي لا أحصل عليها. اين ارتكبت خطأ؟ (لست بحاجة إلى هذا للعمل في مواقع أخرى ، بالمناسبة.)

هل كانت مفيدة؟

المحلول

strpos() يمكن أن تعود خطأ إذا لم يتم العثور على السلسلة أو 0 إذا تم العثور على السلسلة في البداية. ومع ذلك ، يتم تقييم 0 إلى خطأ في فحص منطقي حتى تحتاج إلى التحقق بشكل صريح من النوع:

$soft404test = strpos($contloc, "http://www.uhasselt.be/404b.htm") !== false;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top