Download Header in VPS

پرسیده شده
فعالیت 1479 روز پیش
دیده شده 789 بار
0

سلام

(عذرخواهی میکنم سوالمو جلسه درستی مطرح نکردم)

من از این کد برای تست دانلود فایل از آدرس مستقیم استفاده میکنم و ی تست انجام دادم در لوکال هاست(کار نکرد) و سرور مجازی(ب جای اینکه فایل رو دانلود کنه یا فایل باز میشه یا ی سری کاراکتر نامفهوم نمایش میده) به همراه نام فایل بین کاراکترها یا ی صفحه سفید نمایش میده اما در هاست لینوکس عملکرد صحیحی داره

https://github.com/TimOliver/PHP-Framework-Classes/blob/master/download.class.php

ممنون میشم اول ی توضیح کامل در مورد این کد بهم بدین و راهنماییم کنید کد رو تصحیح کنم که در سرور مجازی و لوکال مشکلی نباشه

فکر کردم تنظیماتی در سرور یا لوکال هاست داره یا شایدم اکستنشن اما هرچی سرچ کردم هیچکدام نبود

با درخواست های هدر،حلقه ها و بخش زیادی از کد که قبلا استاد توضیح دادم آشنا هستم مابقی رو متوجه نمیشم 

فایل پیوست

علیرضا دهکار
علیرضا دهکار

22 فروردین 99

1
حذف شده

من متوجه نشدم دقیقا مشکلتون کجای کار بود چون اسکریپت هم روی VPS و هم روی لوکال، بدرستی کار میکنه.

ولی کلیت کارو میگم تا با سازو کار کدهای این کلاس آشنا بشید.

با تابع get_headers میتونید هدر فایل remote رو بگیرید.(بجای استفاده از curl)

در مورد کد اگه بخوام توضیح کلی بدم مثالم رو روی IDM میگم:

شما آدرس صفحتون رو به IDM میدید مثلا: mysite.com/dl.php

IDM درخواستی به dl.php میفرسته و کدهای داخل اون اجرا میشه و اول constructor کلاس Downloader اجرا میشه و بعد download_file اجرا میشه، هدر ها ست میشن و fopen فایل مورد نظرو باز میکنه، وارد if نمیشه(ریکوئست اول HTTP_RANGE وجود نداره و fseek اجرا نمیشه) و مستقیم while اجرا میشه. به اندازه chunksize بایت های فایل خونده میشه و در بافر خروجی چاپ میشه(پیش فرض فعاله) و در نهایت flush میشه و هدرها + خروجی به سمت کلایت ارسال میشه.

اگر هنوز استارت هم نکرده باشید، با این چند عمل، سایز فایل روی IDM قابل نمایش هست.(در هدر ست شده)

وقتی IDM استارت میشه، مدام بین سرور و کلاینت رفتو آمد بوجود میاد(تمام کدهای این صفحه مدام خوانده میشود) در رکوئست های بعدی HTTP_RANGE وجود داره و زمانی که فایل دانلودی مورد نظر برای بار های بعدی باز میشه(fopen)، از طریق fseek مقدار offset رو میگیره و میفهمه از کجای فایل رو بخونه و به سمت خروجی ارسال کنه.

بالا url رو به شکل ساده dl.php مثال زدم ولی در مثال های کاربردی مثلا به این شکل url میسازیم:

http://mysite.com/dl.php?filename=anyfileToDownload
OR
http://mysite.com/download/anything
OR
...

تا برای فایل های مختلف روی سرور یا حتی فایل های remote لینک های متفاوت و حتی زماندار تولید کنیم و دانلود را از داخل سرورمون مدیریت کنیم.

* یه نکته هم روی سرور باید در تنظیمات PHP.ini باید allow_url_fopen = on باشد تا بتونید بصورت remote فایل هارو دانلود کنید.

 

فایل پیوست

محسن موحد

توسط

محسن موحد

22 فروردین 99

حذف شده
ممنون از راهنمایی و توضیحات کاملتون الان کد تو هاست لینوکس هیچ مشکلی نداره و حتی با وارد کردن آدرس ریموت فایل دانلود میشه اما در vps همانند تصاویر پاسخ قبلی کاراکترهای نامفهوم نمایش میده allow_url_fopen بررسی شد و مساوی on هست ای کاش ی سرفصل بود برای کانفیگ vps که کمی آشنایی باشه و مابقی رو خودمون بریم یادبگیریم
علیرضا دهکار

23 فروردین 99

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

23 فروردین 99

حذف شده
امیدوارم باشه واقعا لازمه برای من که سر در نمیارم از سرور. ممنونم بابت راهنماییتون مشکل برطرف شد. قبلا ی کد ساده نوشته بودم ک فایل های حجیم رو نمیشد باهاش دانلود کرد (فقط با header بود، نمیدونستم چجوری از حلقه استفاده کنم که قابلیت ادامه دانلود داشته باشه) و نهایت حجم میشد 10 مگ . با سرچ رسیدم به دوتا کد که بنظر خودمم این کد بهتر بود و البته امتیاز بیشتر در گیت هاب داشت و توضیحاتی که شما دادین دیدم رو نسبت به کد و آشنایی بیشتر بهتر کرد، بازم ممنونم بابت وقتی که میزارید
علیرضا دهکار

26 فروردین 99

حذف شده
?
محسن موحد

26 فروردین 99

0
حذف شده

سلام.

مشکلی نداره روی لوکال.

داخل پارامتر متد download_file نام فایلی که روی سرور محلی قرار داده(remote نیست) و قراره دانلود بشه رو وارد میکنید و constructor هم یک پارامتر dl_filename داره که مشخص میکنه محتوای ارسالی با همچین filename ای ارسال میشه و روی سیستم کاربر ذخیره خواهد شد.

کارشم به این صورته که کل فایلو یکجا نمیخونه، قسمت به قسمت میخونه و جریانی از داده های باینری(تکه تکه) توو بافر خروجی چاپ میکنه و به ترتیب برای سرور ارسال میشه.(اون قسمت while)

حالا اگه روی لوکال مشکل دارید، کدتون بهمراه خطای تولید شده رو بفرستید.

 

فایل پیوست

محسن موحد

توسط

محسن موحد

22 فروردین 99

حذف شده
پاسخ بعدی
علیرضا دهکار

22 فروردین 99

0
حذف شده

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

این لاین هارو حذف کردم 

//assert the file is valid
if( !is_file( $filename ) )
	throw new Exception( 'Downloader: Could not find file \''.$filename.'\'' );
		
//make sure it's read-able
if( !is_readable( $filename ) )	
	throw new Exception( 'Downloader: File was unreadable \''.$filename.'\'' );

content type رو به application/force-download تغییر دادم

سایز فایل رو کمی آشنایی داشتم با curl که دریافت میکنم و پاس میدم به هدر اما خب هنگام دانلود نمایش نمیده

بافر فایل رو تکه تکه میکنه؟

اولین بار که اقدام میشه به دانلود:

http://uupload.ir/files/۷u۰h_dlerr.png

دفعات بعدی:

http://uupload.ir/files/oua۵_fghfgh.png

سون لرن قبلا برای دانلود فایل های جلسات ی لینک خاص داشت برای هر فایل و آدرس اصلی فایل معلوم نبود چیه که الان اون سیستم رو ندارن من میخوام ی چیزی شبیه به همون رو پیاده سازی کنم 

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

فایل پیوست

علیرضا دهکار

توسط

علیرضا دهکار

22 فروردین 99