شما برای نمایش تصاویرتون با اسکریپتهای پی اچ پی از چه روشها یا از چه کدهایی استفاده می کنید؟
در این مورد هر نوع نکته ای به ذهنتون می رسه لطفا عنوان کنید.
منظورتون رو متوجه نشدم ! یعنی چی از چه روشی استفاده میکنید ؟ نمایش تصویر که راه بیشتر نداره ! اونم با html هست کاری به php نداره !
$src = '../private/1.jpeg';
$im = imagecreatefromjpeg($src);
header('Content-Type: image/jpeg');
imagejpeg($im)
imagedestroy($im);
$src = '../private/1.jpg';
$im = imagecreatefromjpeg($src);
imagejpeg($im, './public/1.jpg');
echo '<img src=';
echo './public/1.jpg';
echo '>';
imagedestroy($im);
PHP:echo '<img src=../private/1.jpg>';
چقدر شما عکس رو سخت نشون میدی !
جناب sharktech کد رو واستون گذاشتند ! به همین راحتی عکس رو نشون بدید
برای ریسایز کردن کلاس های خوبی توی phpclasses.org هست یه سرچی اونجا بکنید !
برای اینکه عکسهای خصوصی رو نمیش بدی عکسها رو از private کپی کن توی روت یا هر پوشه ای که مد نظرت هست بعدش هم پاکس کن ! البته اگر آمار بره بالا فشار میاری به سرورت و ممکن هست که پشتیبانتون سایت شما رو به دلیل فشار زید به سرور ببنده![]()
بهترین راه ذخیره کردن تصاویر خصوصی در دیتابیسهبرای تصاویر خصوصی به دلیل مشکلی که گفتید تصمیم گرفتم از طریق تغییر مجوزهای دسترسی (تابع chmod) اقدام کنم.
در این مورد مطلبی ندارید؟
بهترین راه ذخیره کردن تصاویر خصوصی در دیتابیسه
منظورم اینه که تصاویر رو در دیتابیس ذخیره کنی نه روی هاستمنظورتون اینه که استفاده از تابع chmod برای اعطای مجوز دسترسی کار درستی نیست؟
منظورم اینه که تصاویر رو در دیتابیس ذخیره کنی نه روی هاست
1 - فکر نکنم بتونی با پرمیشن ها کار کنی! چون نمیتونی کاربرا مختلف براش تعیین کنیاگه عکسهای خصوصی زیادی رو توی دیتابیس ذخیره کنم سرعت دیتابیس کم می شه. همچنین اگه بخوام یه سایت آپلود عکس طراحی کنم بنظرم بهتره که از تابع chmod برای اینکار استفاده کنم.
در مورد تابع chmod مطلبی ندارید؟
سلام
جناب zixet جان اینکه میگید عکسها رو داخل دیتابیس ذخیره کنن نه بر روی هاست به نظرم روش جالبی نمیادش که مهم ترین دلیلش هم اینکه :
با زیاد شدن عکسها حجم دیتابیس بالا میره و با کمبود فضا مواجه میشیم و تهیه فضای اضافی برای دیتابیسها معمولا قیمتهای بالایی دارن تا نسبت به فضای هاست
البته دلایل دیگهای هم داره مثل کند شدن دیتابیس و سخت شدن انتقالش و پشتیبان گیری از دیتابیس به خاطر حجم بالای اون برای همین آدرس عکسها رو توی دیتابیس ذخیره کنید بهتره تا خود عکسها رو حالا در هر پوشه و هر آدرسی که بودند.
به نظر من بهترین راه همون کدی هستش که sharktech جان گفتش برای ریسایز کردن و ایجاد تغییر اندازه هم اگر میخوایید مثلا همه عکس ها با یک سایز مشخص و معیینی نمایش داده بشن فقط کافی width و height رو به اون کد اضافه کنید و این دو خصوصیت رو با اندازههای معیین و دلخواهتون مقدار دهی کنید.
در مورد خصوصی بودن بعضی عکسها هم منظورتون دقیقا چیه؟ یعنی بعضی عکس ها به همه نشون داده نشه؟ اگر این هستش میتونید یه فیلد توی دیتابیس برای هر عکس ایجاد کنید با نوع bool که مقدار 0 , 1 رو بهش بدید و اسمش رو بزارید private و اگر 1 بود شخصی هستش و نشون داده نشه موقع نمایش دادن عکسها و اگر 0 بود نمایش داده بشه، البته اگر درست منظورتون رو متوجه شده باشم.
اینجوری که حجم عکس فرقی نمیکنه ! برای این از ریسایز استفاده میکنن که حجم عکس بیاد پائین !به نظر من بهترین راه همون کدی هستش که sharktech جان گفتش برای ریسایز کردن و ایجاد تغییر اندازه هم اگر میخوایید مثلا همه عکس ها با یک سایز مشخص و معیینی نمایش داده بشن فقط کافی width و height رو به اون کد اضافه کنید و این دو خصوصیت رو با اندازههای معیین و دلخواهتون مقدار دهی کنید.
اگر طرف آدرس عکس رو مستیم توی URL بزنه عکس باز میشه و اصلا به دیتا بیس نمیره که فیلد private چک بشه !در مورد خصوصی بودن بعضی عکسها هم منظورتون دقیقا چیه؟ یعنی بعضی عکس ها به همه نشون داده نشه؟ اگر این هستش میتونید یه فیلد توی دیتابیس برای هر عکس ایجاد کنید با نوع bool که مقدار 0 , 1 رو بهش بدید و اسمش رو بزارید private و اگر 1 بود شخصی هستش و نشون داده نشه موقع نمایش دادن عکسها و اگر 0 بود نمایش داده بشه، البته اگر درست منظورتون رو متوجه شده باشم.
فرقی نداره ! نهایتا شما به جای این که یه هاست بگیری سالی 100 تومان میایی یه سرور مجازی میگیری مثلا 10 گیگ حالا هر کاری میخوایی توش بکن از نظر فضا مشکل پیدا نمیکنی !با زیاد شدن عکسها حجم دیتابیس بالا میره و با کمبود فضا مواجه میشیم و تهیه فضای اضافی برای دیتابیسها معمولا قیمتهای بالایی دارن تا نسبت به فضای هاست
اینجوری که حجم عکس فرقی نمیکنه ! برای این از ریسایز استفاده میکنن که حجم عکس بیاد پائین !
اگر طرف آدرس عکس رو مستیم توی URL بزنه عکس باز میشه و اصلا به دیتا بیس نمیره که فیلد private چک بشه !
فرقی نداره ! نهایتا شما به جای این که یه هاست بگیری سالی 100 تومان میایی یه سرور مجازی میگیری مثلا 10 گیگ حالا هر کاری میخوایی توش بکن از نظر فضا مشکل پیدا نمیکنی !
تنها چیزی که هست حجم دیتا بیس هست که میره بالا ! که برای بک آپ گرفتن باز هم مشکلی پیش نمیاد اگر از cpanel استفاده کنن هم راحت بک آپ میگیره هم ریستور میکنه در کمتر از 1 دقیقه !
در صورتی که عکس خصوصی یا محرمانه باشه بهترین و امن ترین روش دیتا بیس هست !
یه پروژه برای کانون وکلا کار کردم که عکس هایی که بود مثلا فقط باید یه وکیل میخوند و هیچ کس نباید اونو میدید از همین روش استفاده کردم چون محرمانه بود ولی اگر زیاد مهم نباشه میشه توی یه فلدر خارج از روت قرار بدید و موقع درخواست عکس رو توی روت کپی کنی و به یوزر نشون بدی بعدش هم پاک بشه ! البته این روش هم در بازدید های بالا فشار میاره به سرور !
ob_start("ob_gzhandler");
$_GET[url]='../A.jpg';
$im = imagecreatefromjpeg($_GET[url]);
header('Content-type: image/jpeg');
$name=explode(".", basename($_GET['url']));
header("Content-Disposition: inline; filename=".$name[0].".jpg");
imagejpeg($im);
یه راه دیگه هم داری!اگه از کد زیر استفاده کنید لازم نیست که تصویر رو توی فضای عمومی سرور کپی کنید. موقع ذخیره تصویر روی کامپیوتر، فایل با اسم و پسوندن مناسب ذخیره می شه.
اما من می خوام تصاویر روی توی فضای عمومی سرور قرار بدم و اونها رو از دسترس افراد غیر مجاز خارج کنم. برای این مشکل چه راهی به ذهنتونمی رسه؟
PHP:ob_start("ob_gzhandler"); $_GET[url]='../A.jpg'; $im = imagecreatefromjpeg($_GET[url]); header('Content-type: image/jpeg'); $name=explode(".", basename($_GET['url'])); header("Content-Disposition: inline; filename=".$name[0].".jpg"); imagejpeg($im);
مطالب شما در مورد ذخیره تصویر توی پایگاه داده همگی درسته.
اما در مورد مطلبی که راجع به تصاویر خصوصی گفتید این سوال پیش می یاد که اگه من به دلایلی بخوام تصاویر رو توی فضای عمومی سرور قرار بدم و این تصاویر خصوصی باشن، کاربر با واد کردن ادرس تصاویر توی ادرس بار می تونه اونها رو ببینه.
در این مورد چی می گید؟
البته بجای تصویر می تونیم فایلهای متنی، پی دی اف، صوتی و . . . رو هم مد نظر بگیریم.
یه راه دیگه هم داری!
اسم فایل رو تو دیتابیس ذخیره کنی و یک فایل مثلا به اسم img.php درست کنی بعد هر عکسی رو خواستی نمایش بدی بری تو دیتابیس جستجو کنی و آدرس اصلیش رو سرور رو به دست بیاری و اگه پرمیشن لازم رو داشت اون رو لود کنی در غیر این صورت یه پیام خطا نشون بدی