PDA

View Full Version : نشان ندادن زمان و حجم دانلود در بعضی از فایل ها



Beginner Programmer
پنج شنبه 11 اردیبهشت 1393, 23:42 عصر
با سلام
تو بعضی از سرورها و فایل های دانلودی مشاهده میکنیم که حجم و زمان دانلود از سمت سرور برای کلاینت های نمایش داده نمیشه!
از چه ترفندی استفاده میکنند؟و دلیل اینکار چیه؟
اگر امکان داره کدهاش هم برام بزارید.(خیلی حیاتیه)
با تشکر

Beginner Programmer
سه شنبه 16 اردیبهشت 1393, 12:53 عصر
از مهندسان گرامی کسی نیست من رو تو این پروژه کمک کنه؟
الان 1 هفته است دارم تو اینترنت سرچ میزنم ولی به نتیجه نرسیدم!

aalmair
سه شنبه 16 اردیبهشت 1393, 20:45 عصر
فرض کن که یه فایلی داری در سرور . به جای اینکه آدرس فایل و به سرور بدی اون فایل رو توسط php کنترل و اطلاعاتی که می خواهی ارسال می کنی




$fullpath="1.pdf";
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);

// Determine Content Type
switch ($ext) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default: $ctype="application/force-download";
}

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fsize);
ob_clean();
flush();
readfile( $fullPath );

esagh27
یک شنبه 25 خرداد 1393, 02:14 صبح
سلام.داداش اگه شما همون کاربری هستی که تو انجمن اشیانه همین سوالو پرسیدی اونجا جوابتو دادم:لبخند: اینجا (http://ashiyane.org/forums/showthread.php?118630-%D9%86%D8%B4%D8%A7%D9%86-%D9%86%D8%AF%D8%A7%D8%AF%D9%86-%D8%B2%D9%85%D8%A7%D9%86-%D9%88-%D8%AD%D8%AC%D9%85-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D8%AF%D8%B1-%D8%A8%D8%B9%D8%B6%DB%8C-%D8%A7%D8%B2-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7&p=695856#post695856)

MMSHFE
یک شنبه 25 خرداد 1393, 11:37 صبح
این ترفند خاصی نداره. تکنیک خاصی هم نیست و درواقع بد نوشتن برنامه است. وقتی شما توی دانلود غیرمستقیم هدر Content-Length رو ست نکنید و فایل رو هم با fread بصورت تکه تکه بخونید، سیستم کلاینت نمیفهمه سایز کل فایل چقدره و همینطور باید علاف بشینه تا دانلود تمام بشه.

esagh27
یک شنبه 25 خرداد 1393, 17:29 عصر
این ترفند خاصی نداره. تکنیک خاصی هم نیست و درواقع بد نوشتن برنامه است. وقتی شما توی دانلود غیرمستقیم هدر Content-Length رو ست نکنید و فایل رو هم با fread بصورت تکه تکه بخونید، سیستم کلاینت نمیفهمه سایز کل فایل چقدره و همینطور باید علاف بشینه تا دانلود تمام بشه.چرا داداش ترفند داره و ربطی به بد نوشته شدن برنامه نداره البته شاید این هم یکی از دلائل باشه اما خب روشهای دیگه هم هست.من جواب این کاربر رو تو انجمن اشیانه به صورت کامل دادم و اینجا هم به اختصار توضیح میدم.این توضیح رو اولش بدم که ما کلا این ترفند رو واسه استفاده از نت رایگان ایرانسل و دانلود با اپرا هندلر گوشی انجام میدادیم چون اپرا هندلر البته نوع جاواش در حالت عادی فقط 15 مگ دان میکرد اما اگه حجم فایل موقع دانلود مشخص نبود فایل رو با هر حجمی دان میکرد.لزومات اینکار یه هاست با کنترل پنل یا همون سی پنل 11 هستش(واسه استفاده ای که ما میکردیم به یه اسکریپت گلایپ یا پی اچ پی چروکسی نیاز بود اما این لازمه واسه نت رایگان بود اما در حالت عادی واسه تموم فایلای روی اون هاست مورد نظر این اتفاق میفته)خب کافیه توی سی پنل وارد قسمت optimize website بشیم وcompress all content ر فعال کنیم و روی گزینه اپدیت کلیک کنیم.بعد از اون تموم فایلایی که از روی اون هاست دان میشن حجم فایل نشون داده نمیشه:لبخند:دو نکته 1:باید تو سی پنل گزینه optimize website موجود باشه تو بعضی از هاستا دیدم که نیست.2:من از سی پنلای دیگه و وجود این گزینه اطلاعی ندارم چون باهاشون کار نکردم شاید اونا هم چیزی شبیه این داشته باشن:لبخند:خب قرار بود من توضیح مختصر بدم:لبخند:یا حق

eshpilen
دوشنبه 26 خرداد 1393, 08:34 صبح
شما فشرده سازی آپاچی رو برای تمام فایلها/خروجی فعال میکنی و چون این فشرده سازی بصورت On the fly انجام میشه، یعنی خروجی همزمان با اینکه توی RAM میاد برای ارسال به کلاینت، بلافاصله بعدش فشرده شده و مستقیما به کلاینت ارسال میشه، یعنی اینطور نیست که آپاچی مثلا تمام فایل رو اول واسه خودش یک بار بخونه و همش رو فشرده کنه و بعد تازه شروع به ارسال فایل فشرده شده به کلاینت بکنه، بنابراین خود آپاچی هم قبل از اینکه ارسال فایل به پایان برسه (تمامش خونده شده و از RAM و فرایند فشرده سازی که در مرحلهء بعدش قرار داره عبور کرده باشه) از حجم دقیق کل خروجی فشرده شده اطلاع نداره، و بنابراین طول خروجی ارسال شده رو با هدر Content-Length برای کلاینت مشخص نمیکنه، و این باعث میشه که کلاینت هم تا پایان دریافت از اینکه حجم فایل چقدره اطلاعی نداشته باشه.
پس مشاهده میکنید که همه چیز در نهایت به همین هدر ساده Content-Length برمیگرده!
و البته اینکه چرا فشرده سازی On the fly انجام میشه و چرا تا قبل از اتمام کل عملیات ارسال نمیشه حجم دقیق خروجی فشرده شده رو دونست، صرفا مسائل و محدودیت های فنی نسبتا ساده و روشنی هستن. ضمنا طبیعتا اگر بخوایم حجم دقیق کل خروجی رو از قبل بدونیم، باید حداقل بخشی از الگوریتم مربوط به فشرده سازی رو روی تمام فایل اجرا کنیم، که این یک پردازش افزوده و باعث کاهش پرفورمنس میشه و احتمالا نقض غرض On the fly بودن فشرده سازی!

MMSHFE
دوشنبه 26 خرداد 1393, 09:55 صبح
چرا داداش ترفند داره و ربطی به بد نوشته شدن برنامه نداره...

دوست عزیز، شما هم همونطور که جناب eshpilen گفتن، دارین جلوی ست شدن همون هدر رو میگیرین و اینکار هم ربطی به cPanel نداره و ازطریق تنظیمات خود Apache هم میشه اینکار رو انجام داد. با خود PHP هم قابل انجامه و برای همین گفتم ترفند خاصی نداره. بهرصورت عدم اعلام حجم فایل یکی از مشکلات برنامه نویسی سایت محسوب میشه و حالا اینکه شما از این کار برای دور زدن محدودیتهای Opera استفاده کردین، فرقی توی اصل قضیه ایجاد نمیکنه و چنین کاری نه تنها باعث نارضایتی کاربران سایت خواهد شد (چون حتی ممکنه Resume Support بودن رو تحت تأثیر قرار بده) بلکه به احتمال زیاد روی SEO Score سایت شما هم تأثیر منفی خواهد داشت.

esagh27
دوشنبه 26 خرداد 1393, 15:24 عصر
دوست عزیز، شما هم همونطور که جناب eshpilen گفتن، دارین جلوی ست شدن همون هدر رو میگیرین و اینکار هم ربطی به cPanel نداره و ازطریق تنظیمات خود Apache هم میشه اینکار رو انجام داد. با خود PHP هم قابل انجامه و برای همین گفتم ترفند خاصی نداره. بهرصورت عدم اعلام حجم فایل یکی از مشکلات برنامه نویسی سایت محسوب میشه و حالا اینکه شما از این کار برای دور زدن محدودیتهای Opera استفاده کردین، فرقی توی اصل قضیه ایجاد نمیکنه و چنین کاری نه تنها باعث نارضایتی کاربران سایت خواهد شد (چون حتی ممکنه Resume Support بودن رو تحت تأثیر قرار بده) بلکه به احتمال زیاد روی SEO Score سایت شما هم تأثیر منفی خواهد داشت.بنده هم عرض کردم ایراد از برنامه نویسی هم میتونه از دلایلش باشه و اینکه همه چیز به اون هدر مربوط میشه هم کاملا درسته اما اینکه میفرمایید ارتباطی به سی پنل نداره من متوجه نمیشم پس این تنظیمات هدر که تو سی پنل هست و قابل تغییر هست و تو تصاویر هم کاملا مشخصه رو من خودم ساختم؟http://smileys.smileycentral.com/cat/36/36_19_2.gifاین مساله کاملا تست شده هست و غیر قابل نقضه و این امکان تو سی پنل وجود داره و به برنامه نویسی سایت مربوط نمیشه(حداقل تو تموم هاستایی که من تا به الان باهاشون کار کردم به این شکل بوده)و شما هم میتونید تست کنیدhttp://smileys.smileycentral.com/cat/36/36_1_13.gifاگه میخواید من تنظیمات هاست رو به حالت اولیه برگردونم و یه فایل رو از همون هاست دانلود کنم تا ببینیم حجم فایل رو نشون میدهhttp://smileys.smileycentral.com/cat/36/36_1_13.gifالبته مسائل برنامه نویسی و اینکه از طریق خود اپاچی هم میشه اینکارو کرد رو من روش حرفی ندارم من اینجا راجع به این امکان توی سی پنل بحث کردمhttp://smileys.smileycentral.com/cat/36/36_1_13.gif

MMSHFE
دوشنبه 26 خرداد 1393, 15:37 عصر
دوست عزیز، اینکه میگم ربطی به cPanel نداره بخاطر اینه که این پنل هم صرفاً یک اسکریپته که اقدام به تغییر تنظیمات وب سرور میکنه و منظورم این بود که بدون وجود این تنظیمات هم میشه توسط خود Apache (ترجیحاً روی هاست اختصاصی یا VPS) و یا با کمک htaccess. این قابلیتها رو به سایت اضافه کرد. ضمناً اینجا یک محیط علمیه و این نمادهای خنده و emoticonها جایگاهی داخلش نداره. سعی کنید با مطالب علمی جلب توجه کنید نه با این نمادها. موفق باشید.

eshpilen
سه شنبه 27 خرداد 1393, 10:20 صبح
مهندس سخت نگیر، سیستم هکری اینطوریه دیگه :چشمک:
شکلک و یا عجق وجق نویسی (راستی اسمش چی بود؟) رو در چیزهایی که با دنیای هکرها ارتباط دارن زیاد میبینیم.
اتفاقا من میخواستم مطالب پست ایشون رو بعنوان نمونه ای از شیوهء نگرش/کار و سطح/عمق دانش اغلب هکرها برای شما مطرح کنم (البته در پست خصوصی).
یعنی میخوام بگم در دنیای هک اغلب سیستم اینطوریه. علمی و اصولی نیست، سطحیه؛ درحد کار راه اندازی. البته هستن معدود هکرهای خبره یا دانشمند که واقعا از مکانیزم های اصلی به شکل علمی و عمیق سردربیارن، ولی عمدهء حجم هکرها و معلومات هکرهای عادی کم و بیش به این اشکال است. اما با همین روشها و سطح هم میبینی خیلی وقتا خیلی جاها رو هک میکنن!!
پس یک هکر از بعد علمی لزوما خیلی باسواد یا نابغه نیست، حتی اگر کلی سایت هک کرده باشه.
البته من از حضور اینطور کاربران در اینجا خوشحال هستم و اینکه معلومات و تجربیاتشون رو در اینجا هم به این صورت روشن و صادقانه در اختیار میذارن، چون بهرحال میتونه مفید باشه و در خیلی موارد نکات و چیزهای یادگرفتنی خوبی توی مطالب هکرها هم پیدا میشه، حتی برای حرفه ایهای برنامه نویسی و امنیت! مثلا همین نکته که چطور بعضی محدودیت های سرویس دهنده ها رو دور بزنیم خودش معلوماتیه بالاخره! یا بعضی وقتا روشهای غیرمنتظره (و در عین حال خیلی وقتا ساده) ای که برای نفوذ بکار میبرن، که ممکنه خودشون هم کامل و دقیق از طرز کارش سردرنمیارن، ولی میبینی ما که هکر نیستیم تاحالا متوجه اون نکته و حفره نشده بودیم (شاید به این دلیل که ما سمت هکرها نیستیم و از اون سمت با قضایا مواجه نمیشیم)، پس اینکه یک نفر اینو بهمون نشون بده میتونه خیلی مفید باشه و باید ازش ممنون باشیم از این بابت. ما خودمون نرفتیم توی اون محیطها و وقت نداریم، اونوقت یکی میاد مثل عامل نفوذی واسمون گزارش میده خب خوبه دیگه باید استفاده کرد :لبخند:
البته این رابطه میتونه اغلب دو طرفه باشه، یعنی دو طرف معلوماتی دارن که با هم در جریان بحث مبادله میشه و هر دو طرف میتونن چیزهای مفیدی یاد بگیرن و دید جدیدی بدست بیارن.

esagh27
سه شنبه 27 خرداد 1393, 15:43 عصر
دوست عزیز، اینکه میگم ربطی به cPanel نداره بخاطر اینه که این پنل هم صرفاً یک اسکریپته که اقدام به تغییر تنظیمات وب سرور میکنه و منظورم این بود که بدون وجود این تنظیمات هم میشه توسط خود Apache (ترجیحاً روی هاست اختصاصی یا VPS) و یا با کمک htaccess. این قابلیتها رو به سایت اضافه کرد. ضمناً اینجا یک محیط علمیه و این نمادهای خنده و emoticonها جایگاهی داخلش نداره. سعی کنید با مطالب علمی جلب توجه کنید نه با این نمادها. موفق باشید.
دوست عزیز راجع به اون بحث من سعی کردم در حد توان و تجربیاتم جواب اون دوست عزیز رو بدم حالا اینکه بنده اشتباه فکر میکنم یا مطالب من مفید بوده یا نه قضاوت باشه با اون دوست و دوستان دیگه که این مطالب رو میبینن و از شما هم واسه نظراتتون کمال تشکر رو دارم.ایشالا که نظرات شما واسه دوستان مفیدتر بوده باشه.و اما راجع به بحث شکلک گذاشتن واقعا جای تاسف هستش که بخوایم راجع به این موضوع بحث کنیم و طرح این مساله از سوی شما کاملا بعید بود چرا این smileys ها و شکلک ها نشانگر احساس هستند و احساس جمع علمی و غیر علمی و من و شما نداره.تو اینکه این محیط کاملا علمی هست که مطلقا شکی نیست اما من فکر نکنم با گذاشتن شکلک به کسی خدایی نکرده توهینی کرده باشم یا مطالب علمی شخصی رو زیر سوال برده باشم که شما ناراحت شدید.در ضمن من به دنبال جلب توجه نیستم و نیازیم به این کار ندارم.این بحث سوای علمی بودن دوستانه هم هست و من ایرادی از باب گذاشتن شکلک نمیبینیم و فکر هم نمیکنم کسی حق رو تو این بحث به شما بده:لبخند:مطمئنا اگه مشکلی بود تو فرومها شاهد این شکلکها نبودیم:لبخند:ایشالا که همه ماها وسعت دیدمون رو بازتر کنیم.سپاس