Autor | Zpráva | ||
---|---|---|---|
Marschmallow Profil |
Dobrý den,
včera jsem se ptal na výpis souborů pomocí PHP s odkazem. Soubory do té složky vypisuje skript, na který se Vás chci zeptat. Když nahraji soubor obrazek.jpg, normálně vše proběhne a soubor se nahraje. Když poté nahraji jiný soubor se stejným názvem obrazek.jpg, nový obrázek se nahraje a starý se odstraní (přepíše na nový). A to já nechci. Když by se nahrál třeba druhý obrázek jménem obrazek.jpg, tak aby se nahrál přepsaný jako obrazek1.jpg (tedy pokud už na serveru je nahraný obrazek.jpg). Můj kód: <?php // konfigurace $uploadDir = './soubory'; // adresar, kam se maji nahrat obrazky (bez lomitka na konci) $allowedExt = array('jpg', 'jpeg', 'png', 'gif'); // pole s povolenymi priponami // zpracovani uploadu if(isset($_FILES['obrazky']) && is_array($_FILES['obrazky']['name'])) { $counter = 0; $allowedExt = array_flip($allowedExt); foreach($_FILES['obrazky']['name'] as $klic => $nazev) { $fileName = basename($nazev); $tmpName = $_FILES['obrazky']['tmp_name'][$klic]; // kontrola souboru if( !is_uploaded_file($tmpName) || !isset($allowedExt[strtolower(pathinfo($fileName, PATHINFO_EXTENSION))]) ) { // neplatny soubor nebo pripona continue; } // presun souboru if(move_uploaded_file($tmpName, "{$uploadDir}".DIRECTORY_SEPARATOR."{$fileName}")) { ++$counter; } } echo "<p>Bylo nahráno {$counter} z ".sizeof($_FILES['obrazky']['name'])." obrázků.</p>"; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html; charset=windows-1250" http-equiv="content-type"> <title></title> </head> <body> <h2><u>Uploadni soubor na web!</u></h2> <form method="post" enctype="multipart/form-data"> <input type="file" name="obrazky[]" multiple="multiple" /> <input type="submit" value="Nahrát" /><br> <br> <br> Nahrajte soubor a kliknutím <a href="obsah.php">sem</a> zobrazíte všechny nahrané soubory, včetně toho vašeho. </body> </html> Děkuji :) |
||
Taps Profil |
#2 · Zasláno: 28. 12. 2013, 15:48:41
Marschmallow:
pomocí funkce <? file_exists(); ?> <? $fileName = time().'̈́-'.basename($nazev); ?> |
||
Marschmallow Profil |
Taps:
Díky, ale nefunguje mi to, nebo spíš nevím kam (na jaké místo) to napsat. EDIT: Funguje to, ale zakáže to tam nahrávat stejný název souboru, takže se ani nenahraje, ani nepřepíše. |
||
tatyalien Profil |
Dej si kontrolu názvu do cyklu while a až narazíš na název, který neexistuje, tak teprve pak přesuň soubor.
Já používám například: // dělám v Nette, takže getSanitizedName() ti asi nebude fungovat, ale dosaď si získaný prvotní název obrázku // $uploadFolder = cesta kam ukládáš soubory $name = $data['obrazek']->getSanitizedName(); $isExisting = @fopen($uploadFolder.$name,"r"); while($isExisting) { $name = rand(0, 9).$name; $isExisting = @fopen($uploadFolder.$name,"r"); } $data['obrazek']->move($uploadFolder.$name); |
||
Jan Tvrdík Profil |
#5 · Zasláno: 30. 12. 2013, 09:46:12
tatyalien:
Což lze zjednodušit na: $name = $data['obrazek']->getSanitizedName(); while (file_exists($uploadFolder . $name)) { $name = rand(0, 9) . $name; } $data['obrazek']->move($uploadFolder . $name); |
||
tatyalien Profil |
#6 · Zasláno: 30. 12. 2013, 22:39:01
Jan Tvrdík:
jop... taky pravda ;) |
||
Časová prodleva: 10 let
|
0