Ошибка при открытии файла imagine. Как исправить?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Ошибка при открытии файла imagine. Как исправить?

Сообщение slo_nik »

Доброй ночи.
Столкнулся с непонятной для меня проблемой.
Есть консольное приложение, которое парсит объявления с удалённого сервера. В объявлениях есть изображения.
Сначала изображения закачиваются во временную директорию, затем изменяется размер, создаются уменьшенные копии и в завершении переносятся в постоянную директорию.
Но после нескольких итераций цикла выводится ошибка:

Код: Выделить всё

Exception 'Imagine\Exception\RuntimeException' with message 'Unable to open image /home/slonik/localhost/www/test.loc/prodejvuz/frontend/web/cars/tmp_upload/9/6O35536.jpg'
Само изображение существует. Для всех предшествующих изображений изменён размер и сделаны превью.
С правами доступа проблем нет.
Вот вывод команды ls -l

Код: Выделить всё

-rw-rw-r-- 1 slonik slonik  64344 мар 20 23:04 0O35536.jpg
-rw-rw-r-- 1 slonik slonik  67230 мар 20 23:04 1O35536.jpg
-rw-rw-r-- 1 slonik slonik  56515 мар 20 23:04 2O35536.jpg
-rw-rw-r-- 1 slonik slonik  59062 мар 20 23:04 3O35536.jpg
-rw-rw-r-- 1 slonik slonik  74374 мар 20 23:04 4O35536.jpg
-rw-rw-r-- 1 slonik slonik  31160 мар 20 23:04 5O35536.jpg
-rw-rw-r-- 1 slonik slonik 216203 мар 20 23:04 6O35536.jpg
drwxr-xr-x 1 slonik slonik    132 мар 20 23:04 mini
Проблема с изображением 6O35536.jpg. До этого все изображения от 0O35536.jpg и до 5O35536.jpg изменены в размере и сделаны уменьшенные копии, которые помещены в директорию "mini".
Методы, которые отвечают за изменение размера и создание превью.

Код: Выделить всё

public static function resizeImg($dir, $file, $path=null)
{
    foreach($file as $value){
        if($value != 'mini' && (mime_content_type($path . $value) == 'image/jpeg')){
            Image::resize($path . $value, 1200, null)->save($path . $value, ['jpeg_quality' => 80]);
            self::thumbnail($value, $path);
            Images::writeImg($value, $dir);
        }
        else{
            continue;
        }
    }
}

public static function thumbnail($file, $path)
{
    if(!file_exists($path . 'mini/')){
        mkdir($path . 'mini', 0755);
    }
    Image::thumbnail($path . $file, 274, 210)->save($path . 'mini/' . $file);
}
В чём может быть причина остановки работы скрипта? Ведь файл существует, права на чтение есть, да и предыдущие файлы были обработаны без проблем.
Ошибка начала появляться в последние часы, до этого всё работало без проблем.
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Ошибка при открытии файла imagine. Как исправить?

Сообщение someweb »

cp /home/slonik/localhost/www/test.loc/prodejvuz/frontend/web/cars/tmp_upload/9/6O35536.jpg /tmp/
Под слоником срабатывает?
Вьювером изображение открывается? Может битое просто.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: Ошибка при открытии файла imagine. Как исправить?

Сообщение slo_nik »

someweb писал(а): 2019.03.21, 08:46 cp /home/slonik/localhost/www/test.loc/prodejvuz/frontend/web/cars/tmp_upload/9/6O35536.jpg /tmp/
Под слоником срабатывает?
Вьювером изображение открывается? Может битое просто.
Я перенёс изображение, на котором всё валится, в backend/web/6O35536.jpg, воспользовался своим же кодом(только путь изменил и имя для нового файла) и всё сработало. Изображение без проблем обработалось.

Код: Выделить всё

Image::resize($path . $value, 1200, null)->save($path . $value, ['jpeg_quality' => 80]);
Также открывается без проблем, можно просмотреть через программу просмотра.
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Ошибка при открытии файла imagine. Как исправить?

Сообщение someweb »

cp /home/slonik/localhost/www/test.loc/prodejvuz/frontend/web/cars/tmp_upload/9/6O35536.jpg /tmp/
С путем из лога, а не набранным вручную срабатывает?
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: Ошибка при открытии файла imagine. Как исправить?

Сообщение slo_nik »

someweb писал(а): 2019.03.21, 09:23 cp /home/slonik/localhost/www/test.loc/prodejvuz/frontend/web/cars/tmp_upload/9/6O35536.jpg /tmp/
С путем из лога, а не набранным вручную срабатывает?
Конечно всё сработает.
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: Ошибка при открытии файла imagine. Как исправить?

Сообщение slo_nik »

Такая вещь сегодня выяснилась.
Проблема не решилась, но...
Перенёс контролер в backend/controllers запустил через браузер.
Возникла та же ошибка, но более подробная.
Изображение

О каком кэше идёт речь?
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: Ошибка при открытии файла imagine. Как исправить?

Сообщение slo_nik »

В общем пока проблему решил изменением настроек ImageMagick.
В файле /etc/ImageMagick-6/policy.xml увеличил лимиты

Код: Выделить всё

  <policy domain="resource" name="memory" value="2GiB"/>
  <policy domain="resource" name="map" value="4GiB"/>
  <policy domain="resource" name="width" value="128KP"/>
  <policy domain="resource" name="height" value="128KP"/>
  <policy domain="resource" name="area" value="1.0737GP"/>
  <policy domain="resource" name="disk" value="8GiB"/>
Консольный скрипт работает, ничего не обваливается.
Но насколько это правильное решение я не знаю.
Может кто-то подскажет более правильное решение?
umneeq
Сообщения: 1
Зарегистрирован: 2021.09.29, 12:08

Re: Ошибка при открытии файла imagine. Как исправить?

Сообщение umneeq »

slo_nik писал(а): 2019.03.23, 03:10 В общем пока проблему решил изменением настроек ImageMagick.
В файле /etc/ImageMagick-6/policy.xml увеличил лимиты

Код: Выделить всё

  <policy domain="resource" name="memory" value="2GiB"/>
  <policy domain="resource" name="map" value="4GiB"/>
  <policy domain="resource" name="width" value="128KP"/>
  <policy domain="resource" name="height" value="128KP"/>
  <policy domain="resource" name="area" value="1.0737GP"/>
  <policy domain="resource" name="disk" value="8GiB"/>
Консольный скрипт работает, ничего не обваливается.
Но насколько это правильное решение я не знаю.
Может кто-то подскажет более правильное решение?
Та же ошибка. Один в один.
В моём случае проблем была в том, что я поставил php8.0, а на php7.4 работает ок.
acidflash
Сообщения: 107
Зарегистрирован: 2015.09.03, 19:37

Re: Ошибка при открытии файла imagine. Как исправить?

Сообщение acidflash »

и на 8.1.4 так же, пришлось сделать на Go
Ответить