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.
| to se hodi diky moc!! |
| 16:51 - 06.02.2007 | Trvalý odkaz | Odpovědět |
| Tak tohle už je lepší než rozebírání print screen |
| 21:32 - 06.02.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| To Lancelot: No, tak já ti děkuji |
| 09:14 - 08.02.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| To Králik: Nevím sice za co, ale budiž |
| 20:15 - 08.02.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| Ahoj!!! Děkuji , velkovezírovy, moc mi to pomohlo........ |
| 07:16 - 24.02.2007 | Trvalý odkaz | Odpovědět |
| To xxBOBO: Není zač, jsem rád, že ti to pomohlo. |
| 08:48 - 24.02.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| Diky za navod.. akorat mi nejel upload obrazku v IE ( musel jsem
dopsat "image/pjpeg" ) jenze pak mi zase nejel v FF 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 |
| To Heady: Dík |
| 23:05 - 07.04.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| 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 |
| 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 |
| To louka: Zeptej se podpory freehostingu ic.cz |
| 20:40 - 17.04.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| 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 |
| cau dobre vysvetleno ale mam dotaz ze mi to nejde muze byt ic.cz nebo
sem jen takove trdlo |
| 20:21 - 02.05.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| To Zahry: Díky moc, lidé radu ocení |
| 11:53 - 03.05.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| Pěkný článek dobrá práce |
| 08:43 - 04.05.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| $_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 |
| To Heady: mně teda ted tvuj skript ve FF nechodi - jpgcka proste nebere |
| 10:24 - 21.05.2007 | Trvalý odkaz | Odpovědět |
| 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 |
| To zdick: Dík za rozšíření, hodně to pomůže |
| 19:15 - 29.05.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| 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 |
| Tak nevim, nefunguje mi to.... |
| 13:37 - 03.06.2007 | Trvalý odkaz | Odpovědět |
| 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 |
| Ještě pardon můj mail je bestforum@centrum.cz |
| 09:25 - 09.06.2007 | Trvalý odkaz | Odpovědět |
| 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 |
| hodně jste mi tímto scriptem pomohli. díky |
| 22:15 - 20.06.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| Krásný článek, díky za nakopnutí... |
| 23:00 - 28.06.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| 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 |
| 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 |
| To patrik: Nauč se AJAX |
| 07:45 - 19.07.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| diky moc, presne tohle jsem hledal, moc mi to pomohlo |
| 18:02 - 25.07.2007 | Trvalý odkaz | Odpovědět |
| 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 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 |
| To Mike: Heh, moc díky |
| 11:25 - 05.08.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| 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 |
| 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 |
| 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 |
| č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 |
| 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 |
| 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 |
| 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 |
| 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 |
| To Monti: Google.com |
| 15:41 - 03.10.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| fine rada, diky bloggere |
| 15:59 - 03.10.2007 | Trvalý odkaz | Odpovědět |
| To Monti: Není za co |
| 18:17 - 03.10.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| http://cz.php.net/manual/cs/features.file-upload.multiple.php |
| 19:41 - 12.11.2007 | Trvalý odkaz | Odpovědět |
| 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 |
| 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 |
| 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 |
| oprava - podminka je if($koncovka==".php") |
| 17:00 - 04.12.2007 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| diky, pozadal jsem jednoho programatora, uz to mam hotove. Diky za odpoved |
| 22:34 - 21.01.2008 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| 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 |
| To Hawk: Mel jsem podobny problem a nasel jsem, ze pomuze funkce stripslashes() |
| 15:34 - 27.03.2008 | Trvalý odkaz | Odpovědět |
| 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 |
| 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 |
| To Patrik: Ano - "C:\Users\Patrik\Documents\wbs". |
| 14:06 - 15.05.2008 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| To |
| 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 |
| 13:47 - 04.06.2008 | Trvalý odkaz | Odpovědět |
| 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 |
| 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 |
| 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 |
| Ale ten nefunguje, vobec nefunguje som skusal a da sa nahravat aj PHP subory... |
| 21:14 - 04.06.2008 | Trvalý odkaz | Odpovědět |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| Uz mi to idee PS: nedalo by sa spravit percenta nahratia? |
| 22:54 - 07.06.2008 | Trvalý odkaz | Odpovědět |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 11:36 - 15.08.2008 | Trvalý odkaz | Odpovědět |
| 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 |
| Skvělý článek, máš to pěkně vysvětlené, díky |
| 10:51 - 27.09.2008 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| 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 |
| 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 |
| 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 |
| To Slick: u ic.cz funguje chmod 644. |
| 23:14 - 07.10.2008 | Trvalý odkaz | Odpovědět |
| 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 |
| Č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 |
| 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 |
| 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 |
| Už jsem na to přišel.... Jsem Lama! Děkuji. |
| 12:13 - 23.10.2008 | Trvalý odkaz | Odpovědět |
| 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 |
| Je tu někdo kdo by mi moh pomoct? Díky |
| 17:49 - 27.10.2008 | Trvalý odkaz | Odpovědět | webová adresa |
| Tak už nic už to jde neměl jsem povolenej safe_mode |
| 11:44 - 28.10.2008 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| nemáš povolenej safe_mode |
| 20:00 - 17.11.2008 | Trvalý odkaz | Odpovědět | webová adresa |
| Mas to tady pěkný! |
| 13:09 - 23.11.2008 | Trvalý odkaz | Odpovědět | webová adresa |
| 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 |
| 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 |
| 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 |
| 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á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 |
| 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 |
| mě nefunguje |
| 19:18 - 03.01.2009 | Trvalý odkaz | Odpovědět |
| už dou, asi sem měl někde chybu |
| 20:56 - 03.01.2009 | Trvalý odkaz | Odpovědět |
| 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 |
| 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 |
| 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 |
| 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 |
| napr. snímek.jpg |
| 02:33 - 06.01.2009 | Trvalý odkaz | Odpovědět |
| 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 |
| hm......jedinečné |
| 14:49 - 27.01.2009 | Trvalý odkaz | Odpovědět |
| š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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| Diky za rychlou odpoved.Skoda. |
| 21:08 - 12.02.2009 | Trvalý odkaz | Odpovědět | webová adresa |
| č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 |
| 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 |
| 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 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 |
| Nechces to hodit cely do uploadu pls? |
| 17:27 - 13.03.2009 | Trvalý odkaz | Odpovědět |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| Moc pěkné! |
| 19:56 - 14.04.2009 | Trvalý odkaz | Odpovědět |