PHP Upload souborů

15:11 - 06.02.2007

Jednoduše a přehledně

Co je to upload souborů?
Upload souborů je formulář kde vybereme soubor a ten odešleme na server. Poté si jej můžeme znovu stáhnout nebo prohlídnout. V tomto článku se dozvíte jak udělat upload souborů v programovacím jazyce PHP.

K čemu to je dobré?
Nemusíte nahrávat soubor přes FTP, stačí přes prohlížeč. Můžete to využit pro rychlé nahráváni souborů a fotek.

Začneme formulářem, ve kterém si vebereme soubor a ten pak stiskem tlačítka "Nahrát" odešleme. Budeme potřebovat znát a umět formuláře, ale zvládneme to i bez nich. Ale musíte umět základy HTML a PHP.

Následujicí kód se pouze vloží do HTML mezi tag <body> a </body>

<form action="nahrat.php" method="post" enctype="multipart/form-data">
</form>

Takhle by vypadalo nastavení tagu form, nebo-li nastavení formuláře
Červenou barvou je označený tag form.
Zelenou barvou je označené místo k PHP scriptu co tento formulář zpracuje. V našem případě to je soubor "nahrat.php".
Modrou barvou, je zaznačená metoda. V našem případě, to je metoda POST, protože si myslím, že by to s metodou GET nešlo, neboť upload souborů pracuje přes HTTP POST.
Bez této věci by náš script nefungoval. Říká formuláři, že bude obsahovat nějaké soubory, které potom zpracujem.

Ale tím nekončíme. Teprve jsme zadali nastavení formuláře, kde, co a jak má nahrát. Následujíci script vložíme mezi tagy <form> a </form>.

<input type="file" name="fupload">

Červeně je znázorněn tag input.
Zeleně je znázorněn typ. V našem případě chceme vybrat soubor a jako hodnotu chceme celou cestu k souborů, abychom ho mohli nahrát na server. K tomu slouží atribut file.
Oranžově máme znázorněno jméno nebo název hodnoty. Díky tomu se nám v PHP vytvoří proměnná $fupload, která bude obsahovat adresu souboru, který se nahraje na server.

A taky potřebujem tlačítko, které nám to odešle. Následujíci script vložíme pod předchozí script, ale musí být pořad mezi tagy <form> a </form>

<input type="submit" value="Nahrát">

Červeně je označen tag input.
Oranžově je označen typ. Submit slouží k tomu aby odeslal hodnoty do souboru nahrat.php, který jsme zadali při nastavování fotmuláře (hodnota atributu action v tagu form).
Zelenou barvou máme označený atribut value, který udává hodnotu, která bude na tom tlačítku.

Celý HTML script je zde.

<html>
  <head>
    <title>Upload souborů</title>
  </head>
  <body>
    <form action="nahrat.php" method="post" enctype="multipart/form-data">
      <input type="file" name="fupload">
      <input type="submit" value="Nahrát">
    </form>
  </body>
</html>

HTML kód máme za sebou. Teď k samotnému PHP kódu.

Plánování
My chceme vytvořit script, kde zjistíme hodnotu proměnné "fupload", nebo prostě to co jsme zadali při jméně v tagu input a typu file. Díky tomu jménu se nám vytvořila proměnná $fupload, ale tu nebudeme takhle používat, budeme ten název fupload používat v polích. Víme, že by to vypadalo nějak takhle: "C://Soubory/obrazek.jpg". Toto použijeme, aby jsme zkopírovaly tento soubor někde na server. K tomu slouží tahle fuknce, která zkopíruje soubor z dočastného adresáře na server.

move_uploaded_file( celá dočasná cesta k souboru , cíl )

Taky chceme třeba zjistit jak se uploadovaný soubor jmenuje. Zde je ukázka pár polí, a k tomu popis co zjistí. Informace o souboru přijímaném na serveru najdeme v poli $_FILES. Jeho jedntlivé prvky obsahují pro každý přenesený soubor tyto informace

$_FILES['fupload']['name'] // Zjistí název souborů, v naší ukázce to je obrazek.jpg
$_FILES['fupload']['size'] // Zjistí velikost souborů v bajtech
$_FILES['fupload']['tmp_name'] // Zjistí dočastné umístění souborů, to použijeme, aby jsme soubor zkopírovaly na server, přesně z tohoto místa
$_FILES['fupload']['type'] // Zjistí MIME typ souborů. Př ("image/gif")
$_FILES['fupload']['error'] // Zjistí počet chyb, které vznikly při uploadu souborů

Další věcí je nastavení práv souborů. Musíme zadat nějaká práva souborů. Standartně 644, pokud to bude blbnout a soubor se nepřečte, nebo nepůjde smazat, nastavte plná práva, tedy 777 K tomu nám poslouží funkce chmod ( cesta k souboru , číslo práv). Když zadáváte číslo práva do funkce chmod, musí před tím být nula. Vytvoříme si proměnnou $cil, která bude obsahovat složku kde soubor chceme uložit, plus k tomu přidáme název souboru, pomocí vyšše zmiňovaných polí. A teď už samostatný PHP kód souboru nahrat.php.

<?php
if (isset($_FILES['fupload']))
  {
    $slozka = "soubory"; // Zde si napište svojí složku, do které se budou soubory ukádat (bez lomítka)
    $cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.
    $nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru
    move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky
      or die ("Přenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku
    chmod ($cil, 0644); // Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777
    echo "<a href=\"$cil\">Jdi na soubor</a>";
  }
?>

Ale to není všechno co by se s tím scriptem dalo dělat. Určitě by jsme mohli ještě ten upload nějak vylepšit. V této fázi, se nám zobrazí odkaz na ten soubor, ale vůbec nezkontrolujeme zda opravdu soubor existuje a jestli se na server nahrál. Teďkom bude script trochu vylepšenější. Zjistíme zda byl skutečně nahrán a jak se jmenuje.

<?php
if (isset($_FILES['fupload']))
  {
    $slozka = "soubory"; // Zde si napište svojí složku, do které se budou soubory ukádat (bez lomítka)
    $cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.
    $nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru
    $copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky
      or die ("Přenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku
    chmod ($cil, 0644); // Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777
    if($copy == true){ // Pokud se kopírování provede úspěšně
      echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.\n<br><a href=\"$cil\">Jdi na soubor</a>";
    }else{
      echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error'];
    }
  }
?>

No a takhle by jsme si s tím mohli hrát do nekonečna. Pokud chcete vše mít v jednom souboru, stačí v tagu form změnit action na # a PHP script vložit pod </form> a máte hotovo.

Celý script v jednom souboru

<html>
  <head>
    <title>Upload souborů</title>
  </head>
  <body>
    <form action="#" method="post" enctype="multipart/form-data">
      <input type="file" name="fupload">
      <input type="submit" value="Nahrát">
    </form>
<?php
if (isset($_FILES['fupload']))
  {
    $slozka = "soubory"; // Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)
    $cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.
    $nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru
    $copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky
      or die ("Přenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku
    chmod ($cil, 0644); // Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777
    if($copy == true){ // Pokud se kopírování provede úspěšně
      echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.\n<br><a href=\"$cil\">Jdi na soubor</a>";
    }else{
      echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error'];
    }
  }
?>
</body>
</html>

Takže jsem to skusil a všechno funguje. Jenom chcu říct, že složku si musíte vytvořit, jinak se vám soubor nenahraje a script bude hlásit chybu. A takhle by to nějak mělo vypadat.

POZOR!
Můžete uploadnout pouze malé soubory, myslím, že do 2MB, záleží na nastavení serveru. Ale můžete tuto kapacitu zvětšit a to pomocí některých funkcí souboru php.ini, se kterým bohužel nemám žádne zkušenosti a proto vám řešení tohoto problému nenapíšu. Ale díky Thomasovi, který mi to vysvětlil a pomohl mi. Do souboru php.ini, který je pouhý textový soubor vložíme řádek.

upload_max_filesize = xM

Místo písmenka x vložíme číslo, které bude značit maximální počet MB. Musíte mít ovšem soubor php.ini povolený.

Existující soubory, budou přemazány. Pokud chceme, aby k tomu nedošlo je třeba si pohrát s funkcí file_exists( jméno souboru ). Dále bychom si měli něco říct o bezpečnosti uploadu. Pokud takovýto script pustíte veřejně, stane se možná hrozná věc. Kde máme soubor? On se smazal. Jak to? Ne on se nesmazal. Stačí aby někdo udělal php soubor a do toho vložil řádku funkce unlink( jméno souboru co chcete aby se smazal ) a pak ho spustity. Smaže to vás upload. To samé se stalo mi, když jsem dělal web o veřejném nahráváni souborů. Takže bych chtěl napsat script, který provede to samé co předtím, ale bude obsahovat podmínku, za pomocí výšše zmiňovaných polí, která zajistí aby na server nebyly odeslány soubory s příponou .php. Jak jsem již řekl, stačí řádek a máte po uploadu, nebo po celé stránce.

Celý script v jednom souboru, který neuploaduje PHP soubory

<html>
  <head>
    <title>Upload souborů</title>
  </head>
  <body>
    <form action="#" method="post" enctype="multipart/form-data">
      <input type="file" name="fupload">
      <input type="submit" value="Nahrát">
    </form>
<?php
if (isset($_FILES['fupload']))
  {
    if($_FILES['fupload']['type']=="application/octet-stream"){ // Pokud soubor bude mít kocovku .php, upload se neprovede a vypíše hlášku
    echo "Soubory s příponou PHP jsou zakázány!"; // Která je zde
    }else{ // Pokud soubor není PHP, script se provede
    $slozka = "soubory"; // Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)
    $cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.
    $nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru
    $copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky
      or die ("Přenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku
    chmod ($cil, 0644); // Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777
    if($copy == true){ // Pokud se kopírování provede úspěšně
      echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.\n<br><a href=\"$cil\">Jdi na soubor</a>";
    }else{
      echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error'];
    }
    }
  }
?>
</body>
</html>

Nakonec ke stažení dávám celý script ke stažení. Neuploaduje PHP a vypíše, že soubory s příponou .php jsou zakázány.

Stáhnout celý script ( .TXT | PHP není povoleno )

Celý script v jednom souboru, který uploaduje jenom obrázky typu JPEG

<html>
  <head>
    <title>Upload souborů</title>
  </head>
  <body>
    <form action="#" method="post" enctype="multipart/form-data">
      <input type="file" name="fupload">
      <input type="submit" value="Nahrát">
    </form>
<?php
if (isset($_FILES['fupload']))
  {
    if($_FILES['fupload']['type']=="image/jpeg" or $_FILES['fupload']['type']=="image/pjpeg"){ // Pokud soubor bude mít kocovku .jpg, provede se upload
    $slozka = "soubory"; // Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)
    $cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.
    $nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru
    $copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky
      or die ("Přenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku
    chmod ($cil, 0644); // Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777
    if($copy == true){ // Pokud se kopírování provede úspěšně
      echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.\n<br><a href=\"$cil\">Jdi na soubor</a>";
    }else{
      echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error'];
    }
    }else{
    echo "Lze nahrávat pouze soubory typu JPEG!";
    }
    }
?>
</body>
</html>

Stáhnout celý script ( .TXT | Pouze JPEG )

Stáhnout celý script ( .TXT | PHP není povoleno )

Pokud najdete chybu, tak ihned pište. Diaktrická chyba se dá překousnout, ale ty programovací ne. Pokud by vám něco nešlo, nebo by jste se chtěli na něco zeptat, od toho jsou zde komentáře.

Přidej.cz / Linkuj.cz / Jagg.cz / Zalinkuj.cz / Vybrali.sme.sk

Z kategorie
Vytvořte si vlastní domovskou stránku
Chcete mít moderní web?
PHP Proměnné, metody a formuláře
Profitux.cz - Nejlepší Freehosting
PHP Upload souborů
Čtěte také
Noc v Olomouci na kterou se nezapomíná
Tři dny těžkého pracovního dření
Simpsonovi ve filmu
Když jsem začal dělat webové stránky
Už 21 let od Černobylu

Komentáře / 169

 czech-kid
to se hodi diky moc!!
16:51 - 06.02.2007 | Trvalý odkaz | Odpovědět
 Drixx
Tak tohle už je lepší než rozebírání print screen Povedený článek ..
21:32 - 06.02.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Lancelot
Ahoj, zajímalo by mě, k jakému účelu slouží tvé nahrávání souboru. Jde o upload obrázků? Všech souborů? Z bezpečnostního hlediska tam máš díru jako prase(ano vím, že se o tom dole v článku zmiňuješ). Nikde neošetřuješ typ nahrávaného souboru. Pokud by jsi tento script umístil na nějaké veřejné místo, bude zle. Nahraju si tam php script a mohu si doslova dělat co chci.
Pamatuj na to, že si tento script může někdo dle tvého návodu napsat a nad bezpečností se zamýšlet nebude. Proto bych raději napsal příklad nahrávání souboru na disk třeba pro obrázky i s ošetřeným typem souboru.
Pokud už to chceš zobecnit a mít vše v jednom(tedy obrázky i jiné soubory) stejně musíš ošetřit, aby nešlo nahrávat scripty.
13:24 - 07.02.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Pampuch
Navíc jsi vůbec neošetřil jestli už tam nějaký takovýhle soubor je
15:44 - 07.02.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Králik
To Lancelot: No, je to strašně obecný upload aby uživatel věděl jak to funguje. Neboj, na PHP scripty jsem taky myslel. Přidal jsem poslední script, kde už je kontrola MIME typů. Takže by to PHP nemělo nahrát, ale nevím, neskoušel jsem, ale logicky by to mohlo jet na 90%.

// Byl přidán nový script, obsahující kontrolu, zda soubor není PHP
15:45 - 07.02.2007 | Trvalý odkaz | Odpovědět | webová adresa
 CrazyDog
To Lancelot: Souhlasim a jeste bych dal cely script ke stazeni, coz mnoho lidi potesi, nez jednotlive casti prekopirovavat.
15:45 - 07.02.2007 | Trvalý odkaz | Odpovědět
 Králik
To Pampuch: Však já jsem chtěl aby to přemazal. A jak jsem psal, od toho je funkce file_exists( jméno souboru ).
To CrazyDog: Je to pro amatéry a na script zapoměň, vždyť ten poslední jenom zkopírujou

// Nakonec jsem stažení scriptu přidal
16:12 - 07.02.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Lancelot
Takovýto výsledek je již daleko lépe použitelný. Spousta lidí totiž bezpečnost podceňuje. Script jsem nezkoušel, ale na první pohled vypadá správně.
23:52 - 07.02.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Králik
To Lancelot: No, tak já ti děkuji
09:14 - 08.02.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Lancelot
To Králik: Nevím sice za co, ale budiž
20:15 - 08.02.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Medvěd
Ahoj mám 1. dotaz :chtěl bych se zeptat jek omezim to aby se dali vkládat jen jpg !!! ??? Děkuju moccc
18:11 - 10.02.2007 | Trvalý odkaz | Odpovědět
 xxBOBO
Ahoj!!!

Děkuji , velkovezírovy, moc mi to pomohlo........
07:16 - 24.02.2007 | Trvalý odkaz | Odpovědět
 Králik
To xxBOBO: Není zač, jsem rád, že ti to pomohlo.
08:48 - 24.02.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Dr1ger
Móooc povedený článek. Chválííím..

Hlavně toto:

<input type="hidden" name="MAX_FILE_SIZE" value="256000">
Zatím a děkuji...
22:47 - 13.03.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Králik
To Dr1ger: No já nevím jestli to funguje. Podle mě to je kravina, kterou zadáš jako proměnou v PHP, nevím.
14:11 - 14.03.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Tomba
Ahoj mohl by mi někdo poradit jak uploadnout cca 100 MB?
<input type="hidden" name="MAX_FILE_SIZE" value="100000000"> takto mi to nefunguje.

Děkuji TomBa
08:45 - 20.03.2007 | Trvalý odkaz | Odpovědět
 Králik
To Tomba: To nikomu nefunguje. To bohužel taky ani nevím. Pokusím se to zjistit
14:11 - 20.03.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Králik
To Tomba: Ten form fungovat nebude. Podívej se znovu na článek. Vše se dá nastavit v souboru php.ini.
// Článek aktualizován
20:33 - 20.03.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Heady
Diky za navod.. akorat mi nejel upload obrazku v IE ( musel jsem dopsat "image/pjpeg" ) jenze pak mi zase nejel v FF Takze
if(eregi('[[:alnum:]]+/[p]*jp[e]*g', $_FILES['upload']['type'])) {
resi vse, upload jpegu jede jak ve FF, tak v IE. Treba to nekomu pomuze
23:03 - 07.04.2007 | Trvalý odkaz | Odpovědět
 Králik
To Heady: Dík
23:05 - 07.04.2007 | Trvalý odkaz | Odpovědět | webová adresa
 CDB
Je to dobrý skript.
Rád by som ho doplnil o upozornenie mailom:
Ak pod tento riadok
echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.\n<br><a href=\"$cil\">Jdi na soubor</a>";
Doplníte toto:
mail ("váš@email.com", "Nový obrázek! $cil",
"Na server bol odoslaný obrázek $cil\n",
"From: váš@email.com\nX-web: http://www.vášweb.com");

Tak vám to odošle informáciu na mail že máte nový obrázok.
10:32 - 14.04.2007 | Trvalý odkaz | Odpovědět | webová adresa
 dinkin
vyzkoušel jsem si to až teď a je to fakt super.Moc dík Králíku. V takovejch Návodec pokračuj!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
13:17 - 17.04.2007 | Trvalý odkaz | Odpovědět
 louka
Jen jsem se chtěl zeptat, proč mi to vždy vyhodí chybu a to tuhle:
Warning: move_uploaded_file(soubory/soubor.txt) [function.move-uploaded-file.php]: failed to open stream: Permission denied in /home/free/ic.cz/q/quickweb/root/www/upload.php on line 16

Warning: move_uploaded_file() [function.move-uploaded-file.php]: Unable to move '/tmp/phpAnYjSr' to 'soubory/soubor.txt' in /home/free/ic.cz/q/quickweb/root/www/upload.php on line 16
Přenesený soubor nelze zkopírovat

To nechápu... Prosim poraďte
20:04 - 17.04.2007 | Trvalý odkaz | Odpovědět
 Králik
To louka: Zeptej se podpory freehostingu ic.cz
20:40 - 17.04.2007 | Trvalý odkaz | Odpovědět | webová adresa
 T-1000
Zajímá mě to datové omezení. Ten soubor php.ini mám nahrát na server a to je všechno?
21:07 - 27.04.2007 | Trvalý odkaz | Odpovědět
 Králik
To T-1000: Ohledně toho jsem neměl moc informací. Ano to máš nahrát na server, ale jestli to půjde, nevím...
21:47 - 27.04.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Zahry
cau dobre vysvetleno ale mam dotaz ze mi to nejde muze byt ic.cz nebo sem jen takove trdlo pise mi to tohle: Jdi na soubor"; }else{ echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error']; } } } ?>
20:21 - 02.05.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Zahry
jeee sorka uz to mam pro vsechny co to chtej hodit na ic.cz musite povolit zapis na slozku!!!!!!!!
20:28 - 02.05.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Králik
To Zahry: Díky moc, lidé radu ocení
11:53 - 03.05.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Pajah
Pěkný článek dobrá práce
08:43 - 04.05.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Hawk
Mam problem, ze kdyz posilam cestu pomoci post

<form method="post" action="uloz.php">
<input type="hidden" name="foto_tmp" value="<?echo
$_FILES["foto"]["tmp_name"]?>">

a dam echo tak je vse v pohode napr.: C:\DOCUME~1\........\LOCALS~1\Temp\php6D.tmp

ale kdyz to prijmu v uloz.php a dam echo $_POST["foto_tmp"]."<br>";
tak tam vyleze:
C:\\DOCUME~1\\......\\LOCALS~1\\Temp\\php78.tmp

a tim padem mi to nejde uploudovat
kde se tem berou ty dve lomitka??????
diky moc
13:10 - 09.05.2007 | Trvalý odkaz | Odpovědět
 Králik
To Hawk: To nevím, to se mi ještě nestalo, takže ti neporadím, logicky je to správně, chyba bude jinde.
14:10 - 09.05.2007 | Trvalý odkaz | Odpovědět | webová adresa
 T-1000
Jsem si dal od php pauzu.
Chtěl bych se zeptat k té velikosti. Vůbec mi to nejde. K tomu souboru php.ini, prostě vytvořím nový poznámkový blok a tam napíšu ten řádek a uložím to na server (taky by mě zajímalo, jestli na "hlavní stranu" nebo do složky, kde mám ten script). A do toho scriptu, který zapisuje ten soubor na server, nemám psát nic? Jak může vědět, že se tam má kouknout?

Děkuji
18:29 - 16.05.2007 | Trvalý odkaz | Odpovědět
 Králik
To T-1000: To vůbec nevím, zjištoval jsem to dlouho, ale na správné řešení jsem nepřišel, bohužel, někde jsem to vyčetl, ale i tak mě to nejde. Nejlepší bude se zeptat na podporu hostingu nebo někde kde je tato fce použita.
20:40 - 16.05.2007 | Trvalý odkaz | Odpovědět | webová adresa
 zajac
stale mi nejde zkopirovat soubor
na ftp mam povoleny vsechny prava ktere existuji a vyzkousel sem chmod ($cil, 0644) i chmod ($cil, 0777) a stale nic...
21:02 - 16.05.2007 | Trvalý odkaz | Odpovědět
 peCan
$_FILES['fupload']['error'] neznaci pocet chyb, ale cislo preddefinovane chyby...

Chyby jsou:
UPLOAD_ERR_INI_SIZE
UPLOAD_ERR_PARTIAL
UPLOAD_ERR_NO_FILE
UPLOAD_ERR_FORM_SIZE

16:25 - 17.05.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Babza
To Heady:
mně teda ted tvuj skript ve FF nechodi - jpgcka proste nebere
10:24 - 21.05.2007 | Trvalý odkaz | Odpovědět
 zdick
Ad php.ini
Tento soubor slouzi ke globalnimu nastaveni serveru, cili samotny uzivatel nema moznost ho nastavit (vyjma lokalniho serveru na vasem domacim PC).

Potrebujete-li nastavit scriptu maximalni velikost, melo by pomoci pridani nasledujici fce do souboru se scriptem pro upload souboru:

ini_set('max_file_size', '5000');

Pri uploadu velkych souboru je treba myslet na cas zpracovani, ktery je v php omezen a pri jeho prekroceni vyhodi chybu.
To se nastavuje nasledujicim kodem:

ini_set('memory_limit','32M');
ini_set('max_execution_time','600');
ini_set('max_input_time','500');

Nemam ale ozkouseno jakych maximalnich hodnot muze upload dosahovat.

Myslim ze jako dobry namet pro rozsireni clanku by mohl poslouzit request pro generovani unikatniho nazvu souboru, ci automaticke generovani nahledu obrazku.
18:45 - 29.05.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Králík
To zdick: Dík za rozšíření, hodně to pomůže
19:15 - 29.05.2007 | Trvalý odkaz | Odpovědět | webová adresa
 patrik
Hele, prosim mohl by jsi to napsat s tou funkcí file_exists? Nejde mi to dat do kupy aby to nepřepisovalo již existující soubory... Díky
13:19 - 02.06.2007 | Trvalý odkaz | Odpovědět
 Králík
To patrik:

if(file_exists($_FILES['fupload']['name'])==true){
echo "Soubor existuje!";
}else{
$copy = move_uploaded_file($nazev_souboru, $cil);
}
?>

Není to vyzkoušené, je to jen z mé hlavy, ani si nejsem jistý zda to mám dobře
14:40 - 02.06.2007 | Trvalý odkaz | Odpovědět | webová adresa
 patrik
Tak nevim, nefunguje mi to....
13:37 - 03.06.2007 | Trvalý odkaz | Odpovědět
 Jack06
Mohl by jste mi to pls někdo poslat mailem celé jak to má být. Omezení akorát velikost. Když skládám dodatky k uploadu nejede mi to. Moc díky.
09:23 - 09.06.2007 | Trvalý odkaz | Odpovědět
 Jack06
Ještě pardon můj mail je bestforum@centrum.cz
09:25 - 09.06.2007 | Trvalý odkaz | Odpovědět
 Jack06
Trochu jsem poupravil kód Králíka. Takto by měl fungovat. Pokud něco nepujde kontaktujte mě na email: bestforum@centrum.cz. Pevně věřím že to pujde.

<html>
<head>
<title>Upload souborů</title>
</head>
<body>
<form action="#" method="post" enctype="multipart/form-data">
<input type="file" name="fupload">
<input type="submit" value="Nahrát">
</form>
<?php
if (isset($_FILES['fupload']))
{
if($_FILES['fupload']['type']=="image/jpeg"){ // Pokud soubor bude mít kocovku .jpg, provede se upload
$slozka = "soubory"; // Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)
$cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.
$nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru
if(file_exists($cil)){
echo "Soubor již existuje!<br />";
}else{
$copy = move_uploaded_file($nazev_souboru, $cil)// A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky
or die ("Přenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku
chmod ($cil, 0644); // Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777
if($copy == true){ // Pokud se kopírování provede úspěšně
echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.\n<br>";
}
else{
echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error'];
}
}

}else{
echo "Lze nahrávat pouze soubory typu JPEG!";
}
}

?>
</body>
</html>
15:07 - 16.06.2007 | Trvalý odkaz | Odpovědět
 kolarhon
hodně jste mi tímto scriptem pomohli. díky
22:15 - 20.06.2007 | Trvalý odkaz | Odpovědět | webová adresa
 JiFF
Krásný článek, díky za nakopnutí...
23:00 - 28.06.2007 | Trvalý odkaz | Odpovědět | webová adresa
 T-1000
Pořád jsem nevyřešil ten problém s velikostí souboru.
Pokud mám velký soubor ( tak 1 MB), tak mi to vypíše: neplatná autorizace (takže asi nějak zapomene proměnné pro autorizaci).
10:17 - 30.06.2007 | Trvalý odkaz | Odpovědět
 Králík
To T-1000: Tak s tím ti nepomůžu, sám to totiž nevím.
10:40 - 30.06.2007 | Trvalý odkaz | Odpovědět | webová adresa
 patrik
Nevíte jak udělat ukazatele, který by ukazoval kolik uz kb připadne % z velikosti souboru uz je nahráno?
21:31 - 18.07.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Králík
To patrik: Nauč se AJAX
07:45 - 19.07.2007 | Trvalý odkaz | Odpovědět | webová adresa
 blaass
Dík moc, neskutečně mi script pomohl, funguje zatím bezvadně a návod je super... ale jen dodatek, aby script vypysoval české znaky dodávejte do hlavičky třeba: <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> nebo obdobný příkaz. je to jen taková drobnost.. Za script fakt moc děkuji...
16:16 - 19.07.2007 | Trvalý odkaz | Odpovědět
 honza
diky moc, presne tohle jsem hledal, moc mi to pomohlo zdar, honza
18:02 - 25.07.2007 | Trvalý odkaz | Odpovědět
 Mike
Zdravím, nevím, jestli se nebudu opakovat, ale nemáš ošetřené duplicitní odeslání. odesílací skript byl dal do hlavičky (tzn. před jakýkoli html výstup, a ukončil headerem na PHP_SELF. navíc tam máš díry jak v ementálu co když někdo "náhodou" uploadne soubor textového formátu se jménem .htaccess

ještě jsem někde uprostřed zahlédl die() což bych také nepoužil, pokud chci za tím parsovat ještě nějaký další kód - což vlastně chci, protože skript bude ještě před html výstupem...

jinak já pro kontrolu vymyslel zatím tohle:

if (isset($_POST['upload'])) {

if ($HTTP_POST_FILES['image']['size'] > 1048576) {
$uplmess = "Ste se zbláznili... megovej obrázek na web?";
} else if (!preg_match("~image~", $HTTP_POST_FILES['image']['type'])) {
$uplmess = "Můžete nahrát pouze obrázky.";
} else if (file_exists("../images/upload/" . $_FILES['fupload']['name'] . "")) {
$uplmess = "Soubor daného jména již existuje, a nelze přepsat.";
} else {
/* az zde se to odesle, az podle if(isset($_GET['ok'])) pak tisknu hlasku o uspechu */
header("Location ./upload.php?ok");
}
}

pokud soubor projde přes všechny kontroly, uloží se a stránka se obnoví. pokud ne, tak do legendy fieldsetu akorát vytisknu $uplmess
11:00 - 05.08.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Králík
To Mike: Heh, moc díky
11:25 - 05.08.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Petr
To Mike:

Profi práce.

Mám ale dotaz, jak dostat na server soubory větší než dvě mega např a jiného formátu? Problém je že proměnná na serveru která udržuje hodnotu max velikosti souboru je menší než soubory co tam potřebuji dostat. Zkoušel jsem pomocí read a write, ale někde tam je bota...
<?
if ($send) {
$in = fopen($_GET["soubor"],"rb");
$out = fopen('./data/' . $soubor_name, 'w');

while (!feof($in)) {
fwrite($out, fread($in, 10000));
}
fclose($in);
fclose($out);
}
?>
Funguje pouze na lokále. Pokud testuji na www tak nelze a obávám se že to ani nejde...

Uvítám jakoukoliv radu.

Petr
10:14 - 09.08.2007 | Trvalý odkaz | Odpovědět
 qwertz
prosím o radu -když vše vyplnim chová se to stejně jako bych to nevyplnil (s PHP nemám zkušenosti ) možná jsem zadal název složky do špatného pole...potřeboval bych názornou ukázku (vyplnění všeho) pro jistotu všech fiktivních složek kde mají být ! potřebuju to kvuli experimentování ve Flashi (Action Script)

mám tam procházet-nahrát =ale 1)nikam se to nenahraje 2)pod Nahrát mi to ukazuje toto: (a přitom mám vyplněné vše)

Jdi na soubor"; }else{ echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error']; } }else{ echo "Lze nahrávat pouze soubory typu JPEG!"; } } ?>



omluvte prosím mojí nechápavost (blbost)
22:22 - 15.08.2007 | Trvalý odkaz | Odpovědět
 G4by
Warning: move_uploaded_file(soubory/koza.jpg) [function.move-uploaded-file.php]: failed to open stream: No such file or directory in /home/free/ic.cz/p/pp-in-pl/root/www/iframe/home1.php on line 19

Warning: move_uploaded_file() [function.move-uploaded-file.php]: Unable to move '/tmp/phpGqAfsK' to 'soubory/koza.jpg' in /home/free/ic.cz/p/pp-in-pl/root/www/iframe/home1.php on line 19
Přenesený soubor nelze zkopírovat

Chtel bych radu, ptz tohle mi to napise kdyz chci neco ulozit !! S PHP nemam zadnou zkusenost...díky
15:32 - 23.08.2007 | Trvalý odkaz | Odpovědět
 Slacik
To blaass: Posílání charsetu způsobem, jakým ty popisuješ ti moc nepomůže. někde fungovat může, ale rozhodně to není 100%. Charset by se měl v případě php posílat pomocí fce header. Dále ještě k tomu skriptu. Moc jsem ho nekoumal ale už hned někde na začátku jsme zahledl poměrně klasickou chybu u příkladů tohoto druhu. Autor skriptu testuje soubor na image/jpeg. Zkuste si poslat soubor pomocí IE. Typ souboru nebude image/jpeg ale image/pjpeg.

Tak to jen mé připomínky namátkou....
16:01 - 12.09.2007 | Trvalý odkaz | Odpovědět
 x
čus potřebuju nák upravit tenhle script aby uploadoval obrázky typu .gif , .jpg , .bmp
<html>
<head>
<title>Upload souborů</title>
</head>
<body>
<form action="#" method="post" enctype="multipart/form-data">
<input type="file" name="fupload">
<input type="submit" value="Nahrát">
</form>
<?php
if (isset($_FILES['fupload']))
{
if($_FILES['fupload']['type']=="image/jpeg"){ // Pokud soubor bude mít kocovku .jpg, provede se upload
$slozka = "soubory"; // Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)
$cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.
$nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru
$copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky
or die ("Přenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku
chmod ($cil, 0644); // Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777
if($copy == true){ // Pokud se kopírování provede úspěšně
echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.\n<br><a href=\"$cil\">Jdi na soubor</a>";
}else{
echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error'];
}
}else{
echo "Lze nahrávat pouze soubory typu JPEG!";
}
}
?>
</body>
</html>

nevim jak sem if($_FILES['fupload']['type']=="image/jpeg"){ // Pokud soubor bude mít kocovku .jpg, provede se upload zapsat víc koncovek aby to fungovalo , zkoušel jsem toho hodně ale bud to nešlo vubec nebo to nahrávalo uplně všechny typy
22:21 - 16.09.2007 | Trvalý odkaz | Odpovědět
 Mike
x: použij kontrolu, kterou uvádím ve svém příspěvku výš:

if (preg_match("~image~", $_FILES['fupload']['type']))

regulárním výrazem zkontroluješ mime typ souboru, a pustíš dál cokoli, co je obrázek. což je imho lepší, protože kontrola pouze přípony ti dovolí nahrát na server php skript s příponou jpg, kdežto kontrola mime ti dovolí nahrát jakýkoli obrázek bez ohledu na příponu.

a pokud ti jde opravdu jen o příponu, budeš asi muset uložit všechny možnosti do pole: jpg, Jpg, jPg, jpG, JpG, jPg, JPG, JPEG a tak dále... + navíc ještě kontrola mime. takže si přeber, co je jednodušší
01:22 - 23.09.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Králík
To Mike: Vždyť já kontroluji mime typ a ne koncovku, akorát pro lepší orientaci jsem napsal v komentáři, že všechny kromě souborů PHP atd...
09:07 - 23.09.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Mythago
K tý maximální velikosti uploadovanýho souboru...
Například na webzdarma (a jinde asi taky) neni možný uploadovat větší soubor než 2 MB. Bohužel neni možnost jak to změnit, neboť takzvaný výše zmiňovaný php.ini je hlavní konfigurační soubor pro php motor. A ten soubor je zabezpečeně uloženej na serveru hostingu. Z toho plyne, že ho není možné libovolně upravovat. Hosting má tohle nastaveno z důvodů přetížení serveru.

Pokud můžu soudit tak nahrání vlastního php.ini nepomůže. Za prvý (a to už tu bylo řečeno) by bylo nutný nejspíš napsat nějakej skript pro to, aby php skript pochopil z kterýho php.ini má tahat a za druhé si myslim, že bude ošetřeno aby nebylo možné vůbec tento soubor nahrát.

Mythago

21:22 - 26.09.2007 | Trvalý odkaz | Odpovědět
 Monti
Fine scriptik. Dal by se upravit i na upload vice souboru najednou? Diky moc
23:42 - 02.10.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Králík
To Monti: Google.com
15:41 - 03.10.2007 | Trvalý odkaz | Odpovědět | webová adresa
 Monti
fine rada, diky bloggere
15:59 - 03.10.2007 | Trvalý odkaz | Odpovědět
 Králík
To Monti: Není za co
18:17 - 03.10.2007 | Trvalý odkaz | Odpovědět | webová adresa
 skybedy
http://cz.php.net/manual/cs/features.file-upload.multiple.php
19:41 - 12.11.2007 | Trvalý odkaz | Odpovědět
 zdick
aby php skript pochopil z kterýho php.ini má tahat
Nevím o tom, že by bylo možné přenastavit php.ini nějakým scriptem. Uvědomte si to bezpečnostní riziko, to by nemělo smysl v PHP cokoliv dělat, resp. jakýkoliv projekt napsaný v PHP by se dal běham chvilky shodit...

Proto - pokud chcete změnit maximální velikost uploadovaného souboru, nenahrávejte na FTP žádný php.ini, nemá to smysl.
Velikost si můžete upravit jen nastavením direktiv přímo ve scriptu s uploadem, už jsem to sem jednou psal (http://kralik.profitux.cz/blog/87-php-upload-souboru#komentar-2390)


Pro ověření MIME typu obrázku používám následující PHP fci, co funguje v IE i FF:

function check_mime($var)
{
$mime = $_FILES[$var]["type"];
if($mime == "image/jpeg" || $mime == "image/pjpeg" || $mime == "image/png")
{
$name = $_FILES[$var]["name"];
$array = explode(".", $name);
$nr = count($array);
$ext = $array[$nr - 1];
if($ext == "jpg" || $ext == "jpeg" || $ext == "png")
return true;
else
return false;
} else
return false;
}

následně ověření:
if(check_mime($file_var))
{
// Pokracovat v uploadu
} else
$error = sprintf(_("Typ Vašeho souboru (%s) není povolený."), $_FILES[$file_var]["type"]) . "<br />\n" . _('Prosím uploadujte pouze soubory <strong>.jpg</strong> a <strong>.png</strong>');
08:56 - 19.11.2007 | Trvalý odkaz | Odpovědět
 dytik
nemáš ještě najaký rady prosíím CDB jo tvá stránka s obala je good používám ji !!
20:05 - 24.11.2007 | Trvalý odkaz | Odpovědět
 rob3rt
podminka na zakazani uploadu if($_FILES['fupload']['type']=="application/octet-stream")
mi nefunguje....
ale vymyslel jsem jinou (nevim jestli idealni ale funguje mi):
nejdriv si nadefinuju $koncovka = $_FILES['fupload']['name'];
$koncovka = substr($koncovka, -4); --- tim se mi urizne koncovka a potom provedu podminku if($nome==".php") čímž zjistim jestli koncovka neni .php
16:58 - 04.12.2007 | Trvalý odkaz | Odpovědět | webová adresa
 rob3rt
oprava - podminka je if($koncovka==".php")
17:00 - 04.12.2007 | Trvalý odkaz | Odpovědět | webová adresa
 jirka
Super článek! Moc mi pomohl! Chtěl bych udělat upload více souborů. Jak udělat, aby si to prvně otestovalo, jestli ten soubor je vůbec vložen a když ne tak aby to nnic nedělalo? Když totiž vložím nějaké soubory a některé zůstanou prázdné, tak u těch prázdných mi to vypisuje chybu.
Děkuji moc za pomoc
14:36 - 11.12.2007 | Trvalý odkaz | Odpovědět
 Alvares
Cau
Clanek je super moc pomohl.
Vím že jste zde na foru probírali co a jak, když jméno souboru už existuje, ale ja bych chtěl vědět, jak to udělat, aby se soubor na servru nahradil novým, pokud mají stejný název.
Za odpověď předem děkuji.
12:52 - 29.12.2007 | Trvalý odkaz | Odpovědět
 Králík
To Alvares: Ten můj script bez těch podmínek to udělá.
23:00 - 29.12.2007 | Trvalý odkaz | Odpovědět | webová adresa
 fiam
to patrik:
Používam jednoduchý ukazatel pro uživatele, aby se nenudil a věděl, že se něco děje. Neumím pomoci javascriptu zjistit velikost souboru a součastně zjišťovat kolik už je přeneseno...
Princip je následující: Po odkliknutí odesílání souboru se okno (v mém případě iframe) reloadne až když je soubor na serveru. Do tý doby (a někdy to trvá, že?) zapnu pomoci OnClick() v "SUBMIT" malej scriptík v onom Iframe a probíhá takovej páskovej ukazatel postupnou změnou barvy mezer ve <SPAN>. Tady je script:
<SCRIPT Language="JavaScript">
<!--
// Počet objektů SPAN
var ProgCount = 51;
// Barva, kterou se budou tyto objekty obarvovat
var ProgCol = '#6B6BFF';
// Časový interval
var ProgInterval = 100;
var ProgPos = ProgCount;
// Časovač
var ProgTimer;

// Inicializace
function ProgInit() {
for (var i = 1; i <= ProgCount; i++)
document.getElementById('Prog'+i).style.backgroundColor = 'transparent';
ProgPos = 0;
}

// Ukončení
function ProgStop() {
clearTimeout(ProgTimer);
ProgInit();
}

// Jeden krok ProgressBaru
function ProgUpdate() {
ProgPos++;
if (ProgPos > ProgCount)
ProgInit();
else
document.getElementById('Prog'+ProgPos).style.backgroundColor = ProgCol;
ProgTimer = setTimeout('ProgUpdate()',ProgInterval);
}
// -->
</SCRIPT>
Pak jsou ještě takto ty mezery v BODY:
************************************************************************
<TABLE width="100%" border="0" align="center"style="position: absolute; top: -7px; left: 10px; height: 10px;">
<TR><TD>
<DIV Style="padding:0px;border:solid white 0px;width:345px;height:10px;">
<SPAN Id="Prog1"> 
</SPAN><SPAN Id="Prog2"> 
</SPAN><SPAN Id="Prog3"> 
</SPAN><SPAN Id="Prog4">U
</SPAN><SPAN Id="Prog5"> 
</SPAN><SPAN Id="Prog6">P
</SPAN><SPAN Id="Prog7"> 
</SPAN><SPAN Id="Prog8">L
</SPAN><SPAN Id="Prog9"> 
</SPAN><SPAN Id="Prog10">O
</SPAN><SPAN Id="Prog11"> 
</SPAN><SPAN Id="Prog12">A
</SPAN><SPAN Id="Prog13"> 
</SPAN><SPAN Id="Prog14">D
</SPAN><SPAN Id="Prog15"> 
</SPAN><SPAN Id="Prog16"> 
</SPAN><SPAN Id="Prog17"> 
</SPAN><SPAN Id="Prog18"> 
</SPAN><SPAN Id="Prog19"> 
</SPAN><SPAN Id="Prog20"> 
</SPAN><SPAN Id="Prog21"> 
</SPAN><SPAN Id="Prog22"> 
</SPAN><SPAN Id="Prog23"> 
</SPAN><SPAN Id="Prog24"> 
</SPAN><SPAN Id="Prog25"> 
</SPAN><SPAN Id="Prog26"> 
</SPAN><SPAN Id="Prog27"> 
</SPAN><SPAN Id="Prog28"> 
</SPAN><SPAN Id="Prog29"> 
</SPAN><SPAN Id="Prog30"> 
</SPAN><SPAN Id="Prog31"> 
</SPAN><SPAN Id="Prog32"> 
</SPAN><SPAN Id="Prog33"> 
</SPAN><SPAN Id="Prog34"> 
</SPAN><SPAN Id="Prog35"> 
</SPAN><SPAN Id="Prog36"> 
</SPAN><SPAN Id="Prog37"> 
</SPAN><SPAN Id="Prog38"> 
</SPAN><SPAN Id="Prog39"> 
</SPAN><SPAN Id="Prog40"> 
</SPAN><SPAN Id="Prog41"> 
</SPAN><SPAN Id="Prog42"> 
</SPAN><SPAN Id="Prog43"> 
</SPAN><SPAN Id="Prog44"> 
</SPAN><SPAN Id="Prog45"> 
</SPAN><SPAN Id="Prog46"> 
</SPAN><SPAN Id="Prog47"> 
</SPAN><SPAN Id="Prog48"> 
</SPAN><SPAN Id="Prog49"> 
</SPAN><SPAN Id="Prog50"> 
</SPAN><SPAN Id="Prog51"> </SPAN>
</DIV>
</TD></TR>
</TABLE>

************************************************************************
a takhle to vypadá v tom buttonku formuláře:
<input type="submit" OnClick="ProgUpdate();" value="............

Samotnou tabulku s mezírkama mám absolutně na pozici těsně nad vkládácím okénkem a je to velice efektní, i když jiný význam to asi nemá.
Dávám to sem prakticky všechno, aby jsem se vyhnul doplňování...
Ať se daří!
00:01 - 13.01.2008 | Trvalý odkaz | Odpovědět | webová adresa
 kukweb
ahoj,
dekuju za tento navod. Ale, chtel bych pozadat o zlepsovacek 0

Slo by udelat, abych dany obrazek mohl okomentovat. Text a obrazek, by se ulozil na teto strance. Takze bych po nakliknuti, vydel obrazek.

A aby to cele zustalo v pameti. Takze pokud by nekdo pridal dalsi obrazek, zaradilo by se to pod to, nebo nad to. Plus datum a cas.

Cucum do knizky php pro zacatecniky a ne a ne s tim hnout. Diky za pripadnou pomoc.
00:39 - 21.01.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Králík
To kukweb: Ano ano, udělat to jde. Zkus si svůj dotaz o radu podat na skvělém fóru www.diskuse.jakpsatweb.cz , kde ti poradí více lidí a když je u toho více hlav, je méně chyb a víc rad.
14:54 - 21.01.2008 | Trvalý odkaz | Odpovědět | webová adresa
 kukweb
diky, pozadal jsem jednoho programatora, uz to mam hotove. Diky za odpoved
22:34 - 21.01.2008 | Trvalý odkaz | Odpovědět | webová adresa
 martin..cz
tohle používýám jako omezení velikosti souboru:

$velikost=$_FILES['fupload']['size'];

if($velikost <= 10000){

nahrávací skript

}else{
echo "Soubor je moc veliký, má velikost $velikost, přitom limit je 10000"; //zobrazí se pokud je nahrávaný soubor větší než 10 KB
}

snad vám to pomůže, jinak v tehle diskuzu jsem nasel skvele omezeni na typ souboru, na image je nejlepsi toto:

if (preg_match("~image~", $_FILES['fupload']['type'])) {

díky moc
16:49 - 25.01.2008 | Trvalý odkaz | Odpovědět
 Bury
To Heady: Proč to dělat jednoduše, když to jde složite

if($_FILES['fupload']['type']=="image/jpeg" OR $_FILES['fupload']['type']=="image/pjpeg"){

...
}
13:14 - 05.03.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Marush
To Hawk:
Mel jsem podobny problem a nasel jsem, ze pomuze funkce stripslashes()
15:34 - 27.03.2008 | Trvalý odkaz | Odpovědět
 Ricky
Mam problem, ta upload sa mi daju dat subory vo formate PHP a to ja nechcem, ako sa da urobit podmienka ze ma nepusti dalej pokial subor je PHP ?
20:09 - 09.05.2008 | Trvalý odkaz | Odpovědět
 Patrik
Hoj nepochopil sem toto:

// Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)


mám tam napsat tohle?:

// C:\Users\Patrik\Documents\wbs

Chtěl bych poradit díky...

22:02 - 14.05.2008 | Trvalý odkaz | Odpovědět
 Králík
To Patrik: Ano - "C:\Users\Patrik\Documents\wbs".
14:06 - 15.05.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Patrik
Dívej ještě něco

Dál tam sou lomítka jako tato:
// Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.

// Zjistí dočastné umístění souboru

// A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky

/ A pokud se nepovede, tak vypíše tuto hlášku

// Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777

To tam mám normálně necat nebo smazat či přepsat???
11:33 - 16.05.2008 | Trvalý odkaz | Odpovědět
 Králík
To Patrik: To je komentář v kódu, když ho tam necháš, později budeš vědět co je co a s kódem to nic nedělá, je to jen vložený komentář.
14:59 - 16.05.2008 | Trvalý odkaz | Odpovědět | webová adresa
 peno
Tak jsem procetl celej tento blog, posbiral vsechny mozny poznatky a vysledkem toho je tento muj super vylepseny uploadovaci skript (este pro to budu delat css a casem to hodim na muj web: software.8bit.cz):


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">

<head>
<title><?php echo $_SERVER['HTTP_HOST'] ?> - file upload</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="content-language" content="cs" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="robots" content="none" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<link rel="stylesheet" href="style.css" type="text/css" />
</head>

<body>

<h1>Upload souboru</h1>
<div>
<?php
if(isset($_FILES['fupload']))
{
$directory = "upload";
$mime = array (
"image",
"audio",
"video",
"pdf",
"postscript",
"application/ms",
"application/vnd.ms",
"opendocument",
"zip",
"gzip",
"rar",
"compressed");
$limit = 10 * 1024 * 1024;

$newFile = $directory . "/" .$_FILES['fupload']['name'];
$file = $_FILES['fupload']['tmp_name'];
$fileType == false;

foreach($mime as $value)
{
if(stripos($_FILES['fupload']['type'], $value) !== false)
{
$fileType = true;
break;
}
}

if($_FILES['fupload']['size'] > $limit)
{
$report = "ERROR: Soubor nelze nahrát!<br />
Maximální povolená velikost souboru je " . $limit . " Bytes.<br />
Velikost: " . $_FILES['fupload']['size'] . " Bytes<br />";
}
else if($fileType == false)
{
$allow = "Povoleny jsou pouze tyto MIME typy: ";
foreach($mime as $type)
{
$allow .= $type . " | ";
}

$report = "ERROR: Soubor nelze nahrát!<br />
Tento typ souboru není povolen. <span title=\"" . $allow . "\">[?]</span><br />
Typ: " . $_FILES['fupload']['type'] . "<br />";
}
else if(file_exists($newFile))
{
$report = "ERROR: Soubor nelze nahrát!<br />
Tento soubor již existuje a nelze jej nahradit.<br />";
}
else
{
$copy = move_uploaded_file($file, $newFile) or die ("ERROR: Soubor nelze zkopírovat!<br />");
chmod ($newFile, 0644);

if($copy == true)
{
$report = "Soubor " . $_FILES['fupload']['name'] . " byl úspěšně nahrán na server.<br />";
$report .= "Link: <a href=\"" . $newFile . "\">http://" . $_SERVER['HTTP_HOST'] . "/" . $newFile . "</a><br />";
$report .= "Velikost: " . $_FILES['fupload']['size'] . " Bytes<br />";
$report .= "Typ: " . $_FILES['fupload']['type'] . "<br />";
}
else
{
$report = "ERROR: Soubor nelze nahrát!<br />
Error: " . $_FILES['fupload']['error'] . "<br />";
}
}

echo $report;
}
?>
</div>

<div>
<form action="#" method="post" enctype="multipart/form-data">
<input type="file" name="fupload" />
<br />
<input type="submit" value="Upload" />
</form>
</div>
</body>
</html>
23:24 - 22.05.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Ricky
Mam problem, ta upload sa mi daju dat subory vo formate PHP a to ja nechcem, ako sa da urobit podmienka ze ma nepusti dalej pokial subor je PHP ?
20:22 - 01.06.2008 | Trvalý odkaz | Odpovědět
 Králík
To Ricky:

if($_FILES['fupload']['type']=="application/octet-stream"){
echo "Je PHP"
}else{
echo "Není PHP"; // tvoje podmínka, jestliže PHP není.
}

Nejsem si jistý, zkus do scriptu vypsat fci, kterou zmíňuji v článku na zjištětí MIME typu souborů a dosaď ji místo application/octet-stream pokud teda bude jiná...
12:37 - 02.06.2008 | Trvalý odkaz | Odpovědět | webová adresa
 :((((((((((((((((((
Mw to nejde asi jsem giga lama prečetl jsem to 3 krát a prostě mi to nejde pls dejte sem upload all soubory co k tomu potřebuj joko uz hotovy
txt s cilovou slozkou upload
prosííím mně to vážně nejde
22:10 - 03.06.2008 | Trvalý odkaz | Odpovědět
 Králík
To : Jestli ti nejde, nedělej paniku, k tomu aby fungoval potřebuje nějakou podporu od strany serveru a na tom hodně záleží, pokud používáš nekvalitní freehosting není se čemu divit, chyba může být kdekoliv a v článku jsem zmiňoval, že je potřeba znalost PHP. Příště se o problému více rozepiš a zkus se poptat na www.diskuse.jakpsatweb.cz , tam ti poradí více hlav..
08:39 - 04.06.2008 | Trvalý odkaz | Odpovědět | webová adresa
 :((((((((((((((((((
delal jsme to na ic.cz a na hastuju.cz a nikde nejde prosim hotte to sem
13:47 - 04.06.2008 | Trvalý odkaz | Odpovědět
 Ricky
Nejsem si jistý, zkus do scriptu vypsat fci, kterou zmíňuji v článku na zjištětí MIME typu souborů a dosaď ji místo application/octet-stream pokud teda bude jiná...

Velmi som tomuto nechapal :/ vysvetlite mi to? Prosim, prpadne dajte odkaz
19:01 - 04.06.2008 | Trvalý odkaz | Odpovědět
 Ricky
Aha uz tomu chapem, pardon takze prikaz "image/gif" sluzi nato ze len obrazaky s priponou GIF sa budu davat na server, ale ako mam spravit aby sa davali vsetky subory okrem pripony PHP?
19:13 - 04.06.2008 | Trvalý odkaz | Odpovědět
 Králík
Script na upload všeho kromě PHP je v článku, dole, předposlední script...
20:13 - 04.06.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Ricky
Ale ten nefunguje, vobec nefunguje som skusal a da sa nahravat aj PHP subory...
21:14 - 04.06.2008 | Trvalý odkaz | Odpovědět
 Králík
To Ricky: V tom případě má asi jiný MIME typ, pomocí fci v článku není problém si ho zjistit. Povolit uplaod všem souborů a vypsat MIME typ pomocí fce $_FILES['fupload']['type'], uploaduješ PHP soubor a MIME typ zkopíruješ do podmínky místo application/octet-stream. Mělo by to fungovat, určitě napiš výsledek.
12:44 - 05.06.2008 | Trvalý odkaz | Odpovědět | webová adresa
 :((((((((((((((((((
prosííím dejte sem upload souboru aby se to odesilalo do slozky upload
16:11 - 05.06.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Ricky
Ahaa, no premna je to velmi zlozite :/ nemohli by ste mi tu dat cely skript? Ako if($_FILES['fupload']['type']=="application/octet-stream"){ mi velmi nefunguje ale keby ste mi sem zmenili nejake skripty s ktorymi by mi upload neprehral PHP, bol by som velmi rad...
16:39 - 05.06.2008 | Trvalý odkaz | Odpovědět
 Králík
To Ricky: Zkus se podívat na jiné zdrojáky uploadu, rád bych to vyzkoušel, jakože asi vyzkouším a napíši, ale teď se nemůžu připojit na FTP, takže vydržte, nebo se poptejte a hledejte na jiných fórech, tam to určitě bude.
19:19 - 05.06.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Králík
To Ricky: Už jsem našel řešení problému, který jsi určitě udělal, v článku používám u tagu input s atributem file název fupload a právě na ten se váže tato podmínka

if($_FILES['fupload']['type']=="application/octet-stream")

Pokud sis změnil název, pak budeš v PHP muset změnit místo 'fupload' na název, který tam máš, jednodušší bude, když si zpátky přejmenuješ input se souborem na

<input type="file" name="fupload">

Ono totiž ten script velmi dobře funguje, kontroloval jsem MIME typ a je správný.
10:50 - 07.06.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Ricky
no aj tak to nejde, pozri, mamv index:

<input type="file" name="fupload" size="40">
<input type="submit" value="Nahrať" name="fupload">

a v PHP subore mam:


<?php
if (isset($_FILES['fupload']))
{
if ($_FILES['fupload']['type']=="application/octet-stream") {
echo "Soubory s příponou PHP jsou zakázány!";
}else{
$slozka = "soubory";
$cil = $slozka . "/" .$_FILES['fupload']['name'];
$nazev_souboru = $_FILES['fupload']['tmp_name'];
move_uploaded_file($nazev_souboru, $cil)
or die ("<b><font color=\"red\">Váš súbor NEBOL správne nahratý na server...");</font>
chmod ($cil, 0644);
echo "<b><font color=\"#000080\">Váš súbor bol správne nahratý na server...</font>
}}
?>

A nahrajem subor jpg, ide, nahrajem PHP, ide... Mozes mi to pozmenit? Prosiim
15:41 - 07.06.2008 | Trvalý odkaz | Odpovědět
 Králík
To Ricky: Základní syntaxové chyby. Zkus to teď.

<?php
if (isset($_FILES['fupload']))
{
if ($_FILES['fupload']['type']=="application/octet-stream") {
echo "Soubory s příponou PHP jsou zakázány!";
}else{
$slozka = "soubory";
$cil = $slozka . "/" .$_FILES['fupload']['name'];
$nazev_souboru = $_FILES['fupload']['tmp_name'];
move_uploaded_file($nazev_souboru, $cil)
or die ("<b><font color=\"red\">Váš súbor NEBOL správne nahratý na server...</font>");
chmod ($cil, 0644);
echo "<b><font color=\"#000080\">Váš súbor bol správne nahratý na server...</font>";
}}
?>
16:13 - 07.06.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Ricky
ja som ten skript skratil, problem neje vo <font> ani v " ale v to ze mi nahrava PHP, chcel som aby si mi opravil ten skript tak aby mi nenahravalo lebo ja to uz opravit neviem, prosim
16:52 - 07.06.2008 | Trvalý odkaz | Odpovědět
 Králík
To Ricky: Počuvaj chalan, ten script je velmi funkční, jestliže ti nejde, bude chyba jinde, všiml jsem si jen dvou chyb, které jsem opravil, žádná jiná tam není, hodně záleží na hostingu, resp. nastavení serveru, obávám se, že více ti nepomohu. Zkus www.diskuse.jakspatweb.cz , tam ti rádi pomohou.
18:32 - 07.06.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Ricky
No praveze som napisal uz davnejsie, tu je odkaz:

http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=9&topic=74537
19:09 - 07.06.2008 | Trvalý odkaz | Odpovědět
 Ricky
Uz mi to idee dakujem, trochu mi to blbne neviem preco, ked si otvorim Mozillu a chcem nahrat PHP subory tak mi normalne ich nahraje, ale v IE uz mi vyhlasi chybu ze je to PHP, ALE ked moj kamos nahraje cez mozillu uz mu to uakze ze je to PHP, aj IE. Cudne nie? v kazdom pripade dakujem .

PS: nedalo by sa spravit percenta nahratia?
22:54 - 07.06.2008 | Trvalý odkaz | Odpovědět
 Ricky
No to je asi velmi tazke, ale len takuto otazocku. Chcem mat odkaz na zmazanie suboru, a neviem co je na tomto skripte zle:

<a href=\"http://www.xxxxxx.cz/\" onclick=\"unlink($cil)\">$cil</a>
18:01 - 09.06.2008 | Trvalý odkaz | Odpovědět
 Králík
To Ricky: Děláš si ze mě srandu? Pleteš si PHP s JavaScriptem, to unlink je PHP script, nemůžeš ho dát do JS. Dej třeba odkaz na smazat-soubor.php?soubor=soubor.txt a tam proveď unlink v smazat-soubor.php, další otázky klaď prosím na fórum a ve tvém případě se pořádně našprtám HTML, CSS, přečtu i JS a pak až se začnu učit PHP!
15:35 - 10.06.2008 | Trvalý odkaz | Odpovědět | webová adresa
 PHPblb
Skvělej web, díky za všechno, už mám upload a funguje na 100%! Super.
14:27 - 30.07.2008 | Trvalý odkaz | Odpovědět
 hac128
diky moc velice mi to pomohlo ale jeste bych potreboval zobrazeni souboru ktery jsem uploadnul na server.
diky moc
12:41 - 01.08.2008 | Trvalý odkaz | Odpovědět
 mandel99
mám problém s uploadem vždycky to vyhodí chybu : Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 99 is not allowed to access / owned by uid 0 in /(adresa)/upload.php on line 20
Přenesený soubor nelze zkopírovat

nevíš co stím?
14:08 - 01.08.2008 | Trvalý odkaz | Odpovědět
 Králík
To mandel99: Pravděpodobně chyba serveru, konkrétně s nastavením SAFE módu.
18:27 - 01.08.2008 | Trvalý odkaz | Odpovědět | webová adresa
 mandel99
To Králík: tak nevím kde by už mohla být chyba skusil jsem ic.cz, webzdarma, websnadno vždycky to vypíše totéž... nevím si už rady...
11:42 - 04.08.2008 | Trvalý odkaz | Odpovědět
 crook
Asi uz to nikdo nesleduje ale pokud vam neustale nechce nacist soubor zkuste si zkontrolovat jestli mate input type file ...me to delalo problem cely den A nikde jinde jsem problemy nenasel
11:36 - 15.08.2008 | Trvalý odkaz | Odpovědět
 Slick
Nezapomeňte že složka kam se to bude nahrávat musí mít CHMOD nastavený na 777.
S pozdravem SLiCK
09:27 - 29.08.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Greg
Skvělý článek, máš to pěkně vysvětlené, díky
10:51 - 27.09.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Kubiro
WoW!! tak takhle dobrej článek sem ještě nečetl !!
Máš to fakt pěkně udělaný a pochopil sem to i já..
Díky moc
16:13 - 27.09.2008 | Trvalý odkaz | Odpovědět
 Greg
nvm jestli to tu uz je napsane ale aby ta podminka overeni souboru JPEG fungovala ve FF i ve IE tak se da vytvorit i takhle
if (($_FILES['fupload']['type']=="image/pjpeg") || ($_FILES['fupload']['type']=="image/jpeg"))
{ ...
18:59 - 27.09.2008 | Trvalý odkaz | Odpovědět | webová adresa
 mandel99
rád bych se ještě zeptal jak uploadovat jen soubory "playlistu" tzn. m3u, pls, asf, rm atd.. ale stačí tyto skoušel jsem různé možnosti jako file/m3u atd... ale ani jednou se mi nepovedlo uploadovat soubory vždy mi to vypsalo soubory PHP nejsu povoleny...
Díky moc za radu
21:42 - 27.09.2008 | Trvalý odkaz | Odpovědět
 Kubiro
To louka: Nemáš povolený práva - nastav z 644 na 777 pro tu složku.
17:09 - 29.09.2008 | Trvalý odkaz | Odpovědět
 Buttonek
To Slick: u ic.cz funguje chmod 644.
23:14 - 07.10.2008 | Trvalý odkaz | Odpovědět
 Buttonek
To hac128: Pro výpis uploadnutých souborů stačí do složky pro tyto soubory nahrát soubor index.php s tímto kodem. V kódu je zohledněno to, aby se soubor .php nezobrazoval s ostatními.

<html>
<head>
<title>Název stránky</title>
</head>
<body link="#000000" vlink="#000000" bgcolor="#FFFFFF">

<?php
if ($handle=opendir('.')) {
while ($file = readdir($handle))
if ($file != "." && $file != ".." && $file != "index.php")
{
$polozky[count($polozky)] = $file;
}
closedir($handle);
sort($polozky);
}

reset($polozky);
while (list($key, $val) = each($polozky))
{
if ($val != "." && $val != "..")
{
if (is_dir($val))
{
echo "(DIR) ";
echo "<a href=\"$val\">$val</a><br>\n";
}
}
}
echo "<br>\n";
reset($polozky);
while (list($key, $val) = each($polozky))
{
if ($val != "." && $val != "..")
{
if (!is_dir($val))
{
echo "<a href=\"$val\">$val</a><br>\n";
}
}
}
?>
23:25 - 07.10.2008 | Trvalý odkaz | Odpovědět
 mandel99
Čau všem, potkal jsem se s jednou zajímavou otázkou jak uploadovat soubor tak, aby sem ho nemusel odesílat zbytečně z mého PC našel jsem řešení tzv. URL upload
kdy dáte do okénka přímý odkaz na soubor a soubor se vlastně přesune z jednoho serveru na druhý bez zbytečného stahování a dalšího uploadování .
Upravil jsem uploadovací script který je tu, ale rači ho sem nedám protože nefungoval a vypadal dost debilně.. proto se ptám vás jak by mohl takový to php scipt vypadat?
11:21 - 18.10.2008 | Trvalý odkaz | Odpovědět
 Králík
To mandel99: To je sice hezké, jenže ten soubor se nejdříve stáhne někde do Tempu počítače a z počítače, který ten příkaz provádí, ho upladuje na server. Jen o tom nevíš, protože si ho sám pojmenuje a uloží. Nevím zda mám 100% pravdu, tak se mohu i mýlit, ale všiml jsem si toho, takže nevím...
18:20 - 20.10.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Ampéráček
Zdravím Tě Králíku,

celá stránka je fakt pěkná - dobře popsaná, ale bohužel se nejspíš zařadí k těm stovkám dalším, které neumějí poradit v případě, že je SAFE_MODE vypnutý. Už tu nějaký "Louka" psal, že mu to vypisuje:

Warning: move_uploaded_file() [function.move-uploaded-file.php]: Unable to move '/tmp/phpAnYjSr' to 'soubory/soubor.txt' in /home/free/ic.cz/q/quickweb/root/www/upload.php on line 16

Jsem na tom stejně. Problém je na serveru, kdy se v dočasné složce nevytvoří .tmp file s uploadovaným souborem. Dočetl jsem se na mnoha stránkách, že toto jde nějak obejít skrze PHP. Zadával jsem také:

ini_set('safe_mode', 'on');

Kdepak. Pokud mám někomu upravovat stránky v PHP a hostuje v basic účtu u Forpsi, asi má smůlu. Nevěděl bys o nějakém možném řešení? Už několik hodin louskámmanuál PHP v AJ

Díky!
04:53 - 23.10.2008 | Trvalý odkaz | Odpovědět
 Ampéráček
Už jsem na to přišel.... Jsem Lama! Děkuji.
12:13 - 23.10.2008 | Trvalý odkaz | Odpovědět
 Toppage.cz
Warning: chmod() [function.chmod]: Unable to access upload/bookmark_home.gif in /home/www/toppage.cz/videa/upload.php on line 20

Warning: chmod() [function.chmod]: stat failed for upload/bookmark_home.gif in /home/www/toppage.cz/videa/upload.php on line 20
Soubor nemohl být nahrán. Poèet chyb: 0

Tohle mi to pořád vypisuje je to chmod at ho mam na 644 nebo na 777 furt to píše co mam dělat?
18:21 - 26.10.2008 | Trvalý odkaz | Odpovědět
 Toppage.cz
Je tu někdo kdo by mi moh pomoct? Díky
17:49 - 27.10.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Toppage.cz
Tak už nic už to jde neměl jsem povolenej safe_mode
11:44 - 28.10.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Martin
použil jsem tento kod:

¨
<html>
<head>
<title>Upload souborů</title>
</head>
<body>
<form action="#" method="post" enctype="multipart/form-data">
<input type="file" name="fupload">
<input type="submit" value="Nahrát">
</form>
<?php
if (isset($_FILES['fupload']))
{
if($_FILES['fupload']['type']=="image/jpeg"){ // Pokud soubor bude mít kocovku .jpg, provede se upload
$slozka = "soubory"; // Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)
$cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.
$nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru
if(file_exists($cil)){
echo "Soubor již existuje!<br />";
}else{
$copy = move_uploaded_file($nazev_souboru, $cil)// A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky
or die ("Přenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku
chmod ($cil, 0644); // Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777
if($copy == true){ // Pokud se kopírování provede úspěšně
echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.\n<br>";
}
else{
echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error'];
}
}

}else{
echo "Lze nahrávat pouze soubory typu JPEG!";
}
}

?>
</body>
</html>




a pise mi to chyby:

Warning: move_uploaded_file(jaja/Image0007.JPG) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/free/kx.cz/z/zk/root/www/index.php on line 21

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpJ7WfIL' to 'jaja/Image0007.JPG' in /home/free/kx.cz/z/zk/root/www/index.php on line 21
P�enesen� soubor nelze zkop�rovat


vcem mam chybu??
15:22 - 01.11.2008 | Trvalý odkaz | Odpovědět
 Toppage.cz
nemáš povolenej safe_mode
20:00 - 17.11.2008 | Trvalý odkaz | Odpovědět | webová adresa
 michael
Mas to tady pěkný!
13:09 - 23.11.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Kesper
Ahoj a jak bys jsi resil upload je v pohode ale potreboval bych i vyresit aby se mi ty nahrane soubory zobrazily na strance v seznamu pod sebou ???
diky
11:22 - 07.12.2008 | Trvalý odkaz | Odpovědět
 Toppage.cz
Ahoj tady ti nikdo neodpoví. Napiš na toppage.cz do nástěnky nebo do fóra.


Jinak odpověď zní:

Předpokládám že s tý složce kam se soubory ukládají nemáš index. Do tý složky kam se ti soubory ukládaji tak tam vytvoř soubor .htaccess a do něj vlož:

Options +Indexes

A nebo si to můžeš udělat v PHP třeba přes Opendir()


Prosím navštiv moje stránky. Díky 7Hot
11:27 - 22.12.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Jonas
To Králík: To s tim overovani jestli je to PHP pomoci MIMEtype application/octet-stream je blbost - application/octet-stream vyjadruje ze obsah je binarni.
20:32 - 29.12.2008 | Trvalý odkaz | Odpovědět
 Králík
To Jonas: Žádný jiný MIME typ jsem z PHP nedostal a funguje to. Možná se tam asi nedostanou i další binární soubory, ale to jsem nezkoušel. Vlastně, pokud vím TXT to normálně bralo. Díky, teď z toho neusnu
14:30 - 30.12.2008 | Trvalý odkaz | Odpovědět | webová adresa
 Dýmoš
dáte sem pls na stažení 2 scripty který si jen člověk jen trochu upravý pujdou normálně?
16:55 - 30.12.2008 | Trvalý odkaz | Odpovědět
 Králík
To Dýmoš: Vždyť máš na stažení celý kód v TXT formě, stačí ji přepsat na PHP a máš funkční script, nevím tedy jak to myslíš...
01:04 - 01.01.2009 | Trvalý odkaz | Odpovědět | webová adresa
 Dýmoš
mě nefunguje
19:18 - 03.01.2009 | Trvalý odkaz | Odpovědět
 Dýmoš
už dou, asi sem měl někde chybu
20:56 - 03.01.2009 | Trvalý odkaz | Odpovědět
 jacck
Chvíli jsem si s tím hrál, ale upload funguje, teda určitě funguje na ic.cz, jak někteří tvrdili že ne:
Tohle by měl být kompletní kód pro upload, který nenahrává soubory s příponou PHP a který vypíše, že byl soubor úspěšně nahrán a jeho velikost v bitech.

DŮLEŽITÉ JE: tento kód a složku, kam se budou soubory ukládat, musíte mít pohromadě, tzn. v jedné složce (ale jinak si umístění musíte změnit, pokud se v tom kódu trochu vyznáte, není to takový problém!)
Název složky pro upload jsem změnil na ULOZISTE, její název si můžete změnit na řádcích 21 a 39 (jinak to nebude fungovat)
název tohoto souboru se zdrojovým kódem je "upload.php", opět, pokud se rozhodnete pro jiný název, nezapomeňte ho změnit i na řádku 41 (toto sice není až tak nutné, ale změnou nic nezkazíte). Je důležité, aby byly názvy všech souborů a složek malými písmeny, jinak to na některých serverech může zlobit. Také je ještě důležité, aby chmod složky pro upload (v mém případě "ULOZISTE") byl na serveru nastaven na 0777. Pro ty co nevědí jak? Například, když své stránky otevřete v Total Commanderu, tak klikněte na Soubor a pak na Změnu atributů a tam buď vše zakřížkujete, nebo do řádku dole napíšete 777.
pro případné dotazy mě kontaktujte na e-mailu: jacckjacck@seznam.cz. a tady je ten kód:
.........................................................................................

<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1250">
<title>NAHRÁVÁNÍ SOUBORU</title>
</head>
<body>
<h1>Nahrávání souboru</h1>
<br>
<form action="#" method="post" enctype="multipart/form-data">
<input type="file" name="fupload">
<input type="submit" value="Nahrát">
</form><br>
<?php
if (isset($_FILES['fupload']))
{
if($_FILES['fupload']['type']=="application/octet-stream"){ // Pokud soubor bude mít kocovku .php, upload se neprovede a vypíše hlášku
echo "Soubory s příponou PHP jsou zakázány!"; // Která je zde
}else{ // Pokud soubor není PHP, script se provede
$slozka = "uloziste"; // Zde si napište svojí složku, DO KTERÉ SE BUDOU SOUBORY UKLÁDAT (bez lomítka). Př: $slozka = "upload";
$cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.
$nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru
$copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky
or die ("Přenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku
chmod ($cil, 0777); // Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by jste chtěli práva omezit, můžete z 0777 změnit na 0644
if($copy == true){ // Pokud se kopírování provede úspěšně
echo "Soubor " .$_FILES['fupload']['name']. " o velikosti ".$_FILES['fupload']['size']. " bitů, byl úspěšně nahrán na server.\n<br>";
}else{
echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error'];
}
}
}
?>
<h4>Nahrané soubory</h4>
<?php
if ($handle=opendir('uloziste/.')) {
while ($file = readdir($handle))
if ($file != "." && $file != ".." && $file != "upload.php")
{
$polozky[count($polozky)] = $file;
}
closedir($handle);
sort($polozky);
}

reset($polozky);
while (list($key, $val) = each($polozky))
{
if ($val != "." && $val != "..")
{
if (is_dir($val))
{
echo "(DIR) ";
echo "<a href=\"$val\">$val</a><br>\n";
}
}
}
echo "<br>\n";
reset($polozky);
while (list($key, $val) = each($polozky))
{
if ($val != "." && $val != "..")
{
if (!is_dir($val))
{
echo "<a href=\"$val\">$val</a><br>\n";
}
}
}
?>

<?
$browser_languages = explode(",", getenv("HTTP_ACCEPT_LANGUAGE"));
$nb_browser_languages = sizeof($browser_languages);
$browser_lang = ""; // ne pas initialiser
$biContinue = true;

for ($niI = 0; $biContinue==true && $niI < $nb_browser_languages; $niI++)
{
$biContinue = false;
$lg = explode("-", $browser_languages[$niI]);
switch ($lg[0])
{
case "fr" : $directoryListing = "Répertoire(s) à la racine du serveur (\"soutez\")";
$presentation = "Cette page permet de visualiser les répertoires placés à la racine du serveur. Si vous souhaitez organiser autrement le répertoire "www", vous pouvez effacer ce fichier. Il en existe une copie de sauvegarde dans le répertoire "safe" (index-safe.php).";
break;
case "en" : break;
default: $biContinue = true;
}
}
?>
</body>
</html>
14:33 - 04.01.2009 | Trvalý odkaz | Odpovědět
 Jacck
Omlouvám se, že jsem to sem umístil třikrát, trochu mě zlobilo odesílání příspěvku a pak to šlo všechno najednou.

Ale doufám, že vám můj příspěvek pomůže!
14:39 - 04.01.2009 | Trvalý odkaz | Odpovědět
 Jacck
V článku jsem ještě zapomněl zmínit, to o co tu psali jiní uživatelé.
Tento kód vypisuje nahrané soubory hned pod pole pro nahrání souboru a ne na jinou stránku, nebo že tu zobrazí jen naposledy přidaný soubor (což ale má také své výhody!).

Jinak vzhled tohoto kódu není nijak upraven, takže pro lepší vizáž je potřeba do něho zamontovat i nějaký ten kaskádový styl.
14:44 - 04.01.2009 | Trvalý odkaz | Odpovědět
 miras1983
cauky jo a k tomu ze tam ma diru jako prase! Nema diru. Vzdyt nahraje pouze jpg a ne php a jine scripty. Copak se da obrazkem, kterym nahrajes ne server neco udelat? Nazdarek PS:clovek se uci cely zivot.
21:18 - 05.01.2009 | Trvalý odkaz | Odpovědět
 php upload soubor s diakritiko
napr. snímek.jpg
02:33 - 06.01.2009 | Trvalý odkaz | Odpovědět
 Mach37
To Ampéráček:

Všici co tu psali třeba o tom ic.cz tak stači nastavit chmod 777 u složky "soubory" bo kam to nahravate ne? mě to tak šlo (u ic.cz i yc.cz ostatní nwm !)
20:32 - 20.01.2009 | Trvalý odkaz | Odpovědět
 bedřich
hm......jedinečné
14:49 - 27.01.2009 | Trvalý odkaz | Odpovědět
 Jarbi
šel by udělat ještě ňákej kód aby se pod textem "Jdi na soubor" nebo jinde zobrazoval nahraný obrázek nebo náhled obrázku
16:27 - 29.01.2009 | Trvalý odkaz | Odpovědět
 peter.killer
1) Demonstrace jednoduchého testu velikosti a zároveň typu souboru:

<form enctype="multipart/form-data" method="post" action="?odeslat=1">
<input name="fotka" type="file" size="20">
<input type="submit" value="Nahrát">
</form>

<?php

if ($_GET['odeslat'] == 1 ) {

$soubor_velikost = ($_FILES['fotka']['size']);
$soubor_typ = ($_FILES['fotka']['type']);
$soubor_nazev = ($_FILES['fotka']['name']);

if (($soubor_velikost < 3145729) && ($soubor_velikost != 0)) {
if (($soubor_typ != "application/octet-stream") && (($soubor_typ == "image/jpeg") || ($soubor_typ == "image/pjpeg"))) {

echo("Pokud jste došli až sem, soubor je OK");

} else {echo ("Nahrávaný soubor není požadovaného typu (JPG)");}
} else {echo ("Nahrávaný soubor je buď příliš velký (maximální velikost je 3 MB)");}

}

?>

2) Chyby při testování
Bohužel při testování na lokálním serveru se nepodařilo skript rozběhat. Stejné chyby, jaké byly uvedeny výše, a to i při zapnutí safe_mode. Chyba nastane při kopírování dočasného souboru z dočasné složky na server. Nicméně spousta lidí tu píše, že na ic to rozběhnout jde a asi mají pravdu. Budu dál přemýšlet, co s tím pod localhostem a když na něco přijdu, zase napíšu.
03:03 - 10.02.2009 | Trvalý odkaz | Odpovědět | webová adresa
 Králík
To peter.killer: Vím, že jsem s tím měl na localhostu taky problém. Používal jsem EasyPHP a házelo to chybu. Poté jsem si sám nastavil Apache a PHP a script už bez problému fungoval
14:54 - 10.02.2009 | Trvalý odkaz | Odpovědět | webová adresa
 peter.killer
Nevím, čím to, ale v téhle podobě už localhost žádnou chybu nepíše, ať už se zapnutým safe_mode nebo bez (zkoušeno v programu VertrigoServ 2.05 (Apache 2.0.55, PHP 5.1.2, Mysql 5.0.19, SQLite 3.3.4, ZendOptimizer 2.6.2).
Dále je ošetřen nejen typ souboru, aby byl pouze JPG (JPEG) a nemohl být větší než 3 MB, ale také, aby nesměl být delší název než 50 znaků. Diakritika a mezery v názvu se odstraní automaticky. Jediné, na co si musí dávat uživatel pozor je, že složka [root]/fotky/ musí být vytvořena předem (ale i to by se dalo kontrolovat). Automaticky se přepíší soubory se stejným názvem (někdo už tady psal, jak ošetřit i to).

<form enctype="multipart/form-data" method="post" action="?odeslat=1">
<input name="fotka" type="file" size="20">
<input type="submit" value="Nahrát">
</form>

<?php

if ($_GET['odeslat'] == 1 ) {

$soubor_velikost = ($_FILES['fotka']['size']);
$soubor_typ = ($_FILES['fotka']['type']);
$soubor_nazev = ($_FILES['fotka']['name']);

// odstraneni mezer, diakritiky a omezeni poctu znaku v nazvu souboru
$soubor_nazev = ereg_replace(" +", "", $soubor_nazev);
$soubor_nazev = (StrTr($soubor_nazev, "ÁÄČÇĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčçďéěëíňóöřšťúůüýž", "AACCDEEEINOORSTUUUYZaaccdeeeinoorstuuuyz"));

If ((strlen($soubor_nazev)) < 50) {

$soubor_docasne = ($_FILES['fotka']['tmp_name']);
$adresar = $_SERVER['DOCUMENT_ROOT'] . "/fotky/"; // zde nastavte existujici adresar (vuci rootu serveru), jinak vypise chybu a nic nenahraje
$cil = $adresar . $soubor_nazev;
$soubor_velikost_kB = round($soubor_velikost / 1024);

if (($soubor_velikost < 3145729) && ($soubor_velikost != 0)) {
if (($soubor_typ != "application/octet-stream") && (($soubor_typ == "image/jpeg") || ($soubor_typ == "image/pjpeg"))) {

if (move_uploaded_file($soubor_docasne, $cil)) {
list($sirka, $vyska, $typ, $atributy) = getimagesize($cil);
echo ("<br />Fotka " . $soubor_nazev . " o velikosti " . $soubor_velikost_kB . " kB a rozměrech " . $sirka . "x" . $vyska . " byla úspěšně nahrána.<br />");
}

} else {echo ("<br />Vybraný soubor není požadovaného typu (JPG).");}
} else {echo ("<br />Vybraný soubor je příliš velký. Maximální velikost je 3 MB.");}
} else {echo ("<br />Maximální povolený počet znaků v názvu souboru je 50.");}

}

?>

</div>
15:37 - 10.02.2009 | Trvalý odkaz | Odpovědět | webová adresa
 News
Cau potřeboval bych pomoct.Nemam skusenosti s PHP.Používám pouze actionscript.A proto bych potřeboval jestli by mi někdo na můj mail dj22@email.cz poslal zdrojové kódy a jak a kam a co uploadnout.Používám webhosting WebSnadno.cz
15:52 - 12.02.2009 | Trvalý odkaz | Odpovědět | webová adresa
 Králík
To News: Tak s tím se rozluč, takhle ti nikdo nepomůže. Nauč se základy a měj vlastní web s PHP...
16:04 - 12.02.2009 | Trvalý odkaz | Odpovědět | webová adresa
 News
Diky za rychlou odpoved.Skoda.
21:08 - 12.02.2009 | Trvalý odkaz | Odpovědět | webová adresa
 usobak
čau lidičky nahrávání na server funguje ok jen se chci zeptat jak v php ošetřit že když je na serveru soubor se stejným názvem tak aby se ten novy nahrál pod jiným názvem. např na serveru je pokus.doc budu nahrávat další a chtěl bych aby se třeba uložil jako pokus-1.doc nemáte někdo nějakou radu?
12:16 - 13.02.2009 | Trvalý odkaz | Odpovědět
 Sakalik
Ne, že bych tenhle kód už někde viděl... Mno, ale c v kruhu nikoho dneska moc nezajímá ...
20:47 - 18.02.2009 | Trvalý odkaz | Odpovědět | webová adresa
 Evandar
Malé vylepšení, pokud soubor existuje, tak to přidává file(1).txt, file(2).txt, ... a funkce is_uploaded_file, tu používám už od té doby co mám script z jiné stránky A funguje skvěle.

if((is_uploaded_file($_FILES['fupload']['tmp_name']))==true)
{
$slozka = "files"; // Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)
// $cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.
$jmeno=$_FILES['fupload']['name'];
$i=1;

while(file_exists(SERVER_ADDRESS."files/".$jmeno))
{
$jmeno_cast=explode(".", $jmeno);
$nazev=$jmeno_cast[0];
$pripona=$jmeno_cast[1];
$pocet_kopii=$i-1;
if($i>1) $nazev=str_replace("(".$pocet_kopii.")", "", $nazev);
$jmeno=$nazev."(".$i.").".$pripona;
$i++;
}

$cil = $slozka . "/" .$jmeno;
$nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru
$copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky
or die ("Přenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku
chmod ($cil, 0777); // Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777
if($copy == true){ // Pokud se kopírování provede úspěšně
echo "Soubor " .$jmeno. " byl úspěšně nahrán na server.\n<br><a href=\"$cil\">Jdi na soubor</a>";
}else{
echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error'];
}
}
23:30 - 09.03.2009 | Trvalý odkaz | Odpovědět | webová adresa
 Lovew
Nechces to hodit cely do uploadu pls?
17:27 - 13.03.2009 | Trvalý odkaz | Odpovědět
 keeehi
Ahoj,
všechny scripty co jsou v diskusi jsem neprocházel, ale ty co jsou uvedeny v článku, tak tam stále mají BEZPEČNOSTNÍ DÍRU.

ps. googlete GIF injection
pps. Relevantí články k problematice GIF injection jsem našel pouze v angličtině
20:51 - 15.03.2009 | Trvalý odkaz | Odpovědět
 notwist
Mám svůj server, kde si můžu editovat php.ini. Mám tam tyto hodnoty:
max_execution_time = 3000
max_input_time = 6000
memory_limit = 32M
upload_max_filesize = 200M
Když nahraji třeba sobor o velikosti 20M, tak prohlížeč po nějaké době hodí chybu, stránku nelze načíst. Musím ještě něco upravit? Dík za odpověď.
17:51 - 17.03.2009 | Trvalý odkaz | Odpovědět
 tcladin
Ahoj. Jako keehi si myslím, že skript má díru.
Já si všiml toho chmod 0777. Bohužel ani já zatím nevím jak ošetřit, aby šlo s chmod > 0700. Mělo by to jít nějak v kombinaci s UID... Až budu vědět dám vědět, čus
19:11 - 30.03.2009 | Trvalý odkaz | Odpovědět | webová adresa
 leito
Tak mě napadlo, nikde jsem to tu neviděl, všude používáte pro kontrolu typu souboru proměnou $_FILES['upload_file']['type'], ale co takhle použít jednoduše $_FILES['upload_file']['name']. Např:

if (!preg_match('/(gif|jpe?g|png)$/i', $_FILES['upload_file']['name']))
{

/*
kód pokud je má soubor koncovku gif || jpeg || jpg || png nebo GIF || JPEG || JPG || PNG
*/

}

Pokud to tu někde je, tak se omlouvám za duplikát...
11:04 - 11.04.2009 | Trvalý odkaz | Odpovědět
 leito
Ou, chybka, samozřejmě to má být kód pokud není takováto koncovka...
11:05 - 11.04.2009 | Trvalý odkaz | Odpovědět
 leito
Ještě bych chtěl dodat, že samozřejmě, žádná kontrola není zbytečná, takže osobně bych přidal i kontrolu $_FILES['upload_file']['type']

Čím víc tím líp....
11:14 - 11.04.2009 | Trvalý odkaz | Odpovědět
 bary
ahoj, tento skrypt jsem si zkopíroval je na http://janbarasek.sweb.cz/php/prihlaseni/nahrat.php ale nechce fungovat, prosim o radu na muj email janbarasek@seznam.cz děkuji
13:23 - 11.04.2009 | Trvalý odkaz | Odpovědět | webová adresa
 leito
Možná by se spíš hodilo napsat sem ten kód, než odkaz na stránku na které beží...
17:27 - 11.04.2009 | Trvalý odkaz | Odpovědět
 x3me
Moc pěkné!
19:56 - 14.04.2009 | Trvalý odkaz | Odpovědět

Přidat příspěvek

Jméno nebo přezdívka
Webové stránky Nemusíte
E-mail Nemusíte (nebude zveřejněn)
Text
Výsledek součtu 3 a jedna
Redakce serveru neodpovídá a nenese žádnou zodpovědnost za obsah komentářů. Vyhrazuje si však právo příspěvky odstraňovat. Nepřijatelné jsou zejména texty urážlivé, vulgární nebo rasistické.

© 2006 - 2009 Filip Krayzel / Poháněno mou administrací / RSS