Создать миниатюру с php imagejpeg - ошибка при получении сообщения "не удалось открыть поток: отказано в доступе"

Я пытаюсь создать эскиз ранее загруженных изображений с помощью этой функции.

Исходные изображения загружаются в mysite/used_uploads, а миниатюры должны создаваться в mysite/used_uploads_thb.

Функция миниатюр запускается сразу после загрузки оригинала.

Я также изменил разрешения для каталога, как показано ниже, но проблема сохраняется.

chmod ("used_uploads_thb", 0777);

Каталоги следующие:

MySITE / used_uploads

MySite / used_uploads_thb

Это весь сценарий. Последний шаг - указанная выше ошибка.

<?php
$src = substr($filePath, 1);

//$src example: used_uploads/252-558ec2e5dc45c-alfa-romeo-giulia - 2.jpg
chmod("used_uploads_thb", 0777);

$dest = '/used_uploads_thb';
$desired_width="100";

function make_thumb($src, $dest, $desired_width) {

/* read the source image */    
    $source_image = imagecreatefromjpeg($src);

$width = imagesx($source_image);
$height = imagesy($source_image);
/* find the "desired height" of this thumbnail, relative to the desired width  */
$desired_height = floor($height * ($desired_width / $width));

/* create a new, "virtual" image */
$virtual_image = imagecreatetruecolor($desired_width, $desired_height);

/* copy source image at a resized size */
imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);

/* create the physical thumbnail image to its destination */
imagejpeg($virtual_image, $dest);
                  print_r(error_get_last());              
}

make_thumb($src, $dest, $desired_width);
?>

Это сообщение об ошибке:

Array
(
[type] => 2
[message] => imagejpeg(/used_uploads_thb): failed to open stream:    Permission denied
[file] => /Applications/MAMP/htdocs/SiteCar/used_thumbnail.php
[line] => 26
)

Я ценю вашу помощь.

2 ответа

Решение

Только для записи.

Проблема была с целевым путем для миниатюры. Мой оригинальный код имел только каталог. Я ошибочно предполагал, что имя будет таким же, как и исходный файл, и будет создано автоматически. Не так.

Итак, вот рабочий код: preg_replace существует только потому, что я помещаю миниатюры в отдельный каталог с исходным изображением.

<?php
$src = $new_name = $filePath;
$new_name = preg_replace('/used_uploads\/(.*)$/', '$1', $new_name);
$src = $_SERVER['DOCUMENT_ROOT'] . $src;
$dest = 'used_uploads_thb'. $new_name;
$desired_width="100";


function make_thumb($src, $dest, $desired_width) {

/* read the source image */    
    $source_image = imagecreatefromjpeg($src);

$width = imagesx($source_image);
$height = imagesy($source_image);
/* find the "desired height" of this thumbnail, relative to the desired width  */
$desired_height = floor($height * ($desired_width / $width));

/* create a new, "virtual" image */
$virtual_image = imagecreatetruecolor($desired_width, $desired_height);

/* copy source image at a resized size */
imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);

/* create the physical thumbnail image to its destination */

imagejpeg($virtual_image,$dest);
    //print_r(error_get_last());
}

 make_thumb($src, $dest, $desired_width);
?>

Убедитесь, что у вас обоих разрешений на доступ к каталогам установлено значение 0777, или если имя файла исходного изображения никогда не будет использовать пробел, если вы работаете в Linux, потому что вам нужно добавить escape-символ пробела '\' в каждом пробеле из вашего имени файла, убедитесь, что после загрузки вы переименовываете это что-то с помощью

$src = md5('252-558ec2e5dc45c-альфа-ромео-джулия - 2.jpg') . '.Jpg';

Другие вопросы по тегам