• 2 رای - 4.5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
دانلود بدون لینک مستقیم؟
#1
Question 
سلام
اگه لینک به صفحه php بدم و با fopen و fread از فایل بخونم بعد echo کنم فکر کنم بشه ولی چجوری به browser بفهمونم باید داونلودش کنه ؟
Huh
  پاسخ
تشکر شده توسط : farhad.programmer
#2
از طریق هدر.
Two hands working can do more than a thousand clasped in prayer
  پاسخ
تشکر شده توسط : Y.P.Y HiddeN mrbm farhad.programmer
#3
سلام،
همونی که میلاد جان گفتن:
کد پی‌اچ‌پی:
header('content-type: application/zip');
header('content-disposition: attachment; filename= FILENAME');
echo(
$FILEDATA); 
وبلاگ: Yousha.Blog.ir

صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
http://gulfnews.com/opinion/thinkers/ira...i-1.500997
  پاسخ
#4
خیلی ممنون
Big GrinRolleyes

ببخشید ولی یه سوال دیگه : با این روش میشه قابلیت resume رو هم داشت؟
البته بعید به نظر میرسه !!!!!!
  پاسخ
تشکر شده توسط : farhad.programmer
#5
شدنش میشه.
من یه کلاسی تو PHPClass دیده بودم که یکی از دئستان بهم معرفی کرده بود. اینکارو می کرد
فایلشو اپلود کردم


فایل‌های پیوست
.php   class.httpdownload.php (اندازه 7.76 KB / تعداد دانلود: 37)
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط : Y.P.Y HiddeN mrbm admin zoghal farhad.programmer alic
#6
این تابع به دردت می خوره:
کد پی‌اچ‌پی:
function resumable_get_file($file)
{
    
$offset 0;
    
$length filesize($file);
    if (isset(
$_SERVER['HTTP_RANGE']))
    {
        
// if the HTTP_RANGE header is set we're dealing with partial content
        
$partialContent true;
        
preg_match('/bytes=(\d+)-(\d+)'$_SERVER['HTTP_RANGE'], $matches);
        
$offset intval($matches[1]);
        
$length intval($matches[2]) - $offset;
    }
    else
    {
        
$partialContent false;
    }
    
$file fopen($file'r');
    
// seek to the requested offset, this is 0 if it's not a partial content request
    
fseek($file$offset);
    
$data fread($file$length);
    
fclose($file);
    if (
$partialContent)
    {
        
// output the right headers for partial content
        
header('HTTP/1.1 206 Partial Content');
        
header('Content-Range: bytes ' $offset '-' . ($offset $length) . '/' $length);
    }
    
header('Accept-Ranges: bytes');

  پاسخ
تشکر شده توسط : zoghal mrbm hidensoft farhad.programmer alic
#7
اگر امکان resume رو ایجاد نکنید مطمئنا این امکان وجود نداره. همون کلاس رو مطالعه بفرمایید. کد بالا هم خوبه.
  پاسخ
تشکر شده توسط : farhad.programmer
#8
اگه یه دانلود منیجر خیلی ساده بنویس هم میشه براحتی با هاهنگ کردن کدت با اون قابلیت resume و هر چیز دیگه دلخواهی رو به اون اضافه کنی
به این ترتیب که اون منیجر یکه درخواست (post یا get) می فرسته و بعد از بررسی می تونی تصمیم بگیری چکار کنی.
مثلا درخواست شامل یه پسورد، نام فایل و نقطه شروع(برای seek) باشه
اینجوری حتی می تونی چند پارت با دانلود کنی و آخر سر به هم بچسبونی
که نوشتن او منیجرش هم خیلی سخت نیست
فقط کاربر باید اول اون رو دانلود کنه بعد با اون فایل اصلی دانلود بشه و مثلاً یه progress bar هم نشون داده بشه.
البته این برای دانلود های با حجم بالا خوبه
چون مثلاً اگه حجم انلود منیجیرت 200kb باشه کسی ازش برای یه فایل 100kb استفاده نخواهد کرد
بالاخره این هم یه راه!!
UndecidedIdea
MRB
  پاسخ
تشکر شده توسط : farhad.programmer
#9
(۱۳۸۸ بهمن ۲۰, ۰۶:۰۶ ب.ظ)nasserghiasi نوشته: این تابع به دردت می خوره:
کد پی‌اچ‌پی:
function resumable_get_file($file)
{
    
$offset 0;
    
$length filesize($file);
    if (isset(
$_SERVER['HTTP_RANGE']))
    {
        
// if the HTTP_RANGE header is set we're dealing with partial content
        
$partialContent true;
        
preg_match('/bytes=(\d+)-(\d+)'$_SERVER['HTTP_RANGE'], $matches);
        
$offset intval($matches[1]);
        
$length intval($matches[2]) - $offset;
    }
    else
    {
        
$partialContent false;
    }
    
$file fopen($file'r');
    
// seek to the requested offset, this is 0 if it's not a partial content request
    
fseek($file$offset);
    
$data fread($file$length);
    
fclose($file);
    if (
$partialContent)
    {
        
// output the right headers for partial content
        
header('HTTP/1.1 206 Partial Content');
        
header('Content-Range: bytes ' $offset '-' . ($offset $length) . '/' $length);
    }
    
header('Accept-Ranges: bytes');


البته با این تابع امکان دانلود چند پارتی وجود نداره.
دوستان اگر کلاسی دارند که امکان دانلود چند پارتی هم می ده دریغ نکنند!
  پاسخ
تشکر شده توسط : farhad.programmer hidensoft
#10
(۱۳۸۸ آبان ۲۳, ۱۰:۵۵ ق.ظ)alimokhlesi نوشته: شدنش میشه.
من یه کلاسی تو PHPClass دیده بودم که یکی از دئستان بهم معرفی کرده بود. اینکارو می کرد
فایلشو اپلود کردم

سلام دوستان عزیز

کسی نحوه استفاده از این کلاس رو میتونه بگه؟
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان