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

idocs

Member
شما برای نمایش تصاویرتون با اسکریپتهای پی اچ پی از چه روشها یا از چه کدهایی استفاده می کنید؟

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

Masoud1365

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

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

منظورتون رو متوجه نشدم ! یعنی چی از چه روشی استفاده میکنید ؟ نمایش تصویر که راه بیشتر نداره ! اونم با html هست کاری به php نداره !
 

idocs

Member
منظورتون رو متوجه نشدم ! یعنی چی از چه روشی استفاده میکنید ؟ نمایش تصویر که راه بیشتر نداره ! اونم با html هست کاری به php نداره !


من وقتی از اسکریپت زیر برای نمایش تصویر استفاده می کنم، تصویر توی صفحه وب سایت بخوبی نمایش داده می شه ولی موقع ذخیره کردن تصویر، تصویر با پسوند پی اچ پی ذخیره می شه.

PHP:
$src = '../private/1.jpeg';

$im = imagecreatefromjpeg($src);

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

imagejpeg($im)

imagedestroy($im);
وقتی از اسکریپت زیر استفاده می کنم، تصویر بخوبی نمایش داده می شه و بخوبی روی کامپیوترم ذخیره می شه. اما یه کپی از تصویر توی سرور، توی پوشه
public

ایجاد می شه. من نمی خوام از تصویر کپی ایجاد بشه چون این تصویر می تونه یه تصویر شخصی باشه.
PHP:
$src = '../private/1.jpg';

$im = imagecreatefromjpeg($src);

imagejpeg($im, './public/1.jpg');

echo '<img src=';

echo './public/1.jpg';

echo '>';

imagedestroy($im);
راهی به به نظرتون نمی رسه که بتونم این مشکلات رو حل کنم؟
 

idocs

Member
PHP:
echo '<img src=../private/1.jpg>';

با این کد نمی شه روی تصویر کاری انجام داد. مثلا سایز تصویر رو تغییر داد.

همچنین توجه داشته باشد که پوشه private در خارج از فضای عمومی وب سایت قرار داره. (خارج از پوشه public_html) و نمی شه به این شکل تصویر رو توی صفحه وب نمایش داد.

با توجه به این مطالب چه راه حلی ارائه می کنید؟
 

Masoud1365

مدیر انجمن
برای ریسایز کردن کلاس های خوبی توی phpclasses.org هست یه سرچی اونجا بکنید !
برای اینکه عکسهای خصوصی رو نمیش بدی عکسها رو از private کپی کن توی روت یا هر پوشه ای که مد نظرت هست بعدش هم پاکس کن ! البته اگر آمار بره بالا فشار میاری به سرورت و ممکن هست که پشتیبانتون سایت شما رو به دلیل فشار زید به سرور ببنده :green:
 

idocs

Member
برای ریسایز کردن کلاس های خوبی توی phpclasses.org هست یه سرچی اونجا بکنید !
برای اینکه عکسهای خصوصی رو نمیش بدی عکسها رو از private کپی کن توی روت یا هر پوشه ای که مد نظرت هست بعدش هم پاکس کن ! البته اگر آمار بره بالا فشار میاری به سرورت و ممکن هست که پشتیبانتون سایت شما رو به دلیل فشار زید به سرور ببنده :green:

برای تصاویر خصوصی به دلیل مشکلی که گفتید تصمیم گرفتم از طریق تغییر مجوزهای دسترسی (تابع chmod) اقدام کنم.

در این مورد مطلبی ندارید؟
 

idocs

Member
منظورم اینه که تصاویر رو در دیتابیس ذخیره کنی نه روی هاست

اگه عکسهای خصوصی زیادی رو توی دیتابیس ذخیره کنم سرعت دیتابیس کم می شه. همچنین اگه بخوام یه سایت آپلود عکس طراحی کنم بنظرم بهتره که از تابع chmod برای اینکار استفاده کنم.

در مورد تابع chmod مطلبی ندارید؟
 

ziXet

مدیر انجمن PHP/MYSQL
اگه عکسهای خصوصی زیادی رو توی دیتابیس ذخیره کنم سرعت دیتابیس کم می شه. همچنین اگه بخوام یه سایت آپلود عکس طراحی کنم بنظرم بهتره که از تابع chmod برای اینکار استفاده کنم.

در مورد تابع chmod مطلبی ندارید؟
1 - فکر نکنم بتونی با پرمیشن ها کار کنی! چون نمیتونی کاربرا مختلف براش تعیین کنی
2 - کی گفته سرعت دیتابیس کم میشه؟ vb با اون عظمتش از این سیستم استفاده میکنه! خوبیش اینه که کنترل کامل داری روی تصاویر
 

greencat

Member
سلام
جناب ziXet جان اینکه میگید عکس‌ها رو داخل دیتابیس ذخیره کنن نه بر روی هاست به نظرم روش جالبی نمیادش که مهم ترین دلیلش هم اینکه :
با زیاد شدن عکس‌ها حجم دیتابیس بالا میره و با کمبود فضا مواجه میشیم و تهیه فضای اضافی برای دیتابیس‌ها معمولا قیمت‌های بالایی دارن تا نسبت به فضای هاست
البته دلایل دیگه‌ای هم داره مثل کند شدن دیتابیس و سخت شدن انتقالش و پشتیبان گیری از دیتابیس به خاطر حجم بالای اون برای همین آدرس عکس‌ها رو توی دیتابیس ذخیره کنید بهتره تا خود عکس‌ها رو حالا در هر پوشه و هر آدرسی که بودند.

به نظر من بهترین راه همون کدی هستش که sharktech جان گفتش برای ریسایز کردن و ایجاد تغییر اندازه هم اگر می‌خوایید مثلا همه عکس ها با یک سایز مشخص و معیینی نمایش داده بشن فقط کافی width و height رو به اون کد اضافه کنید و این دو خصوصیت رو با اندازه‌های معیین و دلخواهتون مقدار دهی کنید.

در مورد خصوصی بودن بعضی عکس‌ها هم منظورتون دقیقا چیه؟ یعنی بعضی عکس ها به همه نشون داده نشه؟ اگر این هستش میتونید یه فیلد توی دیتابیس برای هر عکس ایجاد کنید با نوع bool که مقدار 0 , 1 رو بهش بدید و اسمش رو بزارید private و اگر 1 بود شخصی هستش و نشون داده نشه موقع نمایش دادن عکس‌ها و اگر 0 بود نمایش داده بشه، البته اگر درست منظورتون رو متوجه شده باشم.
 

idocs

Member
سلام
جناب zixet جان اینکه میگید عکس‌ها رو داخل دیتابیس ذخیره کنن نه بر روی هاست به نظرم روش جالبی نمیادش که مهم ترین دلیلش هم اینکه :
با زیاد شدن عکس‌ها حجم دیتابیس بالا میره و با کمبود فضا مواجه میشیم و تهیه فضای اضافی برای دیتابیس‌ها معمولا قیمت‌های بالایی دارن تا نسبت به فضای هاست
البته دلایل دیگه‌ای هم داره مثل کند شدن دیتابیس و سخت شدن انتقالش و پشتیبان گیری از دیتابیس به خاطر حجم بالای اون برای همین آدرس عکس‌ها رو توی دیتابیس ذخیره کنید بهتره تا خود عکس‌ها رو حالا در هر پوشه و هر آدرسی که بودند.

به نظر من بهترین راه همون کدی هستش که sharktech جان گفتش برای ریسایز کردن و ایجاد تغییر اندازه هم اگر می‌خوایید مثلا همه عکس ها با یک سایز مشخص و معیینی نمایش داده بشن فقط کافی width و height رو به اون کد اضافه کنید و این دو خصوصیت رو با اندازه‌های معیین و دلخواهتون مقدار دهی کنید.

در مورد خصوصی بودن بعضی عکس‌ها هم منظورتون دقیقا چیه؟ یعنی بعضی عکس ها به همه نشون داده نشه؟ اگر این هستش میتونید یه فیلد توی دیتابیس برای هر عکس ایجاد کنید با نوع bool که مقدار 0 , 1 رو بهش بدید و اسمش رو بزارید private و اگر 1 بود شخصی هستش و نشون داده نشه موقع نمایش دادن عکس‌ها و اگر 0 بود نمایش داده بشه، البته اگر درست منظورتون رو متوجه شده باشم.

مطالب شما در مورد ذخیره تصویر توی پایگاه داده همگی درسته.

اما در مورد مطلبی که راجع به تصاویر خصوصی گفتید این سوال پیش می یاد که اگه من به دلایلی بخوام تصاویر رو توی فضای عمومی سرور قرار بدم و این تصاویر خصوصی باشن، کاربر با واد کردن ادرس تصاویر توی ادرس بار می تونه اونها رو ببینه.

در این مورد چی می گید؟

البته بجای تصویر می تونیم فایلهای متنی، پی دی اف، صوتی و . . . رو هم مد نظر بگیریم.
 

Masoud1365

مدیر انجمن
به نظر من بهترین راه همون کدی هستش که sharktech جان گفتش برای ریسایز کردن و ایجاد تغییر اندازه هم اگر می‌خوایید مثلا همه عکس ها با یک سایز مشخص و معیینی نمایش داده بشن فقط کافی width و height رو به اون کد اضافه کنید و این دو خصوصیت رو با اندازه‌های معیین و دلخواهتون مقدار دهی کنید.
اینجوری که حجم عکس فرقی نمیکنه ! برای این از ریسایز استفاده میکنن که حجم عکس بیاد پائین !
در مورد خصوصی بودن بعضی عکس‌ها هم منظورتون دقیقا چیه؟ یعنی بعضی عکس ها به همه نشون داده نشه؟ اگر این هستش میتونید یه فیلد توی دیتابیس برای هر عکس ایجاد کنید با نوع bool که مقدار 0 , 1 رو بهش بدید و اسمش رو بزارید private و اگر 1 بود شخصی هستش و نشون داده نشه موقع نمایش دادن عکس‌ها و اگر 0 بود نمایش داده بشه، البته اگر درست منظورتون رو متوجه شده باشم.
اگر طرف آدرس عکس رو مستیم توی URL بزنه عکس باز میشه و اصلا به دیتا بیس نمیره که فیلد private چک بشه !
با زیاد شدن عکس‌ها حجم دیتابیس بالا میره و با کمبود فضا مواجه میشیم و تهیه فضای اضافی برای دیتابیس‌ها معمولا قیمت‌های بالایی دارن تا نسبت به فضای هاست
فرقی نداره ! نهایتا شما به جای این که یه هاست بگیری سالی 100 تومان میایی یه سرور مجازی میگیری مثلا 10 گیگ حالا هر کاری میخوایی توش بکن از نظر فضا مشکل پیدا نمیکنی !
تنها چیزی که هست حجم دیتا بیس هست که میره بالا ! که برای بک آپ گرفتن باز هم مشکلی پیش نمیاد اگر از cpanel استفاده کنن هم راحت بک آپ میگیره هم ریستور میکنه در کمتر از 1 دقیقه !
در صورتی که عکس خصوصی یا محرمانه باشه بهترین و امن ترین روش دیتا بیس هست !
یه پروژه برای کانون وکلا کار کردم که عکس هایی که بود مثلا فقط باید یه وکیل میخوند و هیچ کس نباید اونو میدید از همین روش استفاده کردم چون محرمانه بود ولی اگر زیاد مهم نباشه میشه توی یه فلدر خارج از روت قرار بدید و موقع درخواست عکس رو توی روت کپی کنی و به یوزر نشون بدی بعدش هم پاک بشه ! البته این روش هم در بازدید های بالا فشار میاره به سرور !
 

idocs

Member
اینجوری که حجم عکس فرقی نمیکنه ! برای این از ریسایز استفاده میکنن که حجم عکس بیاد پائین !

اگر طرف آدرس عکس رو مستیم توی URL بزنه عکس باز میشه و اصلا به دیتا بیس نمیره که فیلد private چک بشه !

