Benim dosyam (126 MB boyutunda, .exe) bana sorun veriyor.Laravel'de neden büyük dosyalar kolayca indirilemiyor?
Standart laravel indirme yöntemini kullanıyorum.
Belleği artırmayı denedim ancak yine de bellek tükendiğimi ya da 0 KB boyutunda bir dosya indirdiğimi söylüyor.
Dokümantasyon, büyük dosya boyutları hakkında bir şey ifade etmiyor.
Kodum ben yanlış yapıyorum
ini_set("memory_limit","-1"); // Trying to see if this works
return Response::download($full_path);
şey nedir? Düzenleme - -
Phill Sparks comment Olsam, bu şimdiye ne var ve o çalışır. Phill'in artı bir kısmı php.net'in bir birleşimi. Eksik bir şey olup olmadığından emin değil misiniz?
public static function big_download($path, $name = null, array $headers = array())
{
if (is_null($name)) $name = basename($path);
// Prepare the headers
$headers = array_merge(array(
'Content-Description' => 'File Transfer',
'Content-Type' => File::mime(File::extension($path)),
'Content-Transfer-Encoding' => 'binary',
'Expires' => 0,
'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0',
'Pragma' => 'public',
'Content-Length' => File::size($path),
), $headers);
$response = new Response('', 200, $headers);
$response->header('Content-Disposition', $response->disposition($name));
// If there's a session we should save it now
if (Config::get('session.driver') !== '')
{
Session::save();
}
// Below is from http://uk1.php.net/manual/en/function.fpassthru.php comments
session_write_close();
ob_end_clean();
$response->send_headers();
if ($file = fopen($path, 'rb')) {
while(!feof($file) and (connection_status()==0)) {
print(fread($file, 1024*8));
flush();
}
fclose($file);
}
// Finish off, like Laravel would
Event::fire('laravel.done', array($response));
$response->foundation->finish();
exit;
}
Neredeyse işe yaradı, hem readfile hem de fpassthru() ile hatalı bulunamadı dosya alıyorum. Ama bağlantılara baktım ve işe yarayan bir şey yapmak için seninle birleştirdim. Ne kadar doğru olduğundan emin değil miyim? Sonuncuyu göstermek için sorumu düzenledim. – Lango
Merhaba @Lango, Çözümünüzle ilgili herhangi bir sorun göremiyorum. Yanıtımı, fread + print yaklaşımını ve 'ob_get_clean()' da dahil etmek için güncelledim. Fpassthru'nun neden aynı dosya tanıtıcısını kullandıklarından, fpassthru'nun neden işe yaramayacağını göremiyorum - ama eğer sizin için çalışıyorsa o zaman onunla yuvarlanın! –
Teşekkürler Phill! Şimdi her şey çalışıyor. – Lango