PDA

View Full Version : حرفه ای: مشکل با دانلود فایلهای حجیم توسط پی اچ پی



idocsidocs
چهارشنبه 20 آذر 1392, 19:17 عصر
برای یه فروشگاه فایل می خوام فایل های حجیم 100 مگابایتی رو با پی اچ پی برای کاربر بفرستم اما با توجه به سرعت پایین نت و محدودیت 30 ثانیه ای اسکریپتهای پی اچ پی امکان متوقف شدن اسکریپت وجود داره

با توجه به اینکه سرور فایل اشتراکی هست نمی شه تنظیمات سرور رو دستکاری کرد و محدودیت زمانی پی اچ پی رو برطرف کرد

برای حل این مشکل چه راه حلی سراغ دارید؟

rezaonline.net
چهارشنبه 20 آذر 1392, 19:35 عصر
سلام
اول اینکه وقتی شما فایلهایی حجیم دارید دیگه قید هاست اشتراکی رو بزنید ، اگر سرور داشته باشید با توجه به وبسرورتون که آپاچی هست یا nginx میتونی به سادگی بصورت xsendfile فایلهای حجیم رو برای دانلود بفرستید .
100 مگابایت سهله ، روی فایلهای چند گیگی هم به خوبی جواب میده . :)

idocsidocs
چهارشنبه 20 آذر 1392, 19:57 عصر
اول اینکه وقتی شما فایلهایی حجیم دارید دیگه قید هاست اشتراکی رو بزنید ، اگر سرور داشته باشید با توجه به وبسرورتون که آپاچی هست یا nginx میتونی به سادگی بصورت xsendfile فایلهای حجیم رو برای دانلود بفرستید .
سرورهای اختصاصی گرون هستن

می شه از xsendfile روی سرور اشتراکی استفاده کرد؟ تنظیمات خاصی نیاز داره؟

rezaonline.net
چهارشنبه 20 آذر 1392, 20:07 عصر
سرور مجازی ماهی 20 تا 40 تومن چیز مناسبی گیرتون میاد کیفیتش از هاست اشتراکی هم بیشتره .
در هر صورت روی هاست اشتراکی هم باید xsendfile نصب شده باشه که بتونید استفاده کنید .
به مدیری سرورتون اطلاع بدید .

idocsidocs
چهارشنبه 20 آذر 1392, 20:35 عصر
الان یه فایل با حجم کم رو با xsendfile دانلود کردم و بدون مشکل اجرا شد و باید فایلهای با حجم بیشتر رو تست کنم

با توجه به اینکه فروشگاه فایل ممکنه فایلهای با ارزشی داشته باشه، دانلود کردن فایل با xsendfile مشکل امنیتی پیش نمی یاره؟

کلا طرز کار xsendfileبه چه صورت هست؟

rezaonline.net
چهارشنبه 20 آذر 1392, 21:03 عصر
xsendfile یک mod وبسرور هست .
علنا فرآیند ارسال به دانلود رو میاره روی دوش مرورگر و دیگه پی اچ پی در محتوای فایل دخالتی نداره .

پی اچ پی فرآیند مجوز و کارهای لازم رو انجام میده و طی یک هدر آدرس رو میفرسته به وبسرور و وبسرور فایل رو میفرسته واسه دانلود .
دقیقا عین این میمونه که یک فایل استاتیک رو دانلود کنید .
:)

idocsidocs
چهارشنبه 20 آذر 1392, 21:18 عصر
دقیقا عین این میمونه که یک فایل استاتیک رو دانلود کنید .
با توجه به اینکه لینکها داینامیک هستن و پی اچ پی مجوزها رو چک می کنه امکان دور زدن سیستم وجود داره؟

idocsidocs
چهارشنبه 20 آذر 1392, 23:04 عصر
الان این کد رو استفاده کردم و جواب داد

header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate,post-check=0, pre-check=0');
header("Cache-Control: private",false);
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit();

اما این کد یه فایل با حجم 0 کیلو بایت ارسال کرد


header("Content-type: application/octet-stream");
header('Content-Disposition: attachment;filename="'.basename($file).'"');
header('X-Sendfile: '.$file);


مشکل کد دوم چیه ؟

rezaonline.net
چهارشنبه 20 آذر 1392, 23:52 عصر
با توجه به اینکه لینکها داینامیک هستن و پی اچ پی مجوزها رو چک می کنه امکان دور زدن سیستم وجود داره؟
خب این اصلا ربطی به xsendfile نداره ، شما باید خودتون این امکان رو ایجاد کنید .
فایلها رو در ریشه خارج از public_html قرار بدید در غیر اینصورت توی پوشه فایلها یک فایل htaccess. بسازید با محتوی deny from all


مشکل کد دوم چیه ؟
مسیر $file بعنوان مسیری که توانایی xsendfile رو داره تعیین نشده .
xsendfile رو هر کی نصب کرده درست نصب نکرده

idocsidocs
پنج شنبه 21 آذر 1392, 00:11 صبح
مسیر $file بعنوان مسیری که توانایی xsendfile رو داره تعیین نشده .
xsendfile رو هر کی نصب کرده درست نصب نکرده
مسیر $file وجود داره و توی کد اول فایل دانلود می شه

ولی توی این کد دانلود نمی شه، این احتمال هست که xsendfile نصب نشده باشه؟



header("Content-type: application/octet-stream");
header('Content-Disposition: attachment;filename="'.basename($file).'"');
header('X-Sendfile: '.$file);

rezaonline.net
پنج شنبه 21 آذر 1392, 02:07 صبح
احتمالش هست .

idocsidocs
پنج شنبه 21 آذر 1392, 23:10 عصر
کدوم یکی از این دو کد که توی پست 8 گذاشتم xsendfile هست؟

کد اول یا دوم؟

rezaonline.net
جمعه 22 آذر 1392, 00:40 صبح
دومی .

idocsidocs
جمعه 22 آذر 1392, 00:49 صبح
ولی الان کد اول رو استفاده می کنم و فایلهای 50 مگابایتی رو بدون مشکل دانلود می کنه و چند دقیقه هم طول می کشه تا دانلود بشه

کلا محدودیت 30 ثانیه تاثیری روی دانلود فایل ها داره؟

این کد چطور دانلود می کنه، پی اچ پی کل فایل رو به خروجی می فرسته و متوقف می شه یا اینکه پی اچ پی تا دانلود شدن کامل فایل فعال هست ؟