Reputation: 1523
I am trying to create thumbnail of previously uploaded images using this function.
Original images are uploaded to mysite/used_uploads and thumbnails should be created at mysite/used_uploads_thb.
The thumbnail function is triggered directly after upload of the original.
I have also changed permissions with the directory, as follows, but the problem persists.
chmod("used_uploads_thb", 0777);
The directories are as follows:
mysite/used_uploads
mysite/used_uploads_thb
This is the whole script. The last step is giving the above error.
<?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);
?>
This is the error message:
Array
(
[type] => 2
[message] => imagejpeg(/used_uploads_thb): failed to open stream: Permission denied
[file] => /Applications/MAMP/htdocs/SiteCar/used_thumbnail.php
[line] => 26
)
I appreciate your help.
Upvotes: 0
Views: 2867
Reputation: 1523
Just for the record.
The issue was with the destination path for the thumbnail. My original code had only the directory. I was wrongly assuming that the name would be the same as the original file and would be automatically created. Not so.
So here it is the working code: The preg_replace is there only because I am placing the thumbnails in a separate directory to the original image.
<?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);
?>
Upvotes: 1
Reputation: 19
Make sure you have your both directory permission is set to 0777 Or your source image filename never use space if you work on linux because you need to add escape char of space '\ ' on every space from your filename, make sure after upload you rename it to something using
$src = md5('252-558ec2e5dc45c-alfa-romeo-giulia - 2.jpg') . '.jpg';
Upvotes: 0