۱۶-شهریور-۱۳۸۹, ۱۶:۱۵:۴۹
این آموزش ادامه قسمت اول روش ذخیره تصاویر در بانک اطلاعاتی است
همانطور که گفته شد این روش برای ذخیره تصاویر خاص مانند ذخیره: تصویر کاربر، لوگو و تصاویر کم حجم بیشتر استفاده خواهد شد.
حتما طبق روش قبل حجم تصویر و سایز آن را محدود کنید.
خوب اول از همه باید ارتباط با پایگاه داده را انجام دهیم؛ که این در آموزشهای قبل مختصر توضیح داده شد. برای اطلاعات بیشتر کلیک کنید.
همانطور که به یاد دارید در قسمت اول این آموزش، در هنگام طراحی جدول فیلدی برای نوع فایل به اسم imgType معرفی کردیم، این فیلد برای نمایش یا دانلود فایل نقش بسیار مهمی دارد.
من نمایش فایل را با استفاده از فایل image.php انجام خواهم داد، برای مثال اگر بخوایم رکورد 2 را نمایش دهیم به این صورت عمل میکنیم
به این صورت هر شماره ورودی در متد id تصویر آن رکورد را نمایش میدهد
برای دریافت ورودی از GET استفاده میکنیم
در نتیجه ورودی در متغیر [b]image قرار میگیرد[/b]
این به تنهایی اصلا صحیح نیست، و میتواند مشکلات امنیتی از نظیر SQL Injection به وجود آورد پس باید ورودی را کنترول و محدود کنیم، ما در اینجا از تابع intval استفاده کردیم، شما میتوانید از fliter در php یا توابع پاکسازی اعداد برای این کار استفاده کنید. (پس حتما در qeury پاکسازی را انجام دهید.)
به کد زیر دقت کنید و آن را در فایل image.php ذخیره کنید:
شرط ما برای نمایش:
isset: تعیین کننده ی قرارگرفتن مقدار در متغیر است؛ در صورتی که قرار گرفته باشد این مقدار True خواهد شد در غیر این صورت False میشود.
intval: مقدار عدد صحیح یک متغیر را دریافت میکند.
از mysql_num_rows برای موجود بودن درخواست استفاده کردیم
در این شرط ما گفتیم در صورتی که query گرفته شده برابر با 1 (موجود بودن رکورد) بود آنگاه ....
تابع header برای ارسال هیدر در شناسایی نوع محتوا کاربرد دارد.
Content-Type: مشخص کردن در شناسایی نوع خروجی، این نوع از رکورد انتخاب شده از فیلد imgType مشخص میشود.
exit: نمایش خروجی و خاتمه ی اسکریپت
حالا اگر رکورد وجود نداشت چکار باید انجام دهیم؟
در اینجا از GD برای نمایش تصویر Not Found استفاده میکنیم. تصویر notfound.jpg در پوشه images در صورتی که رکورد به هر دلیلی موجود نبود نمایش داده خواهد شد.
و در آخر برای نمایش تصاویر از کد HTML زیر استفاده خواهیم کرد.
این تصویر نمایش رکورد 2 از بانک اطلاعاتی خواهد بود.
شاید بگویید که چرا سایز تصویر را در قسمت اول آموزش ذخیره کردیم؟، این فیلد را میتوانید برای مدیریت بهتر تصاویر داشته باشید یا اینکه بخواهید بخشی برای دانلود تصاویر از طریق بانک اطلاعاتی در سایت قرار دهید، با این حال میتوانید با قرار دادن "Content-Length" و "Content-Disposition: attachment" در تابع header بافراخوانی لینک، فایل را دریافت کنید.
منبع: http://www.Vvolf.net
موفق
همانطور که گفته شد این روش برای ذخیره تصاویر خاص مانند ذخیره: تصویر کاربر، لوگو و تصاویر کم حجم بیشتر استفاده خواهد شد.
حتما طبق روش قبل حجم تصویر و سایز آن را محدود کنید.
خوب اول از همه باید ارتباط با پایگاه داده را انجام دهیم؛ که این در آموزشهای قبل مختصر توضیح داده شد. برای اطلاعات بیشتر کلیک کنید.
همانطور که به یاد دارید در قسمت اول این آموزش، در هنگام طراحی جدول فیلدی برای نوع فایل به اسم imgType معرفی کردیم، این فیلد برای نمایش یا دانلود فایل نقش بسیار مهمی دارد.
من نمایش فایل را با استفاده از فایل image.php انجام خواهم داد، برای مثال اگر بخوایم رکورد 2 را نمایش دهیم به این صورت عمل میکنیم
کد:
image.php?id=2
به این صورت هر شماره ورودی در متد id تصویر آن رکورد را نمایش میدهد
برای دریافت ورودی از GET استفاده میکنیم
کد php:
$image = $_GET["id"];
در نتیجه ورودی در متغیر [b]image قرار میگیرد[/b]
این به تنهایی اصلا صحیح نیست، و میتواند مشکلات امنیتی از نظیر SQL Injection به وجود آورد پس باید ورودی را کنترول و محدود کنیم، ما در اینجا از تابع intval استفاده کردیم، شما میتوانید از fliter در php یا توابع پاکسازی اعداد برای این کار استفاده کنید. (پس حتما در qeury پاکسازی را انجام دهید.)
به کد زیر دقت کنید و آن را در فایل image.php ذخیره کنید:
کد 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 = "images/notfound.jpg";
$image = imagecreatefromjpeg($path);
header("Content-Type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
}
}
?>
شرط ما برای نمایش:
کد php:
$id = intval($_GET["id"]);
if(isset($id))
isset: تعیین کننده ی قرارگرفتن مقدار در متغیر است؛ در صورتی که قرار گرفته باشد این مقدار True خواهد شد در غیر این صورت False میشود.
intval: مقدار عدد صحیح یک متغیر را دریافت میکند.
از mysql_num_rows برای موجود بودن درخواست استفاده کردیم
کد php:
if(mysql_num_rows($result) == 1)
در این شرط ما گفتیم در صورتی که query گرفته شده برابر با 1 (موجود بودن رکورد) بود آنگاه ....
کد php:
header("Content-Type: " . $row["imgType"]);
exit($row["imgImage"]);
تابع header برای ارسال هیدر در شناسایی نوع محتوا کاربرد دارد.
Content-Type: مشخص کردن در شناسایی نوع خروجی، این نوع از رکورد انتخاب شده از فیلد imgType مشخص میشود.
exit: نمایش خروجی و خاتمه ی اسکریپت
حالا اگر رکورد وجود نداشت چکار باید انجام دهیم؟
کد php:
$path = "images/notfound.jpg";
$image = imagecreatefromjpeg($path);
header("Content-Type: image/jpeg");
imagejpeg($image);
imagedestroy($image);
و در آخر برای نمایش تصاویر از کد HTML زیر استفاده خواهیم کرد.
کد:
<img src="image.php?id=2">
این تصویر نمایش رکورد 2 از بانک اطلاعاتی خواهد بود.
شاید بگویید که چرا سایز تصویر را در قسمت اول آموزش ذخیره کردیم؟، این فیلد را میتوانید برای مدیریت بهتر تصاویر داشته باشید یا اینکه بخواهید بخشی برای دانلود تصاویر از طریق بانک اطلاعاتی در سایت قرار دهید، با این حال میتوانید با قرار دادن "Content-Length" و "Content-Disposition: attachment" در تابع header بافراخوانی لینک، فایل را دریافت کنید.
منبع: http://www.Vvolf.net
موفق