@Pavl-85

Почему скрипт не создаёт файл изображения в папке image при парсинге с сайта?

Добрый день!
Создаю скрипт для парсинга с сайта.
Скрипт должен: сохранить в базу данных названия стран и пути до картинок (это сделать получается). Также, нужно сохранить картинки gif в папку image.
В браузере появляется много строк со следующей ошибкой:
Warning: file_put_contents(image/FLAG-small/abhaziya.gif): failed to open stream: No such file or directory in C:\OSPanel\domains\test\www\rusakov\parsing17.php on line 36
И в папку image не записывается файл gif, она остаётся пустой. Почему так получается? Папка image существует и она находится в одной папке со скриптом.
Вот весь код:
<?php
require 'C:\OSPanel\vendor\autoload.php';

$host = 'localhost'; // адрес сервера
$database = 'mysite'; // имя базы данных
$user = 'root'; // имя пользователя
$password = ''; // пароль

// подключаемся к серверу
$link = mysqli_connect($host, $user, $password, $database)
or die("Ошибка " . mysqli_error($link));

$url = 'https://33tura.ru/flagi';


function getCurl($url){
    $curl = curl_init();
    curl_setopt($curl,CURLOPT_URL, $url);
    curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl,CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);
    $result = curl_exec($curl);
    return $result;
}

$curlPage = getCurl($url);
$pq = phpQuery::newDocument($curlPage);
$data = $pq->find('div.tur-article tbody tr td table tbody tr');
foreach($data as $elem){
    $countryName = pq($elem)->find('a:eq(1)')->text();
    $imgFlag = pq($elem)->find('a:eq(0) img')->attr('src');
    $img = getCurl('https://33tura.ru'.$imgFlag);
    if(!file_exists("image".$imgFlag)){
        file_put_contents("image".$imgFlag, $img);
    }
    $query="SELECT name FROM content3 WHERE name='".$countryName."'";
    $result= mysqli_query($link,$query);
    $data = mysqli_fetch_assoc($result);
    if(empty($data)){
        $query="INSERT INTO content3 SET name='".$countryName."', img='image".$imgFlag."'";
        mysqli_query($link,$query)or die(mysqli_error($link));
    }
}
?>
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
Stalker_RED
@Stalker_RED
вероятно в папке image отсутствует папка FLAG-small

$dir = dirname(realpath($filename)); // получаем имя папки
if (!is_dir($dir)) mkdir($dir, 0755, true); // создаем 
// и только потом file_put_contents
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@format_iai
Вот параметры для curl, у тебя проблемы с SSL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urlFrom);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, false);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
С сайта вы тяните урл картинки из img src, в котором, кроме собственно названия картинки, есть путь (папка) до нее, и вы пытаетесь записать файл по пути, которого у вас на сервере нет. Соответственно будет ошибка.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы