Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Download-sivusto

Sivun loppuun

Lebe80 [20.09.2005 19:24:57]

#

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?

ville-v [20.09.2005 19:37:23]

#

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");

?>

Lebe80 [20.09.2005 22:16:59]

#

no voihan visva... Eipä taas tullu noin yksinkertanen ratkaisu mieleen.

thänks, eiköhän se silleen toimi

Lebe80 [21.09.2005 09:36:50]

#

eipä muuten toiminukaan.... :\

Niko [21.09.2005 11:39:36]

#

looppaa ja tulosta pari kymmentä tavua kerralla?
sitten kutsut set_time_limit() niin että ei aikaraja ylity...

Lebe80 [21.09.2005 14:37:50]

#

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.

Lebe80 [21.09.2005 17:11:36]

#

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... :(

maker_ [23.09.2005 17:26:06]

#

Mäpä heitän vitsin.Ku pätkäsee 10min niin sitten vaan parempi servu että asiat latautuvat 10min:D

Lebe80 [25.09.2005 10:37:45]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta