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
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
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
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
a co tak pouzit funkciu rename?
http://sk.php.net/manual/en/function.rename.php

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: