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

P.H.P

Member
سلام

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

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

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

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

برای شرع کار ابتدا باید یک بانک اطلاعاتی ایجاد کنید

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

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

کد:
[COLOR=#0000ff]
CREATE TABLE `tblImages`
(
 `imgID`              int(11)            unsigned NOT NULL auto_increment,
 `imgType`            varchar(32)        NOT NULL default '',
 `imgImage`           BLOB               NOT NULL,
 `imgSize`            varchar(32)        NOT NULL default '',
 `imgDate`            datetime           NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY  (`imgID`)
) TYPE=MyISAM;
[/COLOR]


معرفی:

int از نوع عددی

auto_increment ایجاد اتوماتیک ID

varchar از نوع کاراکتر

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

از انواع BLOB میتوان به
کد:
BLOB
TINYBLOB
MEDIUMBLOB
LONGBLOB
اشاره کرد.

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


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


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


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

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


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


کد زیر را در فایل 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($fp, filesize($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.";
}

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

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


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

PHP:
if((isset($_FILES["image"])) && ($_FILES["image"]["size"] > 0))
متغییر های تعریف شده فایل:

imgSize: دریافت سایز تصویر ارسال شده
imgType: نوع تصویر ارسال شده
tmpName: ذخیره موقت تصویر در 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");


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

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

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


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


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


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


تابع fclose برای بستن فایل باز شده استفاده میشود.


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


منبع: http://www.Vvolf.net


موفق
 

جدیدترین ارسال ها

بالا