abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 16:11 | Nová verze

    Bylo oznámeno vydání Fedora Linuxu 40. Přehled novinek ve Fedora Workstation 40 a Fedora KDE 40 na stránkách Fedora Magazinu. Současně byl oznámen notebook Slimbook Fedora 2.

    Ladislav Hagara | Komentářů: 0
    dnes 13:44 | Upozornění

    ČTK (Česká tisková kancelář) upozorňuje (X), že na jejím zpravodajském webu České noviny byly dnes dopoledne neznámým útočníkem umístěny dva smyšlené texty, které nepocházejí z její produkce. Jde o text s titulkem „BIS zabránila pokusu o atentát na nově zvoleného slovenského prezidenta Petra Pelligriniho“ a o údajné mimořádné prohlášení ministra Lipavského k témuž. Tyto dezinformace byly útočníky zveřejněny i s příslušnými notifikacemi v mobilní aplikaci Českých novin. ČTK ve svém zpravodajském servisu žádnou informaci v tomto znění nevydala.

    Ladislav Hagara | Komentářů: 6
    dnes 13:33 | Komunita

    Byla založena nadace Open Home Foundation zastřešující více než 240 projektů, standardů, ovladačů a knihoven (Home Assistant, ESPHome, Zigpy, Piper, Improv Wi-Fi, Wyoming, …) pro otevřenou chytrou domácnost s důrazem na soukromí, možnost výběru a udržitelnost.

    Ladislav Hagara | Komentářů: 0
    dnes 13:00 | Nová verze

    Společnost Meta otevírá svůj operační systém Meta Horizon OS pro headsety pro virtuální a rozšířenou realitu. Vedle Meta Quest se bude používat i v připravovaných headsetech od Asusu a Lenova.

    Ladislav Hagara | Komentářů: 0
    dnes 04:33 | IT novinky

    Společnost Espressif (ESP8266, ESP32, …) získala většinový podíl ve společnosti M5Stack, čímž posiluje ekosystém AIoT.

    Ladislav Hagara | Komentářů: 0
    včera 23:44 | Nová verze

    Byla vydána nová stabilní verze 3.5 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). Přehled novinek také na YouTube. Nově lze využívat cloud (audio.com). Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 16:44 | Zajímavý článek

    50 let operačního systému CP/M, článek na webu Computer History Museum věnovaný operačnímu systému CP/M. Gary Kildall z Digital Research jej vytvořil v roce 1974.

    Ladislav Hagara | Komentářů: 0
    včera 16:22 | Pozvánky

    Byl zveřejněn program a spuštěna registrace na letošní konferenci Prague PostgreSQL Developer Day, která se koná 4. a 5. června. Na programu jsou 4 workshopy a 8 přednášek na různá témata o PostgreSQL, od konfigurace a zálohování po využití pro AI a vector search. Stejně jako v předchozích letech se konference koná v prostorách FIT ČVUT v Praze.

    TomasVondra | Komentářů: 0
    včera 03:00 | IT novinky

    Po 48 letech Zilog končí s výrobou 8bitového mikroprocesoru Zilog Z80 (Z84C00 Z80). Mikroprocesor byl uveden na trh v červenci 1976. Poslední objednávky jsou přijímány do 14. června [pdf].

    Ladislav Hagara | Komentářů: 6
    včera 02:00 | IT novinky

    Ještě letos vyjde Kingdom Come: Deliverance II (YouTube), pokračování počítačové hry Kingdom Come: Deliverance (Wikipedie, ProtonDB Gold).

    Ladislav Hagara | Komentářů: 9
    KDE Plasma 6
     (71%)
     (10%)
     (2%)
     (17%)
    Celkem 688 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: HTTP upload velkých souborů

    1.9.2011 23:52 Kit
    HTTP upload velkých souborů
    Přečteno: 1681×
    Ahoj, pokouším se zprovoznit na Apache službu pro upload velkých souborů. Pro soubory do 1 GB mi to funguje docela dobře, ale pokud je soubor větší, tak se soubor přenáší, ale nepřenese. Prostě to zkolabuje.

    Řešením by mohlo být rozdělit soubor u klienta na bloky a tyto bloky poskládat na serveru. Zatím jsem však našel jen aplikaci ve Flashi, která si nejprve natáhne celý soubor do RAM a teprve pak ho rozdělí a odešle. Flashi bych se rád vyhnul, načítání do RAM na klientovi i na serveru rovněž.

    Nejlepším by byl protokol FTP, ale ten nemůžu použít. Potřebuji, aby to bylo na klientovi jednoduché. Mohl bych použít i WebDAV, ale nevím, jak je to s podporou u prohlížečů. Má nekdo vhodné řešení, při kterém by klient vystačil s běžně nastaveným prohlížečem?

    Odpovědi

    2.9.2011 08:15 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Běžně nastavený „starší“ prohlížeč bude vždy posílat celý soubor najednou, což podle mne u takovýchhle velikostí není v současné ČR (s WiFi sítěmi nebo neskutečně pomalým ADSL uploadem) dobré řešení – když se po několika hodinách přenos v 90 % přeruší, musí uživatel začít znova. Takže bych určitě volil nějaké řešení, které bude umět navázat na přerušený upload (na klientovi tedy bude umět poslat část souboru). Existují na to různé Java Applety (hledejte applet upload), Flash aplikací by se taky určitě pár našlo. A nebo můžete použít HTML 5 – pokud se smíříte s tím, že to bude fungovat jen v prohlížečích, které to podporují (a nebo pro ostatní případně připravíte nějaké záložní řešení). V HTML 5 existuje File API, které umožňuje uploadovat víc souborů, číst z nich části, monitorovat přenos… Myslím, že se používá třeba v GMailu pro přidávání příloh (pokud je k dispozici). Samozřejmě k tomu pak bude potřeba podpora na straně serveru, aby dokázal klientovi nabídnout pokračování v přerušeném uploadu a poslal klientovi pozici, od které má pokračovat. Pokud je to něco kritického, může být také vhodné spočítat na obou stranách kontrolní součet souboru, aby bylo jasné, že při přenosu nedošlo k chybě.
    Max avatar 2.9.2011 08:18 Max | skóre: 72 | blog: Max_Devaine
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Pokud jde o apache, tak vím o tomto : LimitRequestBody, což by teoreticky mohlo značit, že limit u apache je 2GB soubor.
    V apache lze zprovoznit LFS (Large File Support), který by měl umožňovat práci s většími soubory, jak 2GB (kompilovat s : -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64)
    Zdar Max
    Měl jsem sen ... :(
    2.9.2011 08:53 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Pokud obě strany (klient i server) podporují HTTP 1.1 a stav 100 Continue, nemělo by ale dojít k tomu, že se přenese část a pak se přenos přeruší – velikost souboru přenáší klient už v úvodních hlavičkách, a hned na to by měl server odpovědět, že je soubor příliš velký.
    2.9.2011 13:55 Host
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Co treba tohle ? http://jumploader.com/
    2.9.2011 22:53 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Díky všem za názory. Pomalost ADSL řešit nemusím. Spíš hledám řešení, které nebude tak nehorázně zatěžovat server, jako metoda POST. Vezme si z RAM čtyřnásobek velikosti souboru a to mi ten server shazuje.

    File API vypadá zajímavě, jenom mám zatím problém to pochopit.

    JumpLoader vypadá hezky, ale zase takový komfort nepotřebuji. Kromě toho používá JRE, které každý klient nahráno nemá.

    Uvažuji o metodě HTTP PUT. Jen nevím, jak je to s podporou u běžných prohlížečů. Klidně i přes AJAX, resp. jQuery. Má s tím někdo zkušenosti? Potřebuji, aby to fungovalo z běžně nastaveného prohlížeče a nezatěžovalo server. Rád bych se vyhnul Javě a Flashi.

    Uvědomuji si, že toho chci mnoho, ale vlastně jen hledám náhradu za FTP běžící na HTTP s možností sledovat průběh uploadu.
    2.9.2011 23:05 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Zatížení serveru nezáleží na použité metodě (POST nebo PUT), ale na implementaci na straně serveru. Když nebudete příchozí data ukládat do paměti, ale rovnou je kopírovat do souboru na cílovém disku, nebude s pamětí problém.

    Pokud jde o upload souborů (tj. soubor je u klienta na disku, nevzniká v prohlížeči), žádný AJAX nebo jQuery ani jiný JavaScript vám nepomůže – nemáte se z něj jak dostat k souborům na disku. Jediná možnost přímo z prohlížeče je buď <input type=file> nebo právě File API (a nebo proprietární funkce prohlížečů, pak by ale stejně uživatel musel dané stránce dát speciální práva).
    3.9.2011 00:35 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Z toho mi vyplývá, že místo stávajícího MIME application/x-www-form-urlencoded budu muset použít multipart/form-data a přimět Apache, aby místo držení v paměti ukládal data ihned na disk.
    Luboš Doležel (Doli) avatar 4.9.2011 09:53 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Vy uploadujete data urlencoded? To se pak ničemu nedivím.
    4.9.2011 10:25 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Teď už ne. Už tam mám multipart/form-data, upload se provede bez chyby, ale stále to žere RAM na serveru (má to ukládat do diskové cache) a nefunguje apc.rfc1867, i když je nastavené (data pro progress bar). Viz níže.
    3.9.2011 21:25 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Zprovoznil jsem APC, soubory posílám přes <input type=file>. Používám stále POST podle nejrůznějších návodů, enctype="multipart/form-data" také, ale diskovou cache to stále nepoužívá. Soubor se sice nahraje, ale se soubory nad 1 GB to stále kolabuje.
    3.9.2011 21:35 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Nemáte tam nastavené nějaké limity? Na velikost požadavku, na dobu spojení?
    3.9.2011 21:53 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Kapacitní limity mám na 2000 MB, časové na 300 sekund. Už při uploadu 30MB souboru vidím, že Apache v RAM zabere cca 120 MB, než to nahraje.

    Zvláštní je, že apc_fetch('upload_'.$_GET['progress_key']) nevrací žádnou hodnotu, i když by mělo. Zde je apc.ini:
    extension=apc.so
    apc.rfc1867=on
    apc.max_file_size=2000M
    apc.shm_size=32
    apc.stat=1
    apc.ttl=86400
    apc.user_ttl=86400
    apc.lazy_functions=1
    apc.lazy_classes=1
    apc.mmap_file_mask=/home/tmp/apc.XXXXXX
    apc.rfc1867_freq=200k
    apc.gc_ttl = 259200
    Možná je tam něco zbytečně, něco chybí, nebo je něco špatně.
    xkucf03 avatar 3.9.2011 22:01 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    A dělá to skutečně Apache? Jak je napsaná ta aplikace, která ten POST zpracovává? A v čem je napsané? Chtělo by to, aby ta aplikace dostala proud dat, ne až všechno najednou, když se to nahraje.
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    3.9.2011 22:23 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Je to napsané v PHP a podle dokumentace by ten přijímaný soubor Apache měl sám přesměrovat do dočasného adresáře. Jenže ten zůstává prázdný.

    S tím proudem dat souhlasím. Proto jsem zpočátku hledal HTTP PUT, který by to tak měl nativně řešit. Jenže většina prohlížečů ho prý nepodporuje.
    xkucf03 avatar 4.9.2011 08:57 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    No, já bych to dělal přes servlety, ale když je tu nemáš… co takhle zkusit CGI skript? Ten může být napsaný v čemkoli, třeba i v tom PHP – nemám to vyzkoušené, ale je možné, že tady by ten Apache nasměroval proud dat od klienta do toho skriptu, aniž by se ho snažil nějak sám zpracovávat.
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    4.9.2011 09:53 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Podle mne ho Apache nijak nezpracovává. O případné uložení do dočasného souboru se stará až PHP. Apache by v tom mohl hrát roli jedině tehdy, pokud by byl nakonfigurován tak, aby požadavek bufferoval a do modulu/skriptu jej předal až celý najednou – ale nevím, zda vůbec něco takového jde v Apache nakonfigurovat.

    Chyba bude v konfiguraci Apache, nebo ještě spíš v konfiguraci PHP nebo v samotném skriptu. Na použité HTTP metodě to nezáleží – spíš by byl problém nakonfigurovat Apache tak, aby PUT předával do PHP.
    4.9.2011 10:31 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Právě o to bufferování by se mělo starat APC. Disková cache však zůstává prázdná. Dle rady a návodů jsem na PUT nepřešel, ale stále používám POST s upraveným enctype.
    4.9.2011 10:56 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    A na jakou velikost je nastaven ten buffer? Nemá smysl, aby byl moc velký, a už vůbec ne, aby to Apache bufferoval na disk, odkud to bude pak zase číst, předávat PHP a to to bude zapisovat jinam.
    4.9.2011 11:05 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Pochopil jsem to tak, že APC se skládá ze 2 (možná více) komponent:

    Primární funkcí je ukládání předkompilovaných PHP skriptů do bufferu v RAM. Ten je nastavený na 32 MB a je zaplněn 500 KB, zbytek je volný. Tato část funguje.

    Sekundární funkcí je RFC1867 pro upload datových souborů. Má za úkol ukládat příchozí data do diskové cache a stav přenosu zaznamenávat do dohodnuté proměnné v primární části. Tato část nefunguje, fungovat by měla a hledám příčinu.
    4.9.2011 18:33 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    For sure, PHP konfigurace upload_max_filesize a post_max_size je nastavena na větší hodnoty než 1GiB? (bacha na velké číslo, na 32bit PHP-ku to musí být méně než 2^31).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    4.9.2011 18:43 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    upload_max_filesize = 2000M
    post_max_size = 2000M
    4.9.2011 22:00 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Byl to nápad… Zkusil jsem si toto:
    <?php
      echo 'post_max_size: '.ini_get('post_max_size').'<br />';
      echo 'upload_max_filesize: '.ini_get('upload_max_filesize').'<br />';
      
      if(isset($_POST['hbtn']))
      {
        echo "Form has been sent<br />";
        if(isset($_FILES['hfile']))
        {
          echo 'Info name: '.$_FILES['hfile']['name'].'<br />';
          echo 'Info size: '.$_FILES['hfile']['size'].'<br />';
          echo 'Info type: '.$_FILES['hfile']['type'].'<br />';
          echo 'Info tmp_name: '.$_FILES['hfile']['tmp_name'].'<br />';
          if(!is_uploaded_file($_FILES['hfile']['tmp_name']))
          {
            echo 'ATTACK! or empty post :)<br />';
            exit(1);
          } else echo 'No attack<br />';
          echo 'File size: ' . filesize($_FILES['hfile']['tmp_name']) . '<br />';
        } else echo "ERROR, the file doesn't exist in \$_FILES array<br />";
      }
      else
      {
        if(isset($_GET['get_send']))
          echo "ERROR: Form has been sent, but a file hasn't recieved.";
      }  
      echo '<br /><br />';
    ?>
    <form action="testbigupload.php?get_send=yes" method="post" enctype="multipart/form-data">
      Send file:<br>
      <input name="hfile" type="file"><br />
      <input name="hbtn" type="submit" value="Send files">
    </form>
    
    A chování odešlu-odchází-nedojde se mi podařilo nasimulovat jen pokud upload_max_filesize či post_max_size měli nižší hodnotu než velikost uplodovaného filesu a během přenosu soubor v /tmp (,který je nastaven jako upload_tmp_dir) soubor ani „nevznikal“.
    Ale pokud byly hodnoty dostatečné pro velikost souboru (zkoušel jsem 1.6GiB files), tak v /tmp soubor okamžitě „rostl“.
    Nastavujete správný php.ini, restartoval jste apache po změně hodnot?
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    4.9.2011 22:35 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Nastavuji /etc/php5/apache2/conf.d/apc.ini, v phpinfo vidím změny.

    To by znamenalo, že ty konstanty musím _snížit_. Díky, zkusím.
    4.9.2011 23:06 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Pokud v phpinfo() tak je to pochopitelně správně.
    Snížit?, ne, možná jsem to nenapsal srozumitelně, ale chtěl jsem napsat, že popisovaného nežádoucího chování jsem docílil jen tehdy, pokud ty hodnoty (alespoň jedna z nich) byly menší než uploadovaný soubor.
    Možná jsem to měl doplnit o informaci, že jsem to zkoušel bez APC.
    Jestli Vás třeba nezlobí max_execution_time zkuste si jej na zkoušku dát na 0.
    A možná doplnit něco jako apc.rfc1867_freq = 5K (či na zkoušku 2M).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    4.9.2011 23:49 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Zkusil jsem to, nefungovalo. Nevadí.

    Bez APC? do /tmp? To bych potřeboval. Mně to všechno tlačí do RAM a případně do swapu. Pak to začne brzdit celý server.

    max_execution_time mě zlobilo, když jsem měl default 30 s a rychlost disku byla 20 MB/s. Soubory větší než 600 MB se nestihly uložit. Teď mám 300 s. Proto jsem si také udělal /home/tmp, aby přesun byl okamžitý, data zůstanou na stejném oddílu.

    apc.rfc1867_freq = 10k

    Někde jsem se dočetl, že popisované chování může mít na svědomí firewall. Možná měl dotyčný na mysli reverzní proxy.
    5.9.2011 07:51 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Mně to všechno tlačí do RAM a případně do swapu. Pak to začne brzdit celý server.
    Tohle chování mi pořád připadá divné. Můžete ukázat váš kód, který tohle chování způsobuje?
    6.9.2011 18:19 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Kód jsem stáhnul ze stránky http://valums.com/ajax-upload/, popisované chování má od začátku i po různých úpravách. Zkoušel jsem upload přes jiný ajaxový i flashový uploader, ale výsledek byl pokaždé stejný: Zahlcená RAM.

    Věta Tohle chování mi pořád připadá divné. mě inspirovala k domněnce, že chybu musím hledat v nastavení Apache.

    Server je Debian Lenny. Je možné, že v něm je Apache defaultně zkompilován tak, aby uploadované soubory ukládal do RAM místo do /tmp? PHP je spouštěno přes FastCGI.

    Nejzvláštnějsí na celé té situaci je fakt, že po Apache nechci nic víc, než co FTP umí už desítky let.
    6.9.2011 19:06 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Jukl jsem na to jen zběžně, co se děje na klientovy jsem narychlo nepobral, ale serverová část je docela jasná.
    Pokud to ovšem běží přes HttpRequest (bo nevím, bo klienta jsem nepobral :-)), tak to ale vběhne do fce qqUploadedFileXhr->save(), kde je použita fce stream_copy_to_stream(), a tady o ní píšou nelichotivě, co se paměti týče.
    Co kdyby jste zkusil ten můj testovací scriptík
    Jinak něco k tématu.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.9.2011 19:48 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Ajax je použit jen pro monitorování stavu přenosu.

    Zkusil jsem ten skript, opět se stejným výsledkem: Soubor se místo do /tmp ukládá do RAM. Podobně jsem dopadl i s Adploits, tam se řešil status 500.
    6.9.2011 21:04 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Je možné, že v něm je Apache defaultně zkompilován tak, aby uploadované soubory ukládal do RAM místo do /tmp?
    O uploadované soubory by se neměl starat Apache, ale až PHP. Apache jenom ten proud dat ze sítě přesměruje na standardní vstup PHP. Alespoň doufám, že to takhle funguje i pro FastCGI.
    Nejzvláštnějsí na celé té situaci je fakt, že po Apache nechci nic víc, než co FTP umí už desítky let.
    V tom je ale zároveň skryta odpověď, proč je s tím problém – Apache je HTTP server, a protokol HTTP byl zamýšlen pro přenos malých souborů ze serveru na klienta a k přenosu ještě menších požadavků z klienta na server. Vy teď najednou po něm chcete přenášet obrovský soubor, k čemuž původně nebyl určen, a ještě z klienta na server, k čemuž už vůbec nebyl určen. Naopak FTP je protokol navržený pro přenos (i velkých) souborů. Já chápu, proč to chcete mít přes HTTP – ale ten povzdech je zhruba stejný, jako byste se podivoval, že se kladivem šrouby utahují blbě, když to se šroubovákem jde dobře už desítky let. To, že se teď kladiva používají na všechno a se šroubovák umí zacházet jen experti je smutná pravda, ale není to chyba těch nástrojů.
    6.9.2011 21:21 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Kdyby to záleželo jenom na mně, už by tam bylo FTP. Na velké soubory nic lepšího neznám. Klidně bych použil i jiný protokol, pokud by byl podporován běžnými prohlížeči se standardní konfigurací.

    E-mail byl také původně vymyšlen pro přenos zpráv do 64 KB a jak to dopadlo.
    5.9.2011 09:35 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Bez APC, neuděláte „progress-bar“ nebo jinou notifikaci přenosu (nebo možná jo, ale nestandardně).
    APC, jestli se nepletu, nijak nenapomáhá uploadu souborů, krom toho, že můžete lehce udělat „progress-bar“. (nemám zkušenosti s APC a uploadem větších souborů, a nějak se mi nechtělo to na testovacím serveru zprovozňovat :-()
    Jak píše pan Jirsák, standardně Apache nijak soubor nezpracovává (krom nějaké bufferu), a uplodovaný soubor by měl normálně projít do nastaveného adresáře upload_tmp_dir pod jménem tmp_name odkud si jej nejlépe pomocí fce move_uploaded_file() přesunete kam potřebuje, bo po ukončení skriptu se smaže (tmp a cíl je nejlepší mít na jednom filesystému).
    U všech defaultních nastavení Apache a PHP, s kterými jsem se setkal, by mělo stačit jen nastavit upload_max_filesize = 2000M, post_max_size = 2000M a případně vhodně zvolit upload_tmp_dir (případně file_uploads a „nově“ i max_file_uploads).
    Asi bych zkusil apc.enabled=0 a taky bych ukázal ten formulář a spracovávací skript :-).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.9.2011 18:41 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Příloha:
    Díky. Pořád jsem si myslel, že APC je nutný pro přesměrování uploadu z RAM do /tmp. Teď už vím, že ne. Něco je špatně v Apache.

    V přiloženém souboru jsou spojeny upload.php a upload_frame.php, protože abclinuxu.cz umožňuje jen jednu přílohu.
    Max avatar 6.9.2011 20:03 Max | skóre: 72 | blog: Max_Devaine
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Umožňuje více příloh, jen musíš dát pokaždé náhled, aspoň myslím :)
    Zdar Max
    Měl jsem sen ... :(
    6.9.2011 20:11 jekub
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    priznam se, ze html&php jsou pro me pole neorane, ale nemuze byt problem v chybejicim lomitku na zacatku definice adresare (/tmp)?
    	$folder = "tmp/"; 	//specify folder for file upload
    
    6.9.2011 20:47 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    V daném případě úvodní lomítko chybí úmyslně. Je to cílový adresář, který je podadresářem aktuálního adresáře. Ten podadresář samozřejmě založený mám a uploadovaný soubor se do něj skutečně v konečné fázi uloží. Přiznávám, že je to nešťastně zvolený název, nechal jsem ho podle autora původního skriptu. Do hotového projektu přijde jiný název, ale to teď neřeším.
    6.9.2011 20:59 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Pominu-li, že návratová hodnota move_uploaded_file() není testována a v $folder chybí lomítko na začátku, takže se soubor neuloží (nepřesune), tak je to OK a u mě to seje správně, bez APC a PHP jako modul.
    Jen pro info jaké je hodnota: FcgidMaxRequestLen.
    Řešíme, že nepřijde velký files, nebo že každý upload leze do paměti místo na disk?
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.9.2011 21:13 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Včera jsem přes ADSL skoro celý den uploadoval soubor 1.5 GB. Uložil se bez chyby, ale Apache přitom sežral 6 GB RAM. Řešíme tedy lezení do paměti místo na disk pro Apache na Debian Lenny.

    PHP mám přes FastCGI, hodnotu FcgidMaxRequestLen jsem nenašel, pouze MaxRequestLen 15728640.
    6.9.2011 22:00 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Studuji tady nějaký starý zdroják a ve FastCGI toto kdysi dělalo, jednou alokovalo paměť pro uploadované soubory a už si ji nechalo pro příště, pak tam byla přidána volba MaxRequestInMem a default by měla mít 65536 a stalo se to někdy kolem verze 2.2, ale v Lennym je 2.4 - nepletu-li se -, tak nevím…
    Pro jistotu bych na MaxRequestInMem jukl a pak, vím že je to otrava, ale zkusil bych to přes mod_php :-(.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    6.9.2011 22:42 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Nastavil jsem MaxRequestInMem i MaxRequestLen, ale žádná změna. Mezitím jsem našel v tempu část souboru, který jsem uploadoval před půlhodinou. To by mohlo znamenat, že se něco přece jen změnilo. Jen se mi to nedaří zopakovat.
    6.9.2011 22:58 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Jen aby bylo jasno :-)
    MaxRequestInMem na nějakou malou hodnotu (65KiB) a MaxRequestLen na hodnotu větší než uploadovaný soubor.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    7.9.2011 17:36 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Většinou od každého nápadu zkouším různé varianty, v tomto případě jsem vyzkoušel nejprve MaxRequestLen menší a pak větší než soubor. Teď mě napadá, že ještě jednou vyzkouším menší hodnotu, protože se mi v tempu objevil malý fragment nahrávaného souboru a nepodařilo se mi to zopakovat.
    7.9.2011 19:44 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Ze zoufalství jsem vypnul FastCGI a použil mod_php. Šlape to jak hodinky, jen mě teď čeká hromada práce s nastavováním vlastníků a práv.

    Takže celý problém je ve FastCGI. Neopravil jsem ho, ale obešel.
    7.9.2011 21:58 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    Pokud je tam již verze, která bere MaxRequestInMem, mělo by stačit tuto hodnotu nastavit na třeba 65KiB a je to, ale pokud ji to nežere tak asi smůla.
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    7.9.2011 22:26 Kit
    Rozbalit Rozbalit vše Re: HTTP upload velkých souborů
    mod_php je proti FastCGI ve většině případů plus. Funkční i výkonnostní. Problémy jsou pouze s vlastnickými právy, které v tomto případě naštěstí řešit nemusím. FastCGI mě těžce zklamalo a nepoužiji ho, dokud ho skutečně nebudu potřebovat.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.