|
|
|
| Сейчас используется такая бесполезная проверка:
function HaveFile($file){
$file = fopen ($file, "r");
if (!$file) {
return false;
}
return true;
}
|
C выводом такой ошибки, если файл не существует:
Warning: fopen(http://site.com/images/anno/big3_1355327154.JPG) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/g/garmonia/site.com/public_html/parsing/cars/index.php on line 198
|
| |
|
|
|
|
|
|
|
для: OLi
(13.12.2012 в 00:34)
| |
<?php
function remote_file_exists($url)
{
stream_context_set_default(array('http' => array('method' => 'HEAD')));
return (bool) preg_match('~HTTP/1\.\d\s+200\s+OK~', @end(array_intersect_key(get_headers($url, 1), range(0, 3))));
}
$file = 'http://windows.php.net/downloads/releases/php-5.3.19-Win32-VC9-x86.msi';
var_dump(remote_file_exists($file));
|
можно попробовать такой код (с учетом редиректов работает). Сильно не тестил, но похоже, что все в норме.
<?php
end(array_intersect_key(get_headers($url, 1), range(0, 3)))
|
это получение значения (статус ответа) последнего целочисленного ключа массива заголовков | |
|
|
|
|
|
|
|
для: Igorek
(13.12.2012 в 11:38)
| |
Fatal error: Call to undefined function stream_context_set_default() in Z:\home\test1.ru\www\check\index.php on line 4
|
| |
|
|
|
|
|
|
|
для: OLi
(13.12.2012 в 14:49)
| | ..... | |
|
|
|
|
|
|
|
для: OLi
(13.12.2012 в 14:49)
| | мда... забыл упомянуть, что требуется php >= 5.3.0
можно и без этой функции, только в этом случае будет выполняться GET запрос.
Честно говоря не знаю, означает ли это, что в данном случае сервер будет загружать сам файлик или все же возьмет только заголовки. Может кто подскажет? )) | |
|
|
|
|
|
|
|
для: Igorek
(13.12.2012 в 15:08)
| | Чтобы загрузить только заголовки, нужно загружать либо через curl с опциями returntransfer и nobody, либо через сокеты, по запросу HEAD вместо GET. | |
|
|
|
|
|
|
|
для: Sfinks
(13.12.2012 в 16:07)
| | Можно пример? | |
|
|
|
|
|
|
|
для: OLi
(13.12.2012 в 16:59)
| | Сделал так:
<?
$file = 'http://windows.php.net/downloads/releases/php-5.3.19-Win32-VC9-x86.msi';
$ch = curl_init($file);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// $retcode > 400 -> not found, $retcode = 200, found.
echo $retcode;
curl_close($ch);
?>
|
| |
|
|
|
|
|
|
|
для: OLi
(13.12.2012 в 19:30)
| | а можно узнать через curl тип вернувшегося содержимого? скажем сделать проверку вернул ли сервер картинку? | |
|
|
|
|
|
|
|
для: OLi
(13.12.2012 в 19:53)
| |
$file = 'http://windows.php.net/downloads/releases/php-5.3.19-Win32-VC9-x86.msi';
$ch = curl_init($file);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
$s = curl_exec($ch);
|
$s будет содержать заголовки ответа сервера.
Заголовок Content-Type - тип содержимого | |
|
|
|
|
|
|
|
для: Sfinks
(13.12.2012 в 21:41)
| | Что-то не работает..возвращает строку URL только | |
|
|
|
|
|
|
|
для: OLi
(14.12.2012 в 17:06)
| | Да, забыл, еще нужно добавить
curl_setopt($ch, CURLOPT_HEADER, true);
|
| |
|
|
|
|
|
|
|
для: Sfinks
(13.12.2012 в 16:07)
| | ну вот я про тоже. используя
<?php
stream_context_set_default(array('http' => array('method' => 'HEAD')));
|
можно было бы избежать операций с curl или сокетами, но это для php >= 5.3.0 | |
|
|
|
|
|
|
|
для: Igorek
(13.12.2012 в 19:57)
| | А для CURL узнать, что это изображение? | |
|
|
|
|
|
|
|
для: OLi
(13.12.2012 в 20:14)
| | В общем нужна ваша подсказка:
Сделал так:
<?
$ch = curl_init();
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_URL, $image_url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt ($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
$content = curl_exec ($ch);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
// $retcode > 400 -> not found, $retcode = 200, found.
if ($retcode == 404 && $contentType =='text/html') {
curl_close($ch);
return false;
} else {
curl_close($ch);
return true;}
}
?>
|
<? if (HaveFile($row['image_tmp']) == true ) {
if (file_put_contents('images/'.$name.'_'.$row['listid'].'.'.getExtension4($row['image_tmp']), file_get_contents($row['image_tmp']))) {
$db = mysql_query('UPDATE images set status=1, fname = "'.$name.'_'.$row['listid'].'.'.getExtension4($row['image_tmp']).'" WHERE listid="'.$row['listid'].'"');
LoadIMage();
}
} ?>
|
Сейчас возникает ошибка:
Warning: file_get_contents(http://autohmao.ru/images/anno/big2_1355500315.JPG) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/g/garmonia/site.com/public_html/parsing/cars/index.php on line 241
|
Как можно отловить такого рода ошибки, чтобы скрипт прошел дальше на исполнение? | |
|
|
|
|
|
|
|
для: OLi
(16.12.2012 в 00:38)
| | Это не ошибка, а предупреждение, т.е. работа скрипта не должна прекращаться. А само предупреждение можно "подавить" используя собаку | |
|
|
|