Sergey_Uspenskiy
@Sergey_Uspenskiy
Веб-дизайнер, front-end разработчик

Сохраняет битый jpg,скрипт парсинга новостей, в чем ошибка?

Скрипт парсит новость, скачивает картинку по link, сохраняет на сервер битый файл, в чем ошибка? :

if($f_Link){
$c=file_get_contents($f_Link);

$fh=fopen($_SERVER['DOCUMENT_ROOT']."/scripts/news.txt","w");
fwrite($fh,$c);
fclose($fh);
preg_match("/b-material-head__title\">(.{1,})<\/h1>/", $c, $h1);
preg_match("/class=\"b-material-head__date-day\">(.{10})<\/span>/", $c, $date);
preg_match("/link rel=\"image_src\" href=\"(.*)\">/U", $c, $img); -сохранение картинки
preg_match("/(\C*<\/article>)/U", $c, $text);

$id=mysql_insert_id($LinkID);
if($img[1]){
$ext= strrchr($img[1],".");
mysql_unbuffered_query("INSERT INTO Message5 (User_ID,Subdivision_ID,Sub_Class_ID,Priority,Checked,Created,parent_class_id,parent_mess_id,foto) VALUES(1,'19','19',20,1,NOW(),'2','".$message."','str".$ext.":image/jpeg:1');", $LinkID);
$id=mysql_insert_id($LinkID);
copy($img[1],$_SERVER['DOCUMENT_ROOT']."/sysfiles/45_".$id.$ext);
}
}
--
d22fdb0c5a274ab3b2cb1a19298e9e1e.jpga0b2cf7262e44243a1085b5f6636c87a.jpg

--
мини-картинка есть, только она в самом теле новости, а должна быть наверху в заголовке.
Скрипт раьнше работал без проблем, обновилась верстка на сайте Русской газеты, правлю регулярные выражения и не могу никак решить задачу с изображением. Может, кто видит ошибку?
  • Вопрос задан
  • 304 просмотра
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега PHP
Доброй ночи.
Проблема у Вас в строке:
copy($img[1],$_SERVER['DOCUMENT_ROOT']."/sysfiles/45_".$id.$ext);

В $img['1'] попадает '//cdnimg.rg.ru/img/content/138/31/30/pr_t_650x433.jpg'.
Попробуйте сделать так:
copy('https:' . $img[1],$_SERVER['DOCUMENT_ROOT']."/sysfiles/45_".$id.$ext);

Файл будет копироваться без проблем.
И делайте проверки, чтобы можно было самостоятельно определить ошибку.
Сделайте сначала как у Вас сейчас:
if(!copy($img[1],$_SERVER['DOCUMENT_ROOT']."/sysfiles/45_".$id.$ext)){
   echo 'error';
}
else{
 echo 'success';
}

Без указания протокола передачи данных должно быть предупреждение, добавите https и всё должно заработать.
И посмотрите логи сервера, там должно быть это предупреждение.
И сам pattern регулярного выражения можно подправить.

p.s.
И в строке
preg_match("/link rel=\"image_src\" href=\"(.*)\">/U", $c, $img); -сохранение картинки

нет никакого сохранения/копирования изображения)

p.s.
Этот код
$fh=fopen($_SERVER['DOCUMENT_ROOT']."/scripts/news.txt","w");
fwrite($fh,$c);
fclose($fh);

можно заменить на file_put_contents()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы