آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

تابعی امن برای آپلود عکس بهمراه ساخت Thumbnail

محسن موحد  9 سال پیش  5 سال پیش
+13 0

سلام.

name : نامی که در تگ اینپوت (با تایپ file) , مشخص کرده ایم.
thumb : اگر true باشد , تصویر بند انگشتی (thumbnail) هم میسازد.
max_size : حداکثر سایز مجاز برای یک تصویر
width , height : تصویر با این طول و ارتفاع آپلود می شود.
T_width , T_height : طول و ارتفاع برای تصویر بند انگشتی.

 

function imageUpload($name, $thumb=false, $max_size=5242880, $height=null, $width=null, $T_height=100, $T_width=100)
{
    /*if (file_exists($_FILES[$name]['tmp_name']) && $_FILES[$name]['size'] > 0)
    {
        return false;
    }*/
    if(!isset($_FILES[$name]))
    {
        return false;
    }
// mimetypes $allowedTypes = array('image/gif', 'image/jpeg', 'image/png', 'image/wbmp'); $image = &$_FILES[$name]; if ($image['error'] == 0 && in_array($image['type'], $allowedTypes) && $image['size'] <= $max_size) { $in = ''; switch ($image['type']) { case 'image/gif': $in = 'imagecreatefromgif'; break; case 'image/jpeg': $in = 'imagecreatefromjpeg'; break; case 'image/png': $in = 'imagecreatefrompng'; break; case 'image/wbmp': $in = 'imagecreatefromwbmp'; break;
default: return false; } $src = $in($image['tmp_name']); $height = ($height == null || $height <= 0 ? imagesy($src) : $height); $width = ($width == null || $width <= 0 ? imagesx($src) : $width); $dst = imagecreatetruecolor($width, $height); imagecopyresized($dst, $src, 0, 0, 0, 0, $width, $height, imagesx($src), imagesy($src));
$fileName = '';
// file name is created do { $fileName = makeHash(mt_rand(0, mt_getrandmax()) . microtime(true), $image['tmp_name']); } while(file_exists('/image/' . $fileName . '.jpg') || ($thumb && file_exists('/thumb/' . $fileName . '.jpg')));

// creates a JPEG file from the given $dst and Save the image file. imagejpeg($dst, '/image/' . $fileName . '.jpg', 75);

//********* for thumbnail *********//
if ($thumb) { $dst = imagecreatetruecolor($T_width, $T_height); imagecopyresized($dst, $src, 0, 0, 0, 0, $T_width, $T_height, imagesx($src), imagesy($src));

// creates a JPEG file from the given $dst and Save the image file. imagejpeg($dst, '/thumb/' . $fileName . '.jpg', 75); }
imagedestroy($src); imagedestroy($dst);
// return file name return $fileName . '.jpg'; } }


 

در قسمت fileName از تابع makeHash استفاده کردیم:

function makeHash($value, $salt = '')
{
    for ($i = 0; $i < 1000; $i++)
    {
        $value = md5(PEPPER . $value . md5($salt));
    }
    return $value;
}

PEPPER : میتونید بعنوان یک ثابت و با مقدار دلخواهتون (ترکیبی از علامت ها) تعریفش کنید.

0 0
ببخشید. چه لزومی داره که fileName هش بشه؟ (9 سال پیش)
0 0
یه دلیلیش اینکه ممکنه یکی یه فایل php رو تغییر نام بده اخرش رو کنه jpg و دانلود کنه . اونوقت مفسر پی اچ پی همون فایل php رو اجرا میکنه. مثلا ممکنه یکی یه شل بنویسه تو فایلی به نام shell.php اخر سر اسمشو تغییر بده به shell.php.jpg که در این صورت پی اچ پی باز هم اون شل رو اجرا میکنه . سایت آشیانه هم تقریبا اینجوری هک شده بود توسط TBH . (9 سال پیش)
0 0
البته فک کنم دلایل بیشتری داشته باشه که من نمیدونم. چون اگه یه کد بنویسیم که sell.php.jpg رو به shell-php.jpg تغییر بده دیگه اجرا نمیشه.http://answers.uncomaster.com/question/303/ارور-کد-اپلود-عکس- این و ببینی نوشتم . یکم مشکل داشت اقا محسن هم کاملش کرد. (9 سال پیش)
0 0
در ادامه ی صحبت آقا رضا , دیگه اسم فایل بعد از تغییر در بعضی کاربرد ها قابل تشخیص نیست. (9 سال پیش)
0 0
دوستان بعد از Switch مقدار src باید چی باشه؟ واسه من یه همچین عبارتی رو چاپ میکنه Resource id #13 مشکل از کجاست؟ (6 سال پیش)
0 0
اسم تصویرو میشه برابر تایم استمپ قرار داد هیچوقت تکرار نمیشه (5 سال پیش)
0 0
من یک تایع نوشتم برای اینکار اگه خیلی کوتاه تره اگه مایل باشید کدشو بزارم براتون (5 سال پیش)
 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .