Проверка стойността на хедър на отдалечено изображение

  • Автор Автор Hous
  • Начална дата Начална дата

Hous

Registered
Чудя се как да направя проверка когато някои адрес е "счупен" и хедърът е 404 not found , да изпълнява една заявка която да обозначава елемента като счупен в таблицата...

Код:
$img="http://google.bg/logo.png";
$checkheader.....
if($checkheader=='404'){$zapisvame_v_db-to ;}

Някой да помогне?
 
http://bg2.php.net/get_headers

само дето в примера с гугъл, response code е 301, може би трябва да проверяваш дали е различен от 200

PHP:
print_r(get_headers('http://google.bg/logo.png'));
Array
(
    [0] => HTTP/1.0 301 Moved Permanently
    [1] => Location: http://www.google.bg/logo.png
    [2] => Content-Type: text/html; charset=UTF-8
    [3] => X-Content-Type-Options: nosniff
    [4] => Date: Mon, 22 Jul 2013 10:10:10 GMT
    [5] => Expires: Wed, 21 Aug 2013 10:10:10 GMT
    [6] => Cache-Control: public, max-age=2592000
    [7] => Server: sffe
    [8] => Content-Length: 226
    [9] => X-XSS-Protection: 1; mode=block
    [10] => HTTP/1.0 404 Not Found
    [11] => Content-Type: text/html; charset=UTF-8
    [12] => X-Content-Type-Options: nosniff
    [13] => Date: Mon, 22 Jul 2013 10:10:10 GMT
    [14] => Server: sffe
    [15] => Content-Length: 939
    [16] => X-XSS-Protection: 1; mode=block
)
 
PHP:
$img="http://google.bg/errorfile";
$check=file_get_contents($img);
if(!empty($check)){
echo "yes";
} else {
echo "no";
}
Така става, но ако страницата за грешка е уникална и има съдържание - не знам.
 
Аз намерих простичко решение:
Код:
$url = 'http://www.example.com';
$handle = @fopen($url,'r');
if($handle !== false){
   echo 'Exists';
}
без значение дали е HTML ерор страница, стига кодът да е 404 в хедъра всичко е ок.

благодаря за отговорите
 
Най-добрият вариант е да използваш cURL. С него можеш да свалиш само хедърите на файла, без да сваляш самия файл (за разлика от fopen и file_get_contents) като зададеш параметър CURLOPT_NOBODY.
PHP:
<?php
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'http://testcURL.com/?item1=value&item2=value2',
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_NOBODY => true 
));

curl_exec($curl);
$respCode = (int) curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

if ($respCode == 404) {
//
}
 

Back
Горе