فرقی نداره ! نهایتا شما به جای این که یه هاست بگیری سالی 100 تومان میایی یه سرور مجازی میگیری مثلا 10 گیگ حالا هر کاری میخوایی توش بکن از نظر فضا مشکل پیدا نمیکنی !
تنها چیزی که هست حجم دیتا بیس هست که میره بالا ! که برای بک آپ گرفتن باز هم مشکلی پیش نمیاد اگر از cpanel استفاده کنن هم راحت بک آپ میگیره هم ریستور میکنه در کمتر از 1 دقیقه !
در صورتی که عکس خصوصی یا محرمانه باشه بهترین و امن ترین روش دیتا بیس هست !
یه پروژه برای کانون وکلا کار کردم که عکس هایی که بود مثلا فقط باید یه وکیل میخوند و هیچ کس نباید اونو میدید از همین روش استفاده کردم چون محرمانه بود ولی اگر زیاد مهم نباشه میشه توی یه فلدر خارج از روت قرار بدید و موقع درخواست عکس رو توی روت کپی کنی و به یوزر نشون بدی بعدش هم پاک بشه ! البته این روش هم در بازدید های بالا فشار میاره به سرور !

اگه از کد زیر استفاده کنید لازم نیست که تصویر رو توی فضای عمومی سرور کپی کنید. موقع ذخیره تصویر روی کامپیوتر، فایل با اسم و پسوندن مناسب ذخیره می شه.

اما من می خوام تصاویر روی توی فضای عمومی سرور قرار بدم و اونها رو از دسترس افراد غیر مجاز خارج کنم. برای این مشکل چه راهی به ذهنتونمی رسه؟

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);
 

ziXet

مدیر انجمن PHP/MYSQL
اگه از کد زیر استفاده کنید لازم نیست که تصویر رو توی فضای عمومی سرور کپی کنید. موقع ذخیره تصویر روی کامپیوتر، فایل با اسم و پسوندن مناسب ذخیره می شه.

اما من می خوام تصاویر روی توی فضای عمومی سرور قرار بدم و اونها رو از دسترس افراد غیر مجاز خارج کنم. برای این مشکل چه راهی به ذهنتونمی رسه؟

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 درست کنی بعد هر عکسی رو خواستی نمایش بدی بری تو دیتابیس جستجو کنی و آدرس اصلیش رو سرور رو به دست بیاری و اگه پرمیشن لازم رو داشت اون رو لود کنی در غیر این صورت یه پیام خطا نشون بدی
 

greencat

Member
مطالب شما در مورد ذخیره تصویر توی پایگاه داده همگی درسته.

اما در مورد مطلبی که راجع به تصاویر خصوصی گفتید این سوال پیش می یاد که اگه من به دلایلی بخوام تصاویر رو توی فضای عمومی سرور قرار بدم و این تصاویر خصوصی باشن، کاربر با واد کردن ادرس تصاویر توی ادرس بار می تونه اونها رو ببینه.

در این مورد چی می گید؟

البته بجای تصویر می تونیم فایلهای متنی، پی دی اف، صوتی و . . . رو هم مد نظر بگیریم.

شما با استفاده از دستورات htaccess میتونید این مشکل رو حل کنید، که اگر درخواستی برای دیدن عکس‌ها داده شد به یک صفحه‌ی دیگه ای برود مثل یک صفحه‌ی 404 که به دلخواه خودتون طراحی شده و یا به هر صفحه‌ی دیگه‌ای کافی لینک در خواستی رو توسط $_SERVER['REQUEST_URI'] انالیز کنید که ببینید کاربر می‌خواد به طور مستقیم عکس رو لود کنه یا نه.

راهی هم که جناب ziXet گفتند خوبه.
یه راه دیگه هم داری!
اسم فایل رو تو دیتابیس ذخیره کنی و یک فایل مثلا به اسم img.php درست کنی بعد هر عکسی رو خواستی نمایش بدی بری تو دیتابیس جستجو کنی و آدرس اصلیش رو سرور رو به دست بیاری و اگه پرمیشن لازم رو داشت اون رو لود کنی در غیر این صورت یه پیام خطا نشون بدی

اما هنوز به نظر من استفاده مستقیم عکس در دیتابیس غیر ضروری و نامناسب هستش، مگر در شرایط خاص!
 

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

بالا