I am trying to upload an image from customer product page (upload file option), the image is uploaded to system/upload folder and renamed with: filename + md5 hash string. So, for example I upload image.jpg, the file will be uploaded to system/upload/image.jpg.392da1267fbfa4be65f7859bb0b974d9.
Now I want to see that image uploaded by customer from admin page (I created a new module page), how can I resize and display the image file? I can get the file name from table oc_upload in database, but the phisical file is using modified name which has no extension, I cannot resize this file because it is located in system/upload folder and its extension is changed. The image resize tool can only resize images in image folder with some allowed extensions configured in Settings page.
Any idea how to display images uploaded by customer? Do I need to copy the renamed uploaded file to image folder using its original name and then resize and display it? I appreciate any of your ideas. Thank you.
Just got the solution by copying the resize() method in admin/model/tool/image.php to my controller and modify it to resize image from system/upload folder.
private function resizeImageUpload($old_filename, $width, $height, $new_filename = '') {
$extension_arr = array('jpeg', 'jpg', 'png', 'gif');
$old_image = $old_filename;
if (!empty($new_filename)) {
$extension = pathinfo($new_filename, PATHINFO_EXTENSION);
$new_image = 'cache/system/upload/' . utf8_substr($new_filename, 0, utf8_strrpos($new_filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;
} else {
$extension = pathinfo($old_filename, PATHINFO_EXTENSION);
$new_image = 'cache/system/upload/' . utf8_substr($old_filename, 0, utf8_strrpos($old_filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;
}
if (!in_array($extension, $extension_arr)) return '';
if (!is_file(DIR_IMAGE . $new_image) || (filectime(DIR_UPLOAD . $old_image) > filectime(DIR_IMAGE . $new_image))) {
$path = '';
$directories = explode('/', dirname(str_replace('../', '', $new_image)));
foreach ($directories as $directory) {
$path = $path . '/' . $directory;
if (!is_dir(DIR_IMAGE . $path)) {
#mkdir(DIR_IMAGE . $path, 0777);
}
}
list($width_orig, $height_orig) = getimagesize(DIR_UPLOAD . $old_image);
if ($width_orig != $width || $height_orig != $height) {
$image = new Image(DIR_UPLOAD . $old_image);
$image->resize($width, $height);
$image->save(DIR_IMAGE . $new_image);
} else {
$success = copy(DIR_UPLOAD . $old_image, DIR_IMAGE . $new_image);
}
}
if ($this->request->server['HTTPS']) {
return HTTPS_CATALOG . 'image/' . $new_image;
} else {
return HTTP_CATALOG . 'image/' . $new_image;
}
}
Related
I want to resize image beofre upload it into database. I store image in this way
if ($image) {
$image_name = hexdec(uniqid());
$ext = strtolower($image->getClientOriginalExtension());
$image_full_name = $image_name . '.' . $ext;
$upload_path = 'foods/';
$upload_path1 = 'images/foods/';
$image_url = $upload_path . $image_full_name;
$success = $image->move($upload_path1, $image_full_name);
}
Now, I want to resize image before uploading it. I try to use intervation package, I try this
if ($image) {
$image_name = hexdec(uniqid());
$ext = strtolower($image->getClientOriginalExtension());
$image_full_name = $image_name . '.' . $ext;
$upload_path = 'foods/';
$upload_path1 = 'images/foods/';
$image_url = $upload_path . $image_full_name;
$img = Image::make($image)->resize(300, 200);
$img->save($upload_path1, 60, $image_full_name);
}
and I got this error
"Encoding format (1691942233153059.jpg) is not supported."
What is the best way to resize image before upload and also set image with unique name?
1- use getRealPath() inside Image::make()
2- save image in particular path.
if($request->hasFile('image')) {
$image = $request->file('image');
$file_name = $image->getClientOriginalName();
$image_resize = Image::make($image->getRealPath());
$image_resize->resize(300, 100);
$image_resize->save(public_path('img/' .$file_name));
}
I am trying to upload the binary image to the storage using Laravel Intervention Image but it gives me error as Unable to init from given binary data.
I am using this code
$image = base64_decode($postData['image']);
$destinationPath = storage_path($destinationFolder);
if (!File::exists($destinationPath)) {
File::makeDirectory($destinationPath, 0777, true, true);
}
$filename = ($fileName != '') ? $fileName : $folderName . '_' . time() . '.jpg';
$imageResult = Image::make($image)->resize($imageWidth, $imageHeight, function ($constraint) {
$constraint->aspectRatio();
})->save($destinationPath . $filename, imageQuality($image));
if ($imageResult){
return '/image/' . $filename;
}
return false;
The binary image data is
data:image/webp;base64,UklGRlIFAABXRUJQVlA4IEYFAAAQHACdASpPAHkAPlEQlEojkdHMYDgFBLIAZqA25eJVGRUWLtSnk7iTzHecd0SXUx8+t+zLWt8WJpEWrTTvLe9y9CX9VSAw3YOVEdn4oGm0ZIrnQUIJ7VsI/r+aW0VOJeFoJylth8MmFQHlbPEklNUVbgyVJnINmgXnDbtgj9paOvkDYnVAdv2ErJONHxXyp2eyn7mB6vcVu9AfWuUtDlYxhQG1CEongtTYR0U4jQIbXYTTzN/3G5cAEd0FmVN272q9XHtEAeWzrMHHsZ7YPtpmppalPe8BvhnrwSA+ctaG9iQ6b7pEVBVPAAD+/uy97OjEKfy53WiZp+vshoaLbmP0cVKb4k6hnKsxJdcP+CgaRYQkOjb4FGLJO55Q/c+afu5UzMOW3Tx4pq6YezZD8PSoPz4zk6GAAEL9XDf3c3RwQKG1r2lWKnBonjqCV8/oU/xr4Gv59yLHfFPfneUb6BrG9yoc40NAk+xGkgtKGsIDDanX+uuhaKWGntbgweNVylzqaIqZrCMYGgfkbTo+yPQ0JgHev/+hCnqRe4cEi4VfveeAi+7wBLg2w4tZOj0d7O7gJM6Zj9uaLB6l/3xyvdHwzThmi8na5GMB/v+Y7YAIYCGOV62mQ6XSrBMQHKUoPvIVwUeHVkJFWnUCt6S7yOMa9RkZxe8//Bphx4NhJ/dXc3x7HQESKmLUu8nofAJKiyg7v46s90BuZWpbVYysGbdPR9Shc9nqgYoEazEu+ik00Mr+VLM+/lS8aCumf4on0FkZ/Dn4SGJSU8pc02nt7ncW0e0XwVKx9DE8RfVww8GDv33+1ib7qkv1gsaGBdn60MpW2PzyI1ZDReCh25f4z4RsG91nEpjDr4MmVOaW40nXwNnAfuYawSt+b05IQx9GGw0seGFDJ4hbb+tTatszMiOSjhQ9HsO19t/hVFojVco/cKoG9XUSorPouBOqFqDrciO3+BVFFo5l5JW3Ka0ZtamSCrzt1AUzOndTy82imvJ+NZ1D+iXF92d3XITYsveniLVxEjp+pQIp8pXJ3p3DuFQPxzuQ44E3xWcPimJ7wuJnIrIm8jyFaM4AHJ1OBc/BG+0iP5zUHWl36LGK5VpoDkw34T+sQs9s0gOpG+tNM0uaKmwmONjo2L0tFqaiC4V4aHLO3JqptxoxSjn3BQVG5x/ga/7bz/hqeycRIoGrTuIqKAdCVVrYLEgr39NID+sKzK6BYzr8j9r3JMPZ3+2T09lEwe0u+S7B4wI3rlSz5L3DZspwtfkWcGtZpUCRqgOiWnFnpdIlor1+zvQK2ksDUpf0UbyRW/c59RQIfouYA6cKJUxsQzPPL5yvuIprzjZLY2HRkKFbemgUbPH1nxw28qtf2EixENC3uGus24PjYW8Jz/G5kZ2ioG2UXp00Aru2Z1Hk4AB0G2RPAzhdp1WQEnbqXb5a35eSSv5SGUYQbRDbaQNnyeODfb80a056/Cz7wmTtn5xvWT1UhTg7J/9J/4cCoBkweCOc1exDC4bBpdmwNyB82TfMOL+HcsO/UR1EDkEBdEl2HLQOA2mSntOQ3dTgMQX/71+MtpetptbThjL/fnRMMfVnpovAe2jd4SXx+s8fMNJXcEkO9ZKxIWFH0EwLvzIp8SPc5z+AzLEwfn4aBvVL835u4BsodI+usLpWnlC7Xdz6JMVxKivRpoWgrcIsAF91564sRuvXd3rwozLc0Fb/at7P3B3B5Jc7wPXQ/CH5Y6Thjn0W8zAWnd3VwwB3ZS/Uv/ubq8H7W9He6fvg6Ib/101yfwV8xpmLHwZGmXWgAAAAAAA=
In addition to using RAUSHAN KUMAR's answer, you can also use InterventionImage like this
Route::get('test', function() {
$image = 'data:image/webp;base64,UklGRlIFAABXRUJQVlA4IEYFAAAQHACdASpPAHkAPlEQlEojkdHMYDgFBLIAZqA25eJVGRUWLtSnk7iTzHecd0SXUx8+t+zLWt8WJpEWrTTvLe9y9CX9VSAw3YOVEdn4oGm0ZIrnQUIJ7VsI/r+aW0VOJeFoJylth8MmFQHlbPEklNUVbgyVJnINmgXnDbtgj9paOvkDYnVAdv2ErJONHxXyp2eyn7mB6vcVu9AfWuUtDlYxhQG1CEongtTYR0U4jQIbXYTTzN/3G5cAEd0FmVN272q9XHtEAeWzrMHHsZ7YPtpmppalPe8BvhnrwSA+ctaG9iQ6b7pEVBVPAAD+/uy97OjEKfy53WiZp+vshoaLbmP0cVKb4k6hnKsxJdcP+CgaRYQkOjb4FGLJO55Q/c+afu5UzMOW3Tx4pq6YezZD8PSoPz4zk6GAAEL9XDf3c3RwQKG1r2lWKnBonjqCV8/oU/xr4Gv59yLHfFPfneUb6BrG9yoc40NAk+xGkgtKGsIDDanX+uuhaKWGntbgweNVylzqaIqZrCMYGgfkbTo+yPQ0JgHev/+hCnqRe4cEi4VfveeAi+7wBLg2w4tZOj0d7O7gJM6Zj9uaLB6l/3xyvdHwzThmi8na5GMB/v+Y7YAIYCGOV62mQ6XSrBMQHKUoPvIVwUeHVkJFWnUCt6S7yOMa9RkZxe8//Bphx4NhJ/dXc3x7HQESKmLUu8nofAJKiyg7v46s90BuZWpbVYysGbdPR9Shc9nqgYoEazEu+ik00Mr+VLM+/lS8aCumf4on0FkZ/Dn4SGJSU8pc02nt7ncW0e0XwVKx9DE8RfVww8GDv33+1ib7qkv1gsaGBdn60MpW2PzyI1ZDReCh25f4z4RsG91nEpjDr4MmVOaW40nXwNnAfuYawSt+b05IQx9GGw0seGFDJ4hbb+tTatszMiOSjhQ9HsO19t/hVFojVco/cKoG9XUSorPouBOqFqDrciO3+BVFFo5l5JW3Ka0ZtamSCrzt1AUzOndTy82imvJ+NZ1D+iXF92d3XITYsveniLVxEjp+pQIp8pXJ3p3DuFQPxzuQ44E3xWcPimJ7wuJnIrIm8jyFaM4AHJ1OBc/BG+0iP5zUHWl36LGK5VpoDkw34T+sQs9s0gOpG+tNM0uaKmwmONjo2L0tFqaiC4V4aHLO3JqptxoxSjn3BQVG5x/ga/7bz/hqeycRIoGrTuIqKAdCVVrYLEgr39NID+sKzK6BYzr8j9r3JMPZ3+2T09lEwe0u+S7B4wI3rlSz5L3DZspwtfkWcGtZpUCRqgOiWnFnpdIlor1+zvQK2ksDUpf0UbyRW/c59RQIfouYA6cKJUxsQzPPL5yvuIprzjZLY2HRkKFbemgUbPH1nxw28qtf2EixENC3uGus24PjYW8Jz/G5kZ2ioG2UXp00Aru2Z1Hk4AB0G2RPAzhdp1WQEnbqXb5a35eSSv5SGUYQbRDbaQNnyeODfb80a056/Cz7wmTtn5xvWT1UhTg7J/9J/4cCoBkweCOc1exDC4bBpdmwNyB82TfMOL+HcsO/UR1EDkEBdEl2HLQOA2mSntOQ3dTgMQX/71+MtpetptbThjL/fnRMMfVnpovAe2jd4SXx+s8fMNJXcEkO9ZKxIWFH0EwLvzIp8SPc5z+AzLEwfn4aBvVL835u4BsodI+usLpWnlC7Xdz6JMVxKivRpoWgrcIsAF91564sRuvXd3rwozLc0Fb/at7P3B3B5Jc7wPXQ/CH5Y6Thjn0W8zAWnd3VwwB3ZS/Uv/ubq8H7W9He6fvg6Ib/101yfwV8xpmLHwZGmXWgAAAAAAA=';
$image = imagecreatefromwebp($image);
return Image::make($image)->resize(100)->response();
});
By calling the route 'test' you will see the image.
As this is a webp type image, so i need to use imagecreatefromwebp() to upload the images. I have written this piece of code for that.
$destinationFolder = 'uploads/';
$folderName = $folder . '_' . $adId;
if ($folderName != '') {
$folderNames = explode('_', $folderName);
$folderPath = implode('/', array_map(function ($value) {
return $value;
}, $folderNames));
$destinationFolder .= $folderPath . '/';
}
$destinationPath = storage_path($destinationFolder);
if (!\File::exists($destinationPath)) \File::makeDirectory($destinationPath, 0777, true, true);
$fileName = $folder . '_' . $adId . '_0_' . time() . '.jpg';
$fileName = ($fileName != '') ? $fileName : $folderName . '_' . time() . '.jpg';
$im = imagecreatefromwebp($data);
$imageResult = imagejpeg($im, $destinationPath . $fileName, 100);
imagedestroy($im);
if ($imageResult) return '/image/' . $fileName;
return "/DefaultImage.jpg";
If you still wants to use your code, you can remove data:image/webp;base64, then use base64_decode after you remove it.
$image=explode(",",$postData['image']);
$image=base64_decode($image['1']);
Image Intervention can decode your base64 image you can try this
$imageResult = Image::make($postData['image'])->resize($imageWidth, $imageHeight, function ($constraint) {
$constraint->aspectRatio();
I don't know how delete exif data from uploaded pictures. Here is my function:
$uploadedFiles = $request->getUploadedFiles();
if ($uploadedFiles && $id) {
$usersPath = '/collections/' . date('Y/m') . '/' . $id .'/';
$uploadFolder = realpath(BASE_PATH . '/uploads');
$uploadFolder .= $usersPath;
$newName = md5(time() . serialize($uploadedFiles));
$fileExtension = strtolower($uploadedFiles[0]->getExtension());
$sourceImgPath = $uploadFolder .$newName .'.' .$fileExtension;
if (!file_exists($uploadFolder)) {
mkdir($uploadFolder, 0777, true );
}
if(in_array($fileExtension, array('jpg', 'jpeg', 'png', 'gif'))){
if ($uploadedFiles[0]->moveTo($sourceImgPath)) {
$info = pathinfo($sourceImgPath);
if ($info) {
$file_path = $usersPath . $info['filename'] . '.' . $fileExtension;
(new \Rapid\Storage\CollectionsStorage())->editImage($id, $file_path);
} else {
$session->set('msg_error', $this->translate->_('There was an unexpected error with uploading the file'));
}
}
}
} else {
$session->set('msg_error', $this->translate->_('Invalid file type'));
}
This piece of code should delete all EXIF information in JPEG
$img = new Imagick($uploadfile);
$img->stripImage();
$img->writeImage($uploadfile);
It depends on the graphics libraries you have access to.
If you have access to imagick, you can use stripImage().
If you have only access to gd, you need to create a new image from the upload and save that instead, see for example PHP remove exif data from images for a jpg image.
i'm a php newbie and still trying to get to grips with the language.
I need to crop the images i'm uploading into squares using php. Here is my current code to upload the images (which is working fine):
<?php
error_reporting(0);
$sUploadDirectory = 'uploads/';
$aFileTypesAllowed = array('image/jpeg', 'image/gif', 'image/png');
$aExtensionsAllowed = array('gif', 'png', 'jpg', 'jpeg');
$aJSExtensions = 'new Array("gif", "png", "jpg", "jpeg")';
$bImagesOnly = true;
$iMaxFileSize = 102400;
if(isset($_REQUEST['upload']) && $_REQUEST['upload'] == 'true') {
$bSuccess = true;
$sErrorMsg = 'Your image was successfully uploaded.';
if (array_search($_FILES['myFile']['type'], $aFileTypesAllowed) === false ||
!in_array(end(explode('.', strtolower($_FILES['myFile']['name']))), $aExtensionsAllowed)) {
$bSuccess = false;
$sErrorMsg = 'Invalid file format. Acceptable formats are: ' . implode(', ', $aFileTypesAllowed);
} else if ($bImagesOnly && !(getimagesize($_FILES['myFile']['tmp_name']))) {
$bSuccess = false;
$sErrorMsg = 'The image is invalid or corrupt. Please select another.';
} else if ($_FILES['myFile']['size'] > $iMaxFileSize) {
$bSuccess = false;
$sErrorMsg = 'The file size of your property photo must not exceed ' . ($iMaxFileSize / 1024) . 'Kb. Please try again.';
} else {
if (!#move_uploaded_file($_FILES['myFile']['tmp_name'], $sUploadDirectory . $_FILES['myFile']['name'])) {
$bSuccess = false;
$sErrorMsg = 'An unexpected error occurred while saving your uploaded photo. Please try again.';
}
}
print '<html>' .
'<head>' .
'<script type="text/javascript">' .
'parent.uploadResult(' . ($bSuccess ? 'true' : 'false') . ', \'' . $sErrorMsg . '\', \'' . $sUploadDirectory . $_FILES['myFile']['name'] . '\');' .
'</script>' .
'</head>' .
'<body></body>' .
'</html>';
die();
}
?>
I've tried adding this after the last argument checking the file size, it works on desktop, however doesn't on mobile when you use the 'take photo' option, which is an essential option in my design:
//*********************
//crop image into sqaure
//**********************
// Original image
$filename = $_FILES['myFile']['tmp_name'];
// Get dimensions of the original image
list($current_width, $current_height) = getimagesize($filename);
// The x and y coordinates on the original image where we
// will begin cropping the image
$left = $current_width / 2 - 320;
$top = $current_height / 2 - 320;
// This will be the final size of the image (e.g. how many pixels
// left and down we will be going)
$crop_width = 640;
$crop_height = 640;
// Resample the image
$canvas = imagecreatetruecolor($crop_width, $crop_height);
$current_image = imagecreatefromjpeg($filename);
imagecopy($canvas, $current_image, 0, 0, $left, $top, $current_width,
$current_height);
imagejpeg($canvas, $filename, 100);
//*********************
//crop image into sqaure
//**********************
I'm wondering if I have coded this poorly causing it not to work,
If any one could help i'd be very grateful! Thanks!
so this is the code that works on desktop but not on mobile, the first html entry above works on mobile and desktop.
<?php
error_reporting(0);
$sUploadDirectory = 'uploads/';
$aFileTypesAllowed = array('image/jpeg', 'image/gif', 'image/png');
$aExtensionsAllowed = array('gif', 'png', 'jpg', 'jpeg');
$aJSExtensions = 'new Array("gif", "png", "jpg", "jpeg")';
$bImagesOnly = true;
$iMaxFileSize = 4194304;
if(isset($_REQUEST['upload']) && $_REQUEST['upload'] == 'true') {
$temp = explode(".", $_FILES["myFile"]["name"]);
$newfilename = round(microtime(true)) . '.' . end($temp);
$bSuccess = true;
$sErrorMsg = 'Thanks! Your image was successfully uploaded.';
if (array_search($_FILES['myFile']['type'], $aFileTypesAllowed) === false ||
!in_array(end(explode('.', strtolower($_FILES['myFile']['name']))), $aExtensionsAllowed)) {
$bSuccess = false;
$sErrorMsg = 'Invalid file format. Acceptable formats are: ' . implode(', ', $aFileTypesAllowed);
} else if ($bImagesOnly && !(getimagesize($_FILES['myFile']['tmp_name']))) {
$bSuccess = false;
$sErrorMsg = 'The image is invalid or corrupt. Please select another.';
} else if ($_FILES['myFile']['size'] > $iMaxFileSize) {
$bSuccess = false;
$sErrorMsg = 'The file size of your property photo must not exceed ' . ($iMaxFileSize / 1024) . 'Kb. Please try again.';
} else {
$filename = $_FILES['myFile']['tmp_name'];
// Get dimensions of the original image
list($current_width, $current_height) = getimagesize($filename);
// The x and y coordinates on the original image where we
// will begin cropping the image
$left = $current_width / 2 - ($current_width / 2);
$top = $current_height / 2 - ($current_width / 2);
// This will be the final size of the image (e.g. how many pixels
// left and down we will be going)
$crop_width = $current_width;
$crop_height = $current_width;
// Resample the image
$canvas = imagecreatetruecolor($crop_width, $crop_height);
$current_image = imagecreatefromjpeg($filename);
imagecopy($canvas, $current_image, 0, 0, $left, $top, $current_width, $current_height);
imagejpeg($canvas, $filename, 100);
if (!#move_uploaded_file($_FILES['myFile']['tmp_name'], $sUploadDirectory . $newfilename)) {
$bSuccess = false;
$sErrorMsg = 'An unexpected error occurred while saving your uploaded photo. Please try again.';
}
}
print '<html>' .
'<head>' .
'<script type="text/javascript">' .
'parent.uploadResult(' . ($bSuccess ? 'true' : 'false') . ', \'' . $sErrorMsg . '\', \'' . $sUploadDirectory . $newfilename . '\');' .
'</script>' .
'</head>' .
'<body></body>' .
'</html>';
die();
}
?>
You can use the native PHP function imagecrop.
The following code will cut anything that is not a square (if the aspect ratio is greater or less than 1).
Of course, this is a little bit thrown together and could absolutely be a little bit more optimized, but it will do for now.
// Uploaded file temporary location
$fileTemp = $_FILES["myFile"]["tmp_name"];
// Validate the file extension.
$fileExt = strtolower(end(explode(".", $_FILES["myFile"]["name"])));
switch($fileExt){
case "jpg":
case "jpeg":
$image = imagecreatefromjpeg($fileTemp);
break;
case "png":
$image = imagecreatefrompng($fileTemp);
break;
case "gif":
$image = imagecreatefromgif($fileTemp);
break;
default:
$errorMessage = "Invalid file format. Acceptable formats are: " . implode(", ", $validFileTypes);
}
// Retrieve image resolution and aspect ratio.
list($width, $height) = getimagesize($fileTemp);
$aspectRatio = $width / $height;
// Crop the image based on the provided aspect ratio.
if($aspectRatio !== 1){
$portrait = $aspectRatio < 1;
// This will check if the image is portrait or landscape and crop it square accordingly.
$image = imagecrop($image, [
"x" => $portrait ? 0 : (($width - $height) / 2),
"y" => $portrait ? (($width - $height) / 2) : 0,
"width" => $portrait ? $width : $height,
"height" => $portrait ? $width : $height
]);
}
// Constrain max file size.
$maxFileSize = 102400;
if($_FILES["myFile"]["size"] >= $maxFileSize){
$errorMessage = "The file size of your property photo must not exceed " . ($maxFileSize / 1024) . "Kb. Please try again.";
}
// Send to CDN...
if(empty($errorMessage)){
}
I have an existing script that I'm trying to modify to rather than select a file from PC to upload but to add in a URL of the image in question. I've been trying to use the get file function and I can work it to grab the file from the url and upload to the server but I want it to capture the file and pass onto the remainder of the existing script to complete the resizing etc.
See below....
$thumburl = "http://url of image file";
$thumb = file_get_contents($thumburl);
$space = $_POST['thumb']['size'];
move_uploaded_file($_POST['thumb']['tmp_name'], $config['TMP_DIR']. '/thumbs/' .$thumb);
#chmod($config['TMP_DIR']. '/' .$thumb, 0644);
$ff = $config['TMP_DIR']. '/thumbs/' .$thumb;
$fd = $config['TMB_DIR']. '/' .$thid. '.jpg';
createThumb($ff, $fd, $config['img_max_width'], $config['img_max_height']);
copy($fd, $config['TMB_DIR']. '/1_' .$thid. '.jpg');
copy($fd, $config['TMB_DIR']. '/2_' .$thid. '.jpg');
copy($fd, $config['TMB_DIR']. '/3_' .$thid. '.jpg');
#unlink($config['TMP_DIR']. '/thumbs/' .$thumb);
change
$thumburl = "http://url of image file";
$thumb = file_get_contents($thumburl);
$space = $_POST['thumb']['size'];
move_uploaded_file($_POST['thumb']['tmp_name'], $config['TMP_DIR']. '/thumbs/' .$thumb);
#chmod($config['TMP_DIR']. '/' .$thumb, 0644);
to:
$thumburl = "http://url of image file";
$thumbContent = file_get_contents($thumburl);
$thumb = tempnam($config['TMP_DIR'] . '/thumbs/', 'FOO');
file_put_contents($config['TMP_DIR'] . '/thumbs/' . $thumb, $thumbContent);
#chmod($config['TMP_DIR'] . '/thumbs/' . $thumb, 0644);