انجمن تخصصي برنامه نويسي - تالارگفتمان
تبلیغات
khorak
+ پاسخ به موضوع
نمایش نتایج: از شماره 1 تا 4 از مجموع 4
Like Tree1Likes
  • 1 Post By MspSoft

موضوع: اموزش ذخیره تصاویر در MySQL و نمایش آنها با PHP

  1. #1


    محل سکونت
    M.S.P Soft
    علایق
    برنامه نویسی
    زبان مورد علاقه:
    Win & Web Application
    ارسال ها
    1,307
    تشکر ها
    724
    تشکر شده 309 بار در 234 ارسال.

    اموزش ذخیره تصاویر در MySQL و نمایش آنها با PHP

    سلام

    در این آموزش چگونگی ذخیره تصاویر دودویی (باینری) در بانک اطلاعاتی و نمایش آنها در PHP را خواهید آموخت

    در این قسمت فقط ذخیره تصاویر را می آموزید، در آینده قسمت دوم آن که نمایش تصاویر است را خواهم گفت

    [B]چرا تصاویر را در بانک اطلاعاتی ذخیره کنیم؟[/B]
    ممکن است شما بخواهید در سایتتان بخشی برای ذخیره تصویر کاربر قرار دهید، یا فروشگاهی ایجاد میکنید که تعدادی فروشگاه در آن گسترش یافته باشند و بخواهید برای هر کدام یک لوگو قرار دهید یا تصاویر محصولات خود را در بانک اطلاعاتی داشته باشید.

    1. شما میتوانید با ذخیره در بانک اطلاعاتی امنیت بیشتری برای تصاویر و فایل های خود داشته باشید.
    2. متن نیز بر روی تصویرتان قرار دهید و آنها را به سادگی مدیریت کنید.
    3. فایل ها برای رکورد کاربر ذخیره خواهند شد، در نتیجه ارتباط مستقیم دارند و دسته بندی آسان انجام میشود

    [B]شما با تهیه یک نسخه پشتیبانی از بانک اطلاعاتی میتوانید تمام تصاویر را همراه داشته باشید[/B]

    [B]برای شرع کار ابتدا باید یک بانک اطلاعاتی ایجاد کنید[/B]

    نحوه ی اتصال به MySQL را میتوانید از اینجا مشاهده کنید

    بعد از اتصال به بانک اطلاعاتی نیاز به ایجاد جدول برای ذخیره تصاویر داریم

    کد PHP:
    CREATE TABLE `tblImages`
    (
    `
    imgIDint(11unsigned NOT NULL auto_increment,
    `
    imgTypevarchar(32NOT NULL default '',
    `
    imgImageBLOB NOT NULL,
    `
    imgSizevarchar(32NOT NULL default '',
    `
    imgDatedatetime NOT NULL default '0000-00-00 00:00:00',
    PRIMARY KEY (`imgID`)
    TYPE=MyISAM
    [B]معرفی:[/B]

    [B]int [/B]از نوع عددی

    [B]auto_increment [/B]ایجاد اتوماتیک ID

    [B]varchar [/B]از نوع کاراکتر

    [B]BLOB [/B]شیء بزرگ دودویی است که در سریعترین زمان ذخیره سازی میکند و خروجی میگیرد.

    [B]از انواع BLOB میتوان به

    [/B]
    کد PHP:
    BLOB
    TINYBLOB
    MEDIUMBLOB
    LONGBLOB 
    [B]اشاره کرد.[/B]

    [B]datetime [/B]شیء برای قرار دادن تاریخ و ساعت ذخیره سازی


    این جدول برای قرارگیری تصاویر در بانک اطلاعاتی ایجاد شده است


    ما در این آموزش قصد داریم تصویر را به همراه نوع فایل و سایز آن ذخیره کنیم


    در اینجا نیاز به یک فرم html برای ارسال تصویر داریم

    کد PHP:
    <form method="post" action="upload.php" enctype="multipart/form-data">
    <
    input name="image" type="file" />
    <
    input type="submit" value="submit" />
    </
    form
    [B]با افزودن enctype و قراردادن multipart/form-data مرورگر قادر به ارسال اطلاعات دودویی خواهد بود[/B]


    بعد از ایجاد فرم نیاز به افزودن داده ها در بانک اطلاعاتی داریم


    کد زیر را در فایل upload.php قرار دهید سپس اتصال با بانک اطلاعاتی را ایجاد کنید.
    کد PHP:
    <?php

    $iSize 
    10000;

    $iWidth 100;

    $iHeight 100;

    if((isset(
    $_FILES["image"])) && ($_FILES["image"]["size"] > 0))
    {
     
    $imgSize $_FILES["image"]["size"];
     
    $imgType $_FILES["image"]["type"];
     
    $tmpName $_FILES["image"]["tmp_name"];

     if(
    $imgSize $iSize)
     exit(
    "Error: Large file size.");

     
    $getImgSize getimagesize($tmpName);

     if(!
    $getImgSize)
     exit(
    "Error: Invalid Image File.");

     list(
    $width$height) = $getImgSize;

     if((
    $width $iWidth) || ($height $iHeight))
     exit(
    "Maximum width and height exceeded. Please upload images below 100x100px size");

     
    $fp fopen($tmpName'r');
     
    $imageName fread($fpfilesize($tmpName));

     if(!
    get_magic_quotes_gpc())
     
    $imageName addslashes($imageName);

     
    fclose($fp);

     
    $date date("Y-m-d H:i:s");

     
    $query "INSERT INTO tblImages (imgType, imgImage, imgSize, imgDate) VALUES ('$imgType', '$imageName', '$imgSize', '$date')";
     
    mysql_query($query);

     echo 
    "Your file has been uploaded.";
    }

    ?>
    متغییر های تعریف شده در اینجا:

    [B]iSize[/B]: حجم تصویر
    [B]iWidth[/B]: عرض تصویر
    [B]iHeight[/B]: ارتفاع تصویر


    شرط ما برای ذخیره سازی این است که کاربر فایل را انتخاب کرده و سایز آن بزرگتر از صفر است
    کد PHP:
    if((isset($_FILES["image"])) && ($_FILES["image"]["size"] > 0)) 
    متغییر های تعریف شده فایل:

    [B]imgSize[/B]: دریافت سایز تصویر ارسال شده
    [B]imgType[/B]: نوع تصویر ارسال شده
    [B]tmpName[/B]: ذخیره موقت تصویر در tmp

    برای چک کردن صحت حجم تصویر از شرط زیر استفاده کردیم

    کد PHP:
    if($imgSize $iSize)
    exit(
    "Error: Large file size."); 
    تابع getimagesize برای دریافت ابعاد تصویر است، اگر false باشد یعنی فایل ارسالی تصویر نیست

    برای این کار از شرط زیر استفاده کردیم

    کد PHP:
    if(!$getImgSize)
    exit(
    "Error: Invalid Image File."); 


    شرط زیر برای چک کردن عرض و ارتفاع است



    کد PHP:
    if(($width $iWidth) || ($height $iHeight))
    exit(
    "Maximum width and height exceeded. Please upload images below 100x100px size"); 

    تابع [B]fopen [/B]برای خواندن فایل یا URL استفاده میشود، آدرس را از tmp ها میخواند

    تابع [B]fread [/B]برای خواندن امن فایل های دودویی یا باینری به کار میرود

    تابع [B]filesize [/B]برای دریافت سایز فایل استفاده میشود


    تابع[B] get_magic_quotes_gpc[/B] در این شرط گفته شده اگر غیر فعال بود از [B]addslashes [/B]استفاده کن.


    [B]get_magic_quotes_gpc[/B] تمامی [B]qoute [/B]ها را با متغیر های ارسالی با اضافه کردن slash فیلتر میکنه


    تایع [B]addslashes [/B]همونطور که از اسمش مشخص است برای اضافه کردن [B]slash [/B]به کار میرود تا مشکلی احتمالی برای افزودن رکورد پیش نیاید


    تابع [B]fclose [/B]برای بستن فایل باز شده استفاده میشود.
    aloneskipper likes this.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد

    [برای نمایش لینک باید عضو شوید. ]



    کاربر مقابل از MspSoft عزیز به خاطر این پست مفید تشکر کرده است: nimass

  2. #2


    محل سکونت
    M.S.P Soft
    علایق
    برنامه نویسی
    زبان مورد علاقه:
    Win & Web Application
    ارسال ها
    1,307
    تشکر ها
    724
    تشکر شده 309 بار در 234 ارسال.
    همانطور که گفته شد این روش برای ذخیره تصاویر خاص مانند ذخیره: تصویر کاربر، لوگو و تصاویر کم حجم بیشتر استفاده خواهد شد.

    [B]حتما طبق روش قبل حجم تصویر و سایز آن را محدود کنید.[/B]



    همانطور که به یاد دارید در قسمت اول این آموزش، در هنگام طراحی جدول فیلدی برای نوع فایل به اسم [B]imgType [/B]معرفی کردیم، این فیلد برای نمایش یا دانلود فایل نقش بسیار مهمی دارد.

    من نمایش فایل را با استفاده از فایل image.php انجام خواهم داد، برای مثال اگر بخوایم [B]رکورد 2 [/B]را نمایش دهیم به این صورت عمل میکنیم

    [B]کد:
    [/B]


    کد PHP:
     image.php?id=



    به این صورت هر شماره ورودی در متد [B]id [/B]تصویر آن رکورد را نمایش میدهد

    [B]برای دریافت ورودی از GET استفاده میکنیم[/B]

    [B]کد PHP:
    [/B]


    کد PHP:
     $image $_GET["id"]; 



    [B]در نتیجه ورودی در متغیر [B]image [/B]قرار میگیرد[/B]

    این به تنهایی اصلا صحیح نیست، و میتواند مشکلات امنیتی از نظیر [B]SQL Injection[/B] به وجود آورد پس باید ورودی را کنترول و محدود کنیم، ما در اینجا از تابع[B]intval [/B]استفاده کردیم، شما میتوانید از [B]fliter [/B]در [B]php [/B]یا توابع پاکسازی اعداد برای این کار استفاده کنید. [B](پس حتما در qeury پاکسازی را انجام دهید.)[/B]

    [B]به کد زیر دقت کنید و آن را در فایل image.php ذخیره کنید:[/B]

    [B]کد PHP:
    [/B]


    کد PHP:
    <?php

    $id 
    intval($_GET["id"]);
    if(isset(
    $id))
    {
     
    $query "SELECT * FROM tblImages WHERE imgID = '$id'";
     
    $result mysql_query($query);
     
    $row mysql_fetch_array($result);

     if(
    mysql_num_rows($result) == 1)
     {
     
    header("Content-Type: " $row["imgType"]);

     exit(
    $row["imgImage"]);
     }
     else
     {
     
    $path "http://forum.mspsoft.com/images/notfound.jpg";

     
    $image imagecreatefromjpeg($path);

     
    header("Content-Type: image/jpeg");

     
    imagejpeg($image);

     
    imagedestroy($image);
     }
    }

    ?>



    [B]شرط ما برای نمایش:[/B]
    [B]کد PHP:
    [/B]


    کد PHP:
     $id intval($_GET["id"]);
    if(isset(
    $id)) 



    [B]isset[/B]: تعیین کننده ی قرارگرفتن مقدار در متغیر است؛ در صورتی که قرار گرفته باشد این مقدار [B]True [/B]خواهد شد در غیر این صورت [B]False [/B]میشود.

    [B]intval[/B]: مقدار عدد صحیح یک متغیر را دریافت میکند.


    [B]از mysql_num_rows برای موجود بودن درخواست استفاده کردیم[/B]

    [B]کد PHP:
    [/B]


    کد PHP:
     if(mysql_num_rows($result) == 1



    در این شرط ما گفتیم در صورتی که query گرفته شده برابر با 1 (موجود بودن رکورد) بود آنگاه ....

    [B]کد PHP:
    [/B]


    کد PHP:
     header("Content-Type: " $row["imgType"]);

     exit(
    $row["imgImage"]); 



    تابع [B]header [/B]برای ارسال هیدر در شناسایی نوع محتوا کاربرد دارد.

    [B]Content-Type[/B]: مشخص کردن در شناسایی نوع خروجی، این نوع از رکورد انتخاب شده از فیلد [B]imgType [/B]مشخص میشود.

    [B]exit[/B]: نمایش خروجی و خاتمه ی اسکریپت

    [B]حالا اگر رکورد وجود نداشت چکار باید انجام دهیم؟[/B]
    [B]کد PHP:
    [/B]


    کد PHP:
     $path "http://forum.mspsoft.com/images/notfound.jpg";

     
    $image imagecreatefromjpeg($path);

     
    header("Content-Type: image/jpeg");

     
    imagejpeg($image);

     
    imagedestroy($image); 


    در اینجا از [B]GD [/B]برای نمایش تصویر [B]Not Found[/B] استفاده میکنیم. تصویر [B]notfound.jpg[/B] در پوشه [B]images [/B]در صورتی که رکورد به هر دلیلی موجود نبود نمایش داده خواهد شد.

    [B]و در آخر برای نمایش تصاویر از کد HTML زیر استفاده خواهیم کرد.[/B]


    [B]کد:
    [/B]


    کد PHP:
     <img src="image.php?id=2"





    این تصویر نمایش [B]رکورد 2[/B] از بانک اطلاعاتی خواهد بود.

    شاید بگویید که چرا سایز تصویر را در قسمت اول آموزش ذخیره کردیم؟، این فیلد را میتوانید برای مدیریت بهتر تصاویر داشته باشید یا اینکه بخواهید بخشی برای دانلود تصاویر از طریق بانک اطلاعاتی در سایت قرار دهید، با این حال میتوانید با قرار دادن [B]"Content-Length"[/B] و [B]"Content-Disposition: attachment"[/B] در تابع [B]header [/B]بافراخوانی لینک، فایل را دریافت کنید.


    با M.S.P Soft به دنياي برنامه نويسي وارد شويد

    [برای نمایش لینک باید عضو شوید. ]



    کاربر مقابل از MspSoft عزیز به خاطر این پست مفید تشکر کرده است: nimass

  3. #3


    زبان مورد علاقه:
    php
    ارسال ها
    1
    تشکر ها
    0
    تشکر شده 0 بار در 0 ارسال.
    اگر تعداد تصاویر بیشتر از یکی باشه چطور با این روش نمایش بدیم؟

  4. #4


    زبان مورد علاقه:
    ترکی / عربی / کردی
    ارسال ها
    1
    تشکر ها
    0
    تشکر شده 0 بار در 0 ارسال.
    سلام مرسی از پست ها تون من همین کارو انجام دادم هیچ پیغام خططا نمیده ولی عکس تو دیتابیس ذخیره نمیشه
    وقتی عکس انخاب میکنی و دکمه سابمیتو میزنی بلا مینویسه Your file has been uploaded.

    و عکس ذخیره نمیشه لطفا کمکم کنید .

اطلاعات موضوع

Users Browsing this Thread

در حال حاضر 1 نفر در حال مشاهده این موضوع میباشند. (0 کاربر و 1 مهمان)

     

موضوعات مشابه

  1. پاسخ ها: 2
    آخرين ارسال: ۱۳۹۱-۱۲-۲۱, ۱۲:۵۸ بعد از ظهر
  2. پاسخ ها: 0
    آخرين ارسال: ۱۳۹۰-۱۱-۲۶, ۰۲:۳۲ بعد از ظهر
  3. ذخیره تصاویر در SQL Server
    By MspSoft in forum SQL Server
    پاسخ ها: 0
    آخرين ارسال: ۱۳۹۰-۱۱-۱۰, ۰۱:۰۸ قبل از ظهر
  4. آموزش سورسی که حجم تصاویر را کاهش می دهد
    By vahid4251 in forum برنامه نویسی در 6 VB
    پاسخ ها: 0
    آخرين ارسال: ۱۳۹۰-۱۱-۰۹, ۱۰:۵۸ قبل از ظهر
  5. تصاویری از شبکه اجتماعی جدید مایکروسافت
    By mspsoft in forum تازه‌های دنیای کامپیوتر و فناوری
    پاسخ ها: 0
    آخرين ارسال: ۱۳۹۰-۰۹-۰۴, ۰۳:۵۹ بعد از ظهر

برچسب برای این موضوع

مجوز های ارسال و ویرایش

  • شما نمی توانید موضوع جدید ارسال کنید
  • شما نمی توانید به پست ها پاسخ دهید
  • شما نمی توانید فایل پیوست ضمیمه کنید
  • شما نمی توانید پست های خود را ویرایش کنید
ساعت ۰۸:۵۲ قبل از ظهر بر حسب GMT +3.5 می باشد.
طراحی ، کدنویسی توسط : وی بی ایران