Osaako kukaan neuvoa, miten voisi "ladata" selaimella suuria tiedostoja.
Nyt minulla on ollut purkkaversio käytössä, joka siirtää suuret tiedostot palvelimen temppi-kansioon, ja poistaa ne sieltä tietyn ajan kuluttua. Tämä tosin ei ole mielestäni hyvä, koska suuret tiedostot voivat ajaa palvelintilan loppuun.
Tämä on ollut nyt käytössä, mutten pidä sitä varsin hyvänä ratkaisuna.
Toisena vaihtoehtona käytin headereita
header('Content-Disposition: attachment; filename="polku/polku/downloaded.pdf"');
, jottei käyttäjälle näkyisi suoraan tiedoston oikea osoite.
Ja lopuksi lukenut tiedoston readfilen tapaisella funktiolla (readfile_chunked löytyy php.netistä), mutta php ei anna ladata esim. 15megaa suurempaa tiedostoa tai katkaisee yhteyden n.10 minuutin kuluessa.
Onko joku keksinyt paremmat tavan "download"-sivustolle, joka mahdollistaisi esim. +100 megan tiedostojen latauksen?
Onko ongelmasi siis isojen tiedostojen lataaminen ilman, että niiden polku näkyy?
Muuta lataustiedoston mime-tyyppi headerilla samaksi kuin tiedoston, ja includeta tiedosto siihen perään tyyliin:
<?php header("Content-Type: tiedoston mime-tyyppi"); include_once("polku/polku/tiedosto.pdf"); ?>
no voihan visva... Eipä taas tullu noin yksinkertanen ratkaisu mieleen.
thänks, eiköhän se silleen toimi
eipä muuten toiminukaan.... :\
looppaa ja tulosta pari kymmentä tavua kerralla?
sitten kutsut set_time_limit() niin että ei aikaraja ylity...
Niko: tuolla tavalla se on alkujaankin ollut. Flush() vain täyttää php-manuskan mukaan pikkuhiljaa muistin ja löysinkin että ob_flush() osaisi tyhjentää apachen muistia samalla. Täytyy kokeilla taas illalla. Kiitos kuitenkin kaikille.
Ei saakeli, ei toimi kyllä vieläkään. Jotenkin tuntuu että jokin puskuri täyttyy ja sen takia lataus katkeaa.
Eli nopealla yhteydellä (sisäverkko) ison tiedoston lataus onnistuu (160 megs), mutta ulkoa testatessani lataus loppuu 15 megan (latautunut n. 5 minuuttia) kohdalla ja selain ilmoittaa latauksen päättyneen ilman virhettä...
==================================
jahas
virhekin löytyi kun jaksoi odottaa keskeneräisen tiedoston avaamista notepadilla
CGI Timeout The specified CGI application exceeded the allowed time for processing. The server has deleted the process.
Eli vaikka php:ssa olen määritelly set_time_limit(0):ksi, jottei aikarajaa pitäisi olla, on ymmärtääkseni serverillä oma viiden minuutin aikaraja. Onko tietoa, pystyykö php:lla ohittamaan tätä aikarajaa?
ja serverinä Microsoft-IIS/5.0
==========================
minä vielä: ;)
"Ratkaisukin" löytyi tutulta php.net sivustolta
When you are working with IIS, PHP timeout is valid only when it's lower than script timeout defined by IIS. IIS 5 has a default timeout of 300 seconds. If you need a higher timeout, you also have to change IIS properties. Otherwise, your server will stop your PHP script before it reaches its own timeout.
eli eikun vaan serveriä conffailemaan... :(
Mäpä heitän vitsin.Ku pätkäsee 10min niin sitten vaan parempi servu että asiat latautuvat 10min:D
maker_ kirjoitti:
Mäpä heitän vitsin.Ku pätkäsee 10min niin sitten vaan parempi servu että asiat latautuvat 10min:D
No kiitti, eipä auta jos käyttäjä prutkuttelee hitaalla yhteydellä. Ei paljoa auta servon nopeus.
Asia on nyt ratkaistu niin, että kopiotavat tiedostot kopioidaan erilliseen temp-kansioon (jonka alle luodaan kansio käyttäen mm.md5-funktiota), josta ne poistetaan aikasintaan 12h kuluttua.
Kopioitaessa tarkkaillaan servon levytilaa, ja liian täyteen mennessä tiedostot poistetaan aikaisemmin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.