Upload ja suuri tiedosto

Miten saan PHP-softallani uploadattua suuria tiedostoja? Eli jopa gigan suuruisia tiedostoja. Vastaan tulee scriptin suoritusajan rajat, joita toki voi säätää, myös php.inistä uploadin kokoa isommaksi. Mutta muiten säätää koodista käsin esimerkiksi requestheaderia jos sellainen on tiellä. Vai onko?

Oletteko toteuttaneet tällaisia TOIMIVIA ohjelmia?
8950
Äänestä

Muut lukivat myös

Vastaukset 8

Vanhimmat

Käsittääkseni tuon pitäisi toimia pelkästään noita säätämällä, tosin gigan kokosissa tiedostoissa tulee monta ongelmaa, joten itse lähtisin etsimään toista ratkaisua noin suurille tiedostoille, esim ftp ohjelma, monet niistä osaa jatkaa jos keskytyy jne...

Gigan kanssa voi tulla ongelmia, palvelimen muistin kanssa jne...

Varmista, ettei palvelin ohjelmistollasi ole muistinkulutus rajaa jne... PHP:ssä on myös muistinkulutusraja, mutta ilmeisesti se ei vaikuta uppi tiedostoihin.

Sekä kuinka nopean yhteyden takana palvelin on, sillä selaimissakin voi olla joku maksimi raja joka tulee vastaan jne...

Millään web-hotellin palvelimilla tuota ei kannata eres yrittääkkään, ellei ole oma tai vuokra.

Äänestä

Joskus väsäsin kokeilumielessä "tiedosto pankki" koodin, joka on jo bitti taivaissa. Voisihan sitä kuitenkin vanhoja taitoja verestää. Eli kokeilin tuota uploadia koneessani 1.2Gt tiedostolla ja ainoat parametrit mitä pitää säätää olivat PHP.INI tiedoston upload_max_file_size, max_execution_time ja post_max_size arvo. Myös upload lomakkeen MAX_FILE_SIZE arvoa joutuu säätämään jos sitä käyttää. Varsinaisessa koodissa ei voi vaikuttaa kyseisiin asetuksiin, paitsi upload kentän koodissa voi vaikuttaa MAX_FILE_SIZE arvoon. 1.2Gt testi tiedoston siirto kesti 2 minuuttia ja 25 sekuntia kun tein sen localhostissa (eli mitään ei siirtynyt fyysisen verkon läpi). Request-header ei ole mitenkään tiellä (?).

MySQL:ään ei sitten isoja tiedostoja kannata viedä ja jos haluaakin, niin se vaatii omat muutoksensa. Isojen tiedostojen siirto vaatii nopeita tallennus välineitä ja levy välimuistiakin olisi syytä olla reippaasti. Sinäänsä FTP, tms. olisi parempi ratkaisu, sillä ei ole kivaa odottaa minuutteja tietämättä siitä kuinka paljon dataa on siirtynyt, mikä on arvioitu siirto aika, onko tullut virheitä, jne. Yleisesti ottaen PHP:n asetuksia voi lukea ini_get käskyllä ja osaa voi säätää/asettaa ini_set käskyllä. Alla on muutamia linkkejä:

http://fi2.php.net/ini_set
http://fi2.php.net/manual/fi/ini.php#ini.list
http://fi2.php.net/features.file-upload
http://www.faqs.org/rfcs/rfc1945.html (5.2 Request Header Fields)

Äänestä
  • Kiitoksia molemmille vastauksista!

    Onko käytännössä mahdollista/järkevää toteuttaa php:llä sovelluksen sisään jotain ftp-väylää tms. ..jos ymmärsit mitä tarkoitin? Ongelma tässä on se, että tiedoston uploadaus pitäisi olla mahdollista softasta käsin, mutta tuon kokoisten tiedostojen kanssa se taitaa olla vähän riskaabelia tavallisin konstein.

    Äänestä

  • pulmatar kirjoitti:

    Kiitoksia molemmille vastauksista!

    Onko käytännössä mahdollista/järkevää toteuttaa php:llä sovelluksen sisään jotain ftp-väylää tms. ..jos ymmärsit mitä tarkoitin? Ongelma tässä on se, että tiedoston uploadaus pitäisi olla mahdollista softasta käsin, mutta tuon kokoisten tiedostojen kanssa se taitaa olla vähän riskaabelia tavallisin konstein.

    Kyllä PHP:stä löytyy FTP-functiot http://fi2.php.net/manual/fi/ref.ftp.php sekä soceteilla onnistuu myös FTP:n käsittely, mutta niillä ei pysty korvaamaan kunnon FTP-ohjelmaa, koska PHP palvelimella, FTP-ohjelma käyttäjän koneella.

    Kun kerta upload pitää olla mahollista softasta, niin mites olis, että unohtaisit nämä palvelinpuolen scriptaus kielet ja tekisit koneelle ladattavan ohjelman joka pitäisi sisällään esim yksinkertaisen FTP-ohjelman?

    Jos hyvin nopea verkko, niin silloin virheensattuessa voi siirtää tiedoston uudestaan. Tai sitten jaat tiedostot pienempiin paloihin, jolloin aina kuittaus jos on siirto onnistunut.

    Äänestä

  • pulmatar kirjoitti:

    Kiitoksia molemmille vastauksista!

    Onko käytännössä mahdollista/järkevää toteuttaa php:llä sovelluksen sisään jotain ftp-väylää tms. ..jos ymmärsit mitä tarkoitin? Ongelma tässä on se, että tiedoston uploadaus pitäisi olla mahdollista softasta käsin, mutta tuon kokoisten tiedostojen kanssa se taitaa olla vähän riskaabelia tavallisin konstein.

    Juu, käsittääkseni ymmärsin. Tarkoitin FTP:llä lähinnä että käyttäjä siirtäisi tiedoston FTP:llä ja unohtaisi kokonaan WWW-pohjaisen upload:n. Jos tosiaan pitää saada se WWW-pohjainen upload ja PHP:llä tehtyä niin asia on toinen. Perus 4-10 rivin upload toimii kyllä siinä missä FTP, tms. mutta se ei ole käyttäjä ystävällinen. Uskoisin kuitenkin netistä löytyvän PHP:lle laajennuksia, tms. joilla saa helposti tehtyä upload sivuja joissa on mukana progress bar, yms. toiminnot. Itse tuskin kannattaa koskaan kovinkaan paljon koodia vääntää.

    Jos sen verran korjaisin viimekertaista vastaustani, että set_time_limit käskyllä voi myös säätää PHP scriptille annettua ajo aikaa. Tällä käskyllä ei kuitenkaan ole vaikutusta jos PHP käy safe mode:ssa.

    Miten noin yleisesti on. Pääsetkö itse asentamaan siihen palvelimme mihin olet ajatellut tehdä tätä upload juttua, erilaisia ohjelmia, tms. esim. PHP laajennuksia jos sellaisia on? Eli jos netistä löytyisi jotain niin pystyisikö asentamaan sen?

    Perinteisen upload:n ongelma on varmaankin siinä että jos tiedon siirto katkeaa niin se pitää aloittaa alusta. Toisaalta en tiedä osaavatko edes perus FTP ohjelmat jatkaa tiedon siirtoa. Itse tiedonsiirrossa tuskin pääsee tulemaan virheitä sillä TCP on varsin luotettava siirto tie (?).

    Jos itse joutuisin tekemään tuollaisen upload jutun tältä istumalta, niin tekisin sen ihan perus uploadilla. Sitten kun käyttäjät valittaisivat, niin sitten yrittäisin hakea netistä jotain progress bar juttua siihen vähän oloa helpottamaan. ;-).

    En ole kysynyt, mutta onko tämä uploadattava tiedosto joku satunnainen tiedosto minkä käyttäjä valitsee vai onko se joku tietty tiedosto käyttäjän kovalevyllä? Tai siis, ihan mielen kiinnosta että mikä tällainen sovellus on jossa pitää gigatavun tiedostoja siirtää, joku backup sovellusko?

    Äänestä

  • pulmatar kirjoitti:

    Kiitoksia molemmille vastauksista!

    Onko käytännössä mahdollista/järkevää toteuttaa php:llä sovelluksen sisään jotain ftp-väylää tms. ..jos ymmärsit mitä tarkoitin? Ongelma tässä on se, että tiedoston uploadaus pitäisi olla mahdollista softasta käsin, mutta tuon kokoisten tiedostojen kanssa se taitaa olla vähän riskaabelia tavallisin konstein.

    http://Testii
    ftp://Testii
    roksa://Testii
    HTTP://Testii
    FTP://Testii
    ROSKA://Testii

    Ei tää näytä esikatselussa linkkinä muuta kuin noi http rivit. Saas nähdä miten näyttää kun postaan. :-)


    Ei tästä viestistä kannata välittää.

    Äänestä

  • Testaan viellä :-) kirjoitti:

    http://Testii
    ftp://Testii
    roksa://Testii
    HTTP://Testii
    FTP://Testii
    ROSKA://Testii

    Ei tää näytä esikatselussa linkkinä muuta kuin noi http rivit. Saas nähdä miten näyttää kun postaan. :-)


    Ei tästä viestistä kannata välittää.

    http://t
    ftp://t
    https://t
    http:
    ftp:
    https:
    http
    ftp
    https

    Esikatselussa näkyy linkkinä vain viestin ensimmäinen rivi.

    Äänestä

  • http://t , ftp://t , https://t kirjoitti:

    http://t
    ftp://t
    https://t
    http:
    ftp:
    https:
    http
    ftp
    https

    Esikatselussa näkyy linkkinä vain viestin ensimmäinen rivi.

    sotkemaan Pulmattaren viesti ketjun. :-( Syvä pahoitteluni. Näiden kolmen turhan viestin yläpuolella on tuoreita asia viestejä.

    Äänestä

Kommentoi aloitusta


Pulmatar kirjoitti:

Miten saan PHP-softallani uploadattua suuria tiedostoja? Eli jopa gigan suuruisia tiedostoja. Vastaan tulee scriptin suoritusajan rajat, joita toki voi säätää, myös php.inistä uploadin kokoa isommaksi. Mutta muiten säätää koodista käsin esimerkiksi requestheaderia jos sellainen on tiellä. Vai onko?

Oletteko toteuttaneet tällaisia TOIMIVIA ohjelmia?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu