Добрый день.
Необходимо по cron-у обрабатывать загруженные изображения.
Создал такой консольный контролер.
class ImagesController extends Controller
{
public function actionResize()
{
Yii::setAlias('@web', dirname(__DIR__) . '/web');
$path = Yii::getAlias('@web') . '/uploads';
$images = $this->scanDir($path); // рекурсивный обход директорий
try{
foreach ($images as $image){
$img = Image::getImagine()->open($path . '/' . $image);
//echo $path . '/' . $image . PHP_EOL;
if($img->getSize()->getWidth() > 1000){
Image::resize($path . '/' . $image, 1000, null)->save($path. '/' . $image, ['jpeg_quality' => 80]);
echo 'Done!' . PHP_EOL;
}
}
}
catch (Exception $exception){
Yii::getLogger()->log($exception, Logger::LEVEL_WARNING);
Yii::getLogger()->log($exception, Logger::LEVEL_ERROR);
echo 'Error' . PHP_EOL;
}
}
}
При попытке запустить консольную команду происходит ошибка
ImagickException: unable to open image `/home/slonik/localhost/www/memory/web/uploads/country_1/region_5/city_5/JPJvU8GlmulD-KCHdlwBKSHHcVHhBWpk.jpg': Permission denied @ error/blob.c/OpenBlob/2712 in /home/slonik/localhost/www/memory/vendor/imagine/imagine/lib/Imagine/Imagick/Image.php:287
Если перенести это действие в web контроллер или изменить права на директории 0777, то всё работает отлично. Изображения обрабатываются.
Я понимаю, что проблема в правах доступа, но как решить эту проблему не могу сообразить.
Загрузил на рабочий сервер консольный контроллер - работает без ошибок. Вот только на localhost проблема.
В директории uploads несколько директорий, которые создаются при загрузке изображений. Директории создаются при помощи mkdir(), но параметр mode никак не влияет на права, изменить я их не могу. Просто не меняются, без всяких ошибок.
if(!file_exists($p)){
mkdir($p, 0777, true);
};
Права доступа к директориям
drwxrwxrwx 1 slonik slonik 18 Сен 26 18:05 uploads
drwxr-xr-x 1 www-data www-data 16 Сен 26 18:05 country_1
drwxr-xr-x 1 www-data www-data 12 Сен 26 18:05 region_5
drwxr-xr-x 1 www-data www-data 20 Сен 26 18:05 city_5
Права к загруженным файлам
-rw-r--r-- 1 www-data www-data 845155 Сен 26 18:05 1g62QFwjgt67kwUcMEV3DcAViJHlAmUN.jpg
-rw-r--r-- 1 www-data www-data 878004 Сен 26 18:05 4HSV4UdL3gWFC5UKNmcYSgDJmYQODj6V.jpg
-rw-r--r-- 1 www-data www-data 824929 Сен 26 18:05 C9asvh5KiEvpOvbkh8SXXyVLzzCQyenr.jpg
Сравнил эти права доступа с правами на сервере - всё одинаково.
Как решить эту проблему для localhost?