نمایش نتایج 1 تا 5 از 5

نام تاپیک: مشکل با آپلود عکس

  1. #1

    Unhappy مشکل با آپلود عکس

    سلام دوستان.
    برای آپلود عکس از کد زیر اسفاده میکنم
    فقط عکس های با پسوند png رو آپلود میکنه. و برای بقیه عکس ها خطای format رو برمیگردانه
    نظرتون درمورد این تابع چیه؟ چیزی اظافه یا کم داره؟؟

    <?php
    function image_check($file){
    $result['flag'] = false;
    $result['error'] = '';
    $result['target_dir'] = 'uploads/';
    $target_file = $result['target_dir'] . basename($file['name']);
    $result['pic_type'] = strtolower(pathinfo($target_file,PATHINFO_EXTENSIO N));
    if($file['error'] != 0){
    switch($file['error']){
    case 4:
    $result['error'] = 'unselected';
    return $result;
    case 1:
    case 2:
    $result['error'] = 'size';
    return $result;
    default:
    $result['error'] = 'unknown';
    return $result;
    }
    }else if($file['size'] > 524288){ /* 512KB */
    $result['error'] = 'size';
    return $result;
    }else if(!extension_loaded('fileinfo')){
    $result['error'] = 'fileinfo';
    return $result;
    }else if(!extension_loaded('gd') && !extension_loaded('gd2')){
    $result['error'] = 'gd';
    return $result;
    }else{
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mimetype = finfo_file($finfo, $file['tmp_name']);
    finfo_close($finfo);
    if(!getimagesize($file['tmp_name']) || !in_array($result['pic_type'], array('png','gif','bmp','jpg','jpeg')) || !in_array($mimetype, array('image/png','image/gif','image/bmp','image/jpeg'))){
    $result['error'] = 'format';
    return $result;
    }else{
    $res = false;
    switch($file['error']){
    case 'png' :
    $res = imagecreatefrompng($file['tmp_name']);
    break;
    case 'gif' :
    $res = imagecreatefromgif($file['tmp_name']);
    break;
    case 'bmp' :
    $res = imagecreatefromwbmp($file['tmp_name']);
    break;
    case 'jpg' :
    case 'jpeg':
    $res = imagecreatefromjpeg($file['tmp_name']);
    break;
    }
    if(!$res){
    imagedestroy($res);
    $result['error'] = 'format';
    return $result;
    }else imagedestroy($res);
    }
    }
    $result['flag'] = true;
    return $result;
    }
    ?>

    تست کردم خروجی توابع imagecreatefromX ریسورس (Resource) بود ولی تو یه وبلاگ فارسی ک نمونه کد گذاشته بود اینطوری استفاده کرده بود ک خروجی تابع انگار bool هستش.
    نوع
    Resource چیه دقیقا؟؟

  2. #2

    نقل قول: مشکل با آپلود عکس

    سلام

    متغیر ریسورس، ارجاع به یک منبع خارجی است مانند زمانی که قصد دارید اطلاعاتی را از دیتابیس بخوانید php مستقیم به دیتای درون دیتابیس دسترسی ندارد بلکه با منبع خارجی (مثلا دیتابیس Mysql) ارتباط برقرار می کند و درخواست خود را ارسال می کند. یا حتی زمانی که قصد دارید محتوای فایلی را بخوانید خروجی دستور fopen از نوع ریسورس می باشد. در اینجا نیز دستور imagecreatefromjpeg از کتابخانه GD استفاده می کند که یک منبع بیرونی است.

    اینکه چرا برای برخی تصاویر خطای فرمت میدهد باید دیباگ کنید. خطای فرمت مربوط به شرطهای درج شده در خط ۳۴ و ۵۴ می باشد بنابراین شرط ها را بصورت مجزا با استفاده از دستور var_dump نمایش دهید تا مشخص شود دقیقا مشکل کجاست. مثلا برای شرط خط ۳۴ کافیست این دستورات را به کد خود اضافه کنید و بعد با تصویری که آپلود نمیشود تست کنید:


    var_dump( array(
    $file['tmp_name'],

    "getimagesize:",
    getimagesize($file['tmp_name']) ,

    "pic_type:",
    $result['pic_type'],
    !in_array($result['pic_type'], array('png','gif','bmp','jpg','jpeg')) ,

    "mimetype:",
    $mimetype,
    !in_array($mimetype, array('image/png','image/gif','image/bmp','image/jpeg')))
    );


  3. #3

    نقل قول: مشکل با آپلود عکس

    نقل قول نوشته شده توسط ali_sed مشاهده تاپیک
    سلام

    متغیر ریسورس، ارجاع به یک منبع خارجی است مانند زمانی که قصد دارید اطلاعاتی را از دیتابیس بخوانید php مستقیم به دیتای درون دیتابیس دسترسی ندارد بلکه با منبع خارجی (مثلا دیتابیس Mysql) ارتباط برقرار می کند و درخواست خود را ارسال می کند. یا حتی زمانی که قصد دارید محتوای فایلی را بخوانید خروجی دستور fopen از نوع ریسورس می باشد. در اینجا نیز دستور imagecreatefromjpeg از کتابخانه GD استفاده می کند که یک منبع بیرونی است.

    اینکه چرا برای برخی تصاویر خطای فرمت میدهد باید دیباگ کنید. خطای فرمت مربوط به شرطهای درج شده در خط ۳۴ و ۵۴ می باشد بنابراین شرط ها را بصورت مجزا با استفاده از دستور var_dump نمایش دهید تا مشخص شود دقیقا مشکل کجاست. مثلا برای شرط خط ۳۴ کافیست این دستورات را به کد خود اضافه کنید و بعد با تصویری که آپلود نمیشود تست کنید:


    var_dump( array(
    $file['tmp_name'],

    "getimagesize:",
    getimagesize($file['tmp_name']) ,

    "pic_type:",
    $result['pic_type'],
    !in_array($result['pic_type'], array('png','gif','bmp','jpg','jpeg')) ,

    "mimetype:",
    $mimetype,
    !in_array($mimetype, array('image/png','image/gif','image/bmp','image/jpeg')))
    );

    ممنون از راهنمایی تون.
    بیشتر میخواستم بدونم ک کد ها خطای منطقی داره یا نه.
    عکس ها رو با paint xp ایجاد کرده بودم. ک فقط عکس ایجادی با پسوند png اون رو آپلود میکرد.
    توابع imagecreatefromjpeg و ... خروجیشون به gd بولین هست آیا؟؟

    دکمه تشکر کجا رفته؟؟

  4. #4

    نقل قول: مشکل با آپلود عکس

    عکسی که از اول هم پسوندش bmp یا jpg باشه آپلود نمیکنه با این کد
    خطای format میده !!
    فقط عکس های png آپلود میشن

  5. #5

    نقل قول: مشکل با آپلود عکس

    نقل قول نوشته شده توسط milad_d993 مشاهده تاپیک
    عکسی که از اول هم پسوندش bmp یا jpg باشه آپلود نمیکنه با این کد
    خطای format میده !!
    فقط عکس های png آپلود میشن
    سلام

    شما لطفا خروجی کدهایی که توضیح دادم را روی عکسی که آپلود نمی شود ارسال کنید تا ببینیم مشکل کجاست.
    ممکن است پلاگین خاصی روی سرور شما نصب نباشد و برنامه نمیتواند فرمت ها را به درستی شناسایی کنید مثلا FILEINFO_MIME_TYPE ممکن است درست عمل نکند.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •