nedladdning av stora filer

  • Författare
  • Meddelande

niod09

html-kodare

  • Inlägg: 16
  • Blev medlem: 17 jan 2012, 00:20

nedladdning av stora filer

Inlägg05 maj 2012, 11:15

Har problem med att ladda ner stora filer (>1gig) från en av mina sidor. Nedladdningen startar men avbryts efter ca 500M varje gång. Om jag avkommenterar filesizeraden så funkar det inte alls. Använder följande enkla nedladdningskod:

header('Content-Description: File Transfer');
header("Content-type: {$mimetype}");
header("Content-Disposition: attachment; filename=\"{$name}\"");
//header('Content-Length: ' . filesize($path));
ob_clean();
flush();
readfile($path);
exit;

Har hört med webhotellet eftersom jag misstänkte att det kunde vara någon begränsning på serversidan men de vet inte varför det inte funkar. Hur komma vidare?

Niklas
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11180
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: nedladdning av stora filer

Inlägg07 maj 2012, 08:04

Testa samma kod (och fil) på en annan maskin och se om det fungerar där.

Logga PHP-error till fil och se om du får något fel.
...
..:
.... /mos
Användarvisningsbild

Olof

sql-kodare

  • Inlägg: 53
  • Blev medlem: 10 nov 2011, 11:14

Re: nedladdning av stora filer

Inlägg07 maj 2012, 22:41

Vad exakt är det för fel du får? Vad är det för execution time?

niod09

html-kodare

  • Inlägg: 16
  • Blev medlem: 17 jan 2012, 00:20

Re: nedladdning av stora filer

Inlägg15 maj 2012, 15:51

Har fortfarande inte fått det att funka. Webbhotellet har försökt att lägga hemsidan på nya servrar men det hjälpte inte.
I log_filen får jag felmeddelandet: PHP Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 2982252545 bytes)
Testade att ändra memory_limit med ini_set. När jag har med ändringen i koden laddas 2-300M ned och sedan avbryts nedladdningen. Utan ini_set laddas bara 235byte ner.

Vet inte riktigt hur jag ska komma vidare.
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11180
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: nedladdning av stora filer

Inlägg15 maj 2012, 16:34

Googla felmeddelandet: "PHP Fatal error: Allowed memory size" och du får ett antal tips.

Ser ut som att minnet äts upp, standardtipset verkar vara att öka begränsningen av hur mycket minne som PHP kan allokera, man ökar tills det funkar...

Sätt upp samma miljö på studentservern, eller annan server, och testa där, och se vad som händer.

Gjorde ett litet test på studentservern, http://www.student.bth.se/~mos/test/memlimit.php

Koden för testet:
Kod: Markera allt
<?php
echo "Getting current memory_limit: " . ini_get('memory_limit') . "<br/>";
ini_set('memory_limit', '250M');
echo "Increasing memory to 250M and retrieving new setting: " . ini_get('memory_limit') . "<br/>";
ini_set('memory_limit', '25M');
echo "Decreasing memory to 25M and getting new setting: " . ini_get('memory_limit') . "<br/>";
ini_set('memory_limit', '40M');
echo "Increasing memory to 40M and getting new setting: " . ini_get('memory_limit') . "<br/>";


På studentservern (när jag testade) var max 32M, jag kan minska, men inte öka minnesbegränsningen.

På en annan server går det bra att öka minnesbegränsningen med exakt samma skript. Beror alltså på hur servern är konfigurerad.

Relaterad svar på Stackoverflow:
cannot-increase-memory-limit-with-ini-set

PHP-manualen om 'memory_limit' (här finns även tips om funktioner som kan visa hur mycket minne ditt skript äter upp):
http://php.net/manual/en/ini.core.php#i ... rce-limits

Summa summarum, kolla hur mycket minne du har tillgängligt. Öka det tills ditt skript fungerar.
Läser man manualen om readfile() så säger den:
Note:

readfile() will not present any memory issues, even when sending large files, on its own. If you encounter an out of memory error ensure that output buffering is off with ob_get_level().


När minnet väl fungerar så kan man behöva se över hur länge PHP-skriptet får exekvera:
http://php.net/manual/en/function.set-time-limit.php
...
..:
.... /mos

niod09

html-kodare

  • Inlägg: 16
  • Blev medlem: 17 jan 2012, 00:20

Re: nedladdning av stora filer

Inlägg23 maj 2012, 22:48

Det här börjar bli en följetång. Det funkar fortfarande inte. Tackar för tidigare tips som jag också prövat. Fick till slut följande meddelande från webbhotellet:

PHP körs via CGI, och för att inte PHP-processer ska bli liggandes kvar "döda" och stjäla minne/resurser så avslutas dem och startas om efter ett visst antal körningar för att försäkra sig om att inget ligger kvar och skräpar.
Vår tekniker kollar på möjliga lösningar för att det inte ska ske, men tills vidare bör du lösa så besökarna får filerna via direktlänkar så apache leverar filerna direkt istället för via PHP


Har då testat att försöka komma åt filerna för nedladdning genom att göra vissa mappar publika men stött på ett annat problem. :-)
Jag kan som allmän användare exempelvis öppna filen hemsida.se/publik/mapp/film.mov men har inte rättighet att se vilka filer som ligger i mappen hemsida.se/publik/mapp/. Detta gäller även om jag sätter rättigheterna på både mappen publik och mapp till 777.

lösning?
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11180
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: nedladdning av stora filer

Inlägg24 maj 2012, 10:12

Gör en .htaccess-fil och enable directorylistings.

Kod: Markera allt
Options +Indexes


Ungefär som beskrivs i (slutet av artikeln):
http://www.htaccess-guide.com/disable-d ... -listings/
...
..:
.... /mos

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 32 gäster