abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 06:00 | Komunita

Na YouTube byl publikován Blender Institute Reel 2016, ani ne dvouminutový sestřih z filmů, které vznikly za posledních 10 let díky Blender Institutu. V institutu aktuálně pracují na novém filmu Agent 327. Dění kolem filmu lze sledovat na Blender Cloudu. Videoukázka Agenta 327 z června letošního roku na YouTube.

Ladislav Hagara | Komentářů: 0
dnes 01:02 | Zajímavý článek

Minulý týden byly vydány verze 1.2.3 a 1.1.7 webového poštovního klienta Roundcube. V oznámení o vydání bylo zmíněno řešení bezpečnostního problému nalezeného společností RIPS a souvisejícího s voláním funkce mail() v PHP. Tento týden byly zveřejněny podrobnosti. Útočník mohl pomocí speciálně připraveného emailu spustit na serveru libovolný příkaz. Stejně, jak je popsáno v článku Exploit PHP’s mail() to get remote code execution z roku 2014.

Ladislav Hagara | Komentářů: 0
včera 16:00 | Nová verze

Byla vydána verze 0.98 svobodného nelineárního video editoru Pitivi. Z novinek lze zmínit například přizpůsobitelné klávesové zkratky. Videoukázka práce s nejnovější verzí Pitivi na YouTube.

Ladislav Hagara | Komentářů: 1
včera 15:00 | Zajímavý software

Stop motion je technika animace, při níž je reálný objekt mezi jednotlivými snímky ručně upravován a posouván o malé úseky, tak aby po spojení vyvolala animace dojem spojitosti. Jaký software lze pro stop motion použít na Linuxu? Článek na OMG! Ubuntu! představuje Heron Animation. Ten bohužel podporuje pouze webové kamery. Podpora digitálních zrcadlovek je začleněna například v programu qStopMotion.

Ladislav Hagara | Komentářů: 3
7.12. 21:21 | Nová verze Ladislav Hagara | Komentářů: 0
7.12. 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 2
7.12. 00:10 | Nová verze

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 9
6.12. 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 27
6.12. 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (8%)
 (5%)
 (3%)
Celkem 799 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: HTTP upload velkých souborů

1.9.2011 23:52 Kit
HTTP upload velkých souborů
Přečteno: 1513×
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: 66 | 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: 64 | 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: 66 | 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: 66 | 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: 66 | 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: 45 | 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-Výuka.cz, Nekuřák.net
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: 45 | 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-Výuka.cz, Nekuřák.net
4.9.2011 09:53 Filip Jirsák | skóre: 66 | 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: 66 | 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: 66 | 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: 66 | 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: 64 | 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.