Страница 1 из 1

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

Добавлено: 2019.03.21, 00:32
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);
}
В чём может быть причина остановки работы скрипта? Ведь файл существует, права на чтение есть, да и предыдущие файлы были обработаны без проблем.
Ошибка начала появляться в последние часы, до этого всё работало без проблем.

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

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

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

Добавлено: 2019.03.21, 09:16
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]);
Также открывается без проблем, можно просмотреть через программу просмотра.

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

Добавлено: 2019.03.21, 09:23
someweb
cp /home/slonik/localhost/www/test.loc/prodejvuz/frontend/web/cars/tmp_upload/9/6O35536.jpg /tmp/
С путем из лога, а не набранным вручную срабатывает?

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

Добавлено: 2019.03.21, 09:32
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/
С путем из лога, а не набранным вручную срабатывает?
Конечно всё сработает.

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

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

О каком кэше идёт речь?

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

Добавлено: 2019.03.23, 03:10
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"/>
Консольный скрипт работает, ничего не обваливается.
Но насколько это правильное решение я не знаю.
Может кто-то подскажет более правильное решение?