Autor | Zpráva | ||
---|---|---|---|
Apacuka Profil |
Zdravím,
mohli by ste mi prosím pomoci s úpravou tohoto kódu? Pomocí skriptu uploaduji obrázek OBRÁZEK.JPG Skript ho uloží do adresáře imagesx, pak vytvoří zmenšeninu se stejným názvem do imagesx/thumbs, pak zapíše do db id,nazev_obrazku. Co doplnit do tohoto kódu, aby se místo originálních názvů ukladaly názvy ve stylu 1248799393 ? to číslo je funkce time(). Prosím moc o pomoc. <?php error_reporting(E_ALL); include 'dbc.php'; if ($_POST['submit'] == 'Uložit obrázek') { if ($_FILES["file"]["name"]!="") { $ok=0; $check=mysql_query("SELECT COUNT(*) AS pocet FROM images WHERE file='".$_FILES["file"]["name"]."'"); $check=mysql_fetch_array($check); if ($check["pocet"]==0) { $explode=explode(".", $_FILES["file"]["name"]); if ($explode[1]=="jpg" OR $explode[1]=="JPG") { $img_data=imagecreatefromjpeg($_FILES["file"]["tmp_name"]); } if ($explode[1]=="png" OR $explode[1]=="PNG") { $img_data=imagecreatefrompng($_FILES["file"]["tmp_name"]); } if ($explode[1]=="gif" OR $explode[1]=="GIF") { $img_data=imagecreatefromgif($_FILES["file"]["tmp_name"]); } if ($_POST["changeres"]==0) { move_uploaded_file($_FILES["file"]["tmp_name"], "./imagex/".$_FILES["file"]["name"]); $ok=1; } else { if ($_POST["changeres"]==1 AND $_POST["new_width"]!="") { $width=imagesx($img_data); $height=imagesy($img_data); $i=$_POST["new_width"]/$width; $new_height=$i*$height; $create=imagecreatetruecolor($_POST["new_width"], $new_height); imagecopyresampled($create, $img_data, 0, 0, 0, 0, $_POST["new_width"], $new_height, imagesx($img_data), imagesy($img_data)); if ($explode[1]=="jpg" OR $explode[1]=="JPG") { imagejpeg($create, "./imagex/".$_FILES["file"]["name"], 100);} if ($explode[1]=="png" OR $explode[1]=="PNG") { imagepng($create, "./imagex/".$_FILES["file"]["name"], 0); } if ($explode[1]=="gif" OR $explode[1]=="GIF") { imagegif($create, "./imagex/".$_FILES["file"]["name"]); } $ok=1; //... //... //pokracovani kodu //... ?> <form action="<?php $PHP_SELF ?>" method="post" enctype="multipart/form-data"> <div> <p><strong>Nahrát obrázek:</strong><br><input type="file" name="file"></p> <p><strong>Název:</strong><br><input type="text" name="title" value="<?php echo($_POST["title"]); ?>" style="width: 150px;"></p> <p><strong>Rozlišení obrázku:</strong><br><input type="radio" name="changeres" value="0">Ponechat<br> <p><input type="submit" name="submit" value="Uložit obrázek"></p> </div> </form> Nechtel sem vkládat cely skript, ale pokud by bylo nutno klidně vložím i zbytek. |
||
AM_ Profil |
#2 · Zasláno: 28. 7. 2009, 23:46:56
move_uploaded_file($_FILES["file"]["tmp_name"], "./imagex/".$_FILES["file"]["name"]); -> //nacist priponu $ext = explode('.', $_FILES['file']['name']); $ext = $ext[count($ext)-1]; move_uploaded_file($_FILES["file"]["tmp_name"], "./imagex/".time().$ext); Samozřejmě musíš obdobně změnit i uložení záznamu do DB. Případně musíš přizpůsobit skript, který čte záznamy obrázků z DB, aby vyhledal správný soubor (nejlépe do DB uložit jak původní název obrázku, tak zjednodušený název použitý na serveru), pokud nadále o původní název stojíš. bacha, když náhodou 2 lidi uploadujou ve stejnou vteřinu, druhému se obrázek nenahraje, protože se budou shodovat názvy. |
||
Alphard Profil |
#3 · Zasláno: 28. 7. 2009, 23:49:00
S time() hrozí kolize, když bude obrázky uploadovat více lidí najednou. Navrhuji pojmenovat obrázek podle jeho id v databázi (auto_increment).
Mam tady fragment kódu, který to dělá, snad je to pochopitelné. $result = mysql_query ("insert into obrazky (jmeno) values ('$jmeno')"); $last_id = mysql_insert_id (); $stav[1] = uloz_obrazek_max ($_FILES['image']['tmp_name'][$klic], "images/normal/".$last_id, 800); $stav[2] = uloz_obrazek_max ($_FILES['image']['tmp_name'][$klic], "images/small/".$last_id, 200); |
||
Apacuka Profil |
Dekuju moc za odpovedi.
AM_: zkousel sem to, ale nemohl sem to rozhejbat. Porat to psalo ten puvodni nazev. Alphard: do toho tvyho sem se radsi ani nepoustel jelsikoz nevim co a kam :) Nasel sem ovsem podle me uplne nejlepsi reseni. A tim je generovani nahodnyho jmena o 12 znacich. (a-z,A-Z,0-9). Ted to funguje uplne bez problemu. - pridana funkce randomname - prehazeni + doplneni par radku skript po uprave: ************** <?php error_reporting(E_ALL); include 'dbc.php'; function randomname($delka_hesla) { $mozne_znaky = 'abcdefghijklmnopqrstuvwxyz123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_-'; $vystup = ''; $pocet_moznych_znaku = strlen($mozne_znaky); for ($i=0;$i<$delka_hesla;$i++) { $vystup .= $mozne_znaky[mt_rand(0,$pocet_moznych_znaku)]; } return $vystup; } if ($_POST['submit'] == 'Uložit obrázek') { if ($_FILES["file"]["name"]!="") { $explode=explode(".", $_FILES["file"]["name"]); $explode[0]=randomname(11); $_FILES["file"]["name"] = $explode[0].".".$explode[1]; $ok=0; $check=mysql_query("SELECT COUNT(*) AS pocet FROM images WHERE file='".$_FILES["file"]["name"]."'"); $check=mysql_fetch_array($check); if ($check["pocet"]==0) { if ($explode[1]=="jpg" OR $explode[1]=="JPG") { $img_data=imagecreatefromjpeg($_FILES["file"]["tmp_name"]); } |
||
Majkl578 Profil |
#5 · Zasláno: 29. 7. 2009, 05:00:14
Apacuka
nevim jestli je to to nejstastnejsi reseni. co by jsi rikal na id + webalizovany nazev souboru? napr: Toto je příklad jak by měl vypadat obrázek.jpg -> plna velikost: 5-toto-je-priklad-jak-by-mel-vypadat-obrazek.jpg, nahled: 5-toto-je-priklad-jak-by-mel-vypadat-obrazek.th.jpg osobne toto reseni pouzivam, jednak zajisti 100% unikatnost a take necha obrazku smysluplny nazev (indexace, ukladani fotek do pc..) |
||
denCo Profil |
#6 · Zasláno: 29. 7. 2009, 14:40:55
a co tak pouzit funkciu rename?
http://sk.php.net/manual/en/function.rename.php |
||
Časová prodleva: 15 let
|
0