Pereiti prie turinio

Gigabaitinio failo atsisiuntimo programavimo problemos... (PHP)


Rekomenduojami pranešimai

Sveiki,

Klientas į svetaine talpina didelius failus (gigabaitinius iki 1,5Gbaito), problemos su atsisiuntimu

iš svetainės.

Jei nutrūksta siuntimas, tai ir viskas, nepalaikoma resume... ar kažkas panašaus.

Gal teko susidurti su panašiomis problemomis?

Gal tai yra pačio serverio konfigūracijos problemos, kažkas turi būti pakeista php.ini faile ar panašiai,

adminas man nieko konkretaus taip pat nepasakė... ar dėl laiko limito kažkas blogai, nes siuntimas gali trukti keletą valandų.

 

Čia funkcija kuria naudoju atsisiuntimui, į funkcija tiesiog paduodamas failo vardas, siunčiami .avi failai.

Dėkui.

 

 

function file_resume($file){

 

//First, see if the file exists

if (!is_file($file)) { die("<b>404 File not found!</b>"); }

 

//Gather relevent info about file

$len = filesize($file);

$filename = basename($file);

$file_extension = strtolower(substr(strrchr($filename,"."),1));

 

//This will set the Content-Type to the appropriate setting for the file

switch( $file_extension ) {

case "exe": $ctype="application/octet-stream"; break;

case "zip": $ctype="application/zip"; break;

case "mp3": $ctype="audio/mpeg"; break;

case "mpg":$ctype="video/mpeg"; break;

case "avi": $ctype="video/x-msvideo"; break;

default: $ctype="application/force-download";

}

 

//Begin writing headers

header("Cache-Control:");

header("Cache-Control: public");

 

//Use the switch-generated Content-Type

header("Content-Type: $ctype");

if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {

# workaround for IE filename bug with multiple periods / multiple dots in filename

# that adds square brackets to filename - eg. setup.abc.exe becomes setup[1].abc.exe

$iefilename = preg_replace('/\./', '%2e', $filename, substr_count($filename, '.') - 1);

$names = explode('_', $iefilename, 2);

//$real_name = $names[1];

$real_name = $filename;

header("Content-Disposition: attachment; filename=\"$real_name\"");

} else {

$names = explode('_', $filename, 2);

//$real_name = $names[1];

$real_name = $filename;

header("Content-Disposition: attachment; filename=\"$real_name\"");

}

header("Accept-Ranges: bytes");

 

$size=filesize($file);

//check if http_range is sent by browser (or download manager)

if(isset($_SERVER['HTTP_RANGE'])) {

list($a, $range)=explode("=",$_SERVER['HTTP_RANGE']);

//if yes, download missing part

str_replace($range, "-", $range);

$size2=$size-1;

$new_length=$size2-$range;

header("HTTP/1.1 206 Partial Content");

header("Content-Length: $new_length");

header("Content-Range: bytes $range$size2/$size");

} else {

$size2=$size-1;

header("Content-Range: bytes 0-$size2/$size");

header("Content-Length: ".$size);

}

//open the file

$fp=fopen("$file","rb");

//seek to start of missing part

fseek($fp,$range);

//start buffered download

while(!feof($fp)){

//reset time limit for big files

set_time_limit(0);

print(fread($fp,1024*8));

flush();

ob_flush();

}

fclose($fp);

 

exit;

}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Yra tekę susidurti su panašiomis problemomis. Žinoma, ne su gigabaitiniais failais, tačiau būdavo ir su mažesniais (200 MB, 400 MB), kad siuntimas nutrūkdavo. Tai problemą išsprendžiau su šia funkcija: http://www.awesomephp.com/?Tutorials*16/Download-file-with-resume,-stream-and-speed-options.html

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 4 savaičių...

Yra tekę susidurti su panašiomis problemomis. Žinoma, ne su gigabaitiniais failais, tačiau būdavo ir su mažesniais (200 MB, 400 MB), kad siuntimas nutrūkdavo. Tai problemą išsprendžiau su šia funkcija: http://www.awesomephp.com/?Tutorials*16/Download-file-with-resume,-stream-and-speed-options.html

 

Dėkui Topsai, tai užvedė ant kelio, nutrūkdavo dėl resume nebuvimo.

Su resume susitvarkiau, bet vis vien po 5-6 minučių atsijungdavo.

Taigi sprendimo nebuvo. Paskui užvertė kitais darbai ir tik dabar vėl prisėdau prie problemos ir susitvarkiau...

Bendrom jėgom su adminu atradom išeiti, be apache serverio konfigūravimo ir nauju apache moduliu diegimu.

Genialumas - paprastume. Tiesiog visa darba atidavėm apache, be jokiu skriptu ir funkcijų.

Tiesiog .htaccess faile nurodai, kokiu tipu failus downloadinti, o kode duodi tiesiogini linką į failą.

Ir viskas.

Apakęs buvau, kai po dienos ieškojimų ištrini visus skriptus ir funkcijas ir viskas važiuoja.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...