سلام
در این آموزش چگونگی ذخیره تصاویر دودویی (باینری) در بانک اطلاعاتی و نمایش آنها در PHP را خواهید آموخت
در این قسمت فقط ذخیره تصاویر را می آموزید، در آینده قسمت دوم آن که نمایش تصاویر است را خواهم گفت
چرا تصاویر را در بانک اطلاعاتی ذخیره کنیم؟
ممکن است شما بخواهید در سایتتان بخشی برای ذخیره تصویر کاربر قرار دهید، یا فروشگاهی ایجاد میکنید که تعدادی فروشگاه در آن گسترش یافته باشند و بخواهید برای هر کدام یک لوگو قرار دهید یا تصاویر محصولات خود را در بانک اطلاعاتی داشته باشید.
1. شما میتوانید با ذخیره در بانک اطلاعاتی امنیت بیشتری برای تصاویر و فایل های خود داشته باشید.
2. متن نیز بر روی تصویرتان قرار دهید و آنها را به سادگی مدیریت کنید.
3. فایل ها برای رکورد کاربر ذخیره خواهند شد، در نتیجه ارتباط مستقیم دارند و دسته بندی آسان انجام میشود
شما با تهیه یک نسخه پشتیبانی از بانک اطلاعاتی میتوانید تمام تصاویر را همراه داشته باشید
برای شرع کار ابتدا باید یک بانک اطلاعاتی ایجاد کنید
نحوه ی اتصال به MySQL را میتوانید از اینجا مشاهده کنید
بعد از اتصال به بانک اطلاعاتی نیاز به ایجاد جدول برای ذخیره تصاویر داریم
کد:
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;
معرفی:
int از نوع عددی
auto_increment ایجاد اتوماتیک ID
varchar از نوع کاراکتر
BLOB شیء بزرگ دودویی است که در سریعترین زمان ذخیره سازی میکند و خروجی میگیرد.
از انواع BLOB میتوان به
کد:
BLOB
TINYBLOB
MEDIUMBLOB
LONGBLOB
اشاره کرد.
datetime شیء برای قرار دادن تاریخ و ساعت ذخیره سازی
این جدول برای قرارگیری تصاویر در بانک اطلاعاتی ایجاد شده است
ما در این آموزش قصد داریم تصویر را به همراه نوع فایل و سایز آن ذخیره کنیم
در اینجا نیاز به یک فرم 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
موفق