Autor Zpráva
Anonym
Profil
Dobrý den, mám takovou otázku, jak by se dali mazat z adresáře nepoužívané profilové obrázky? Mám adresář "avatars", do kterého nahrávám obrázky. A proto se na to ptám, aby nebyl adresář zbytečně velký tak bych potřeboval aby se mazaly nepoužívané obrázky. Asi bych měl nějak kontrolovat cesty k obrázkům v databázi, ale nevím jak docílit toho aby se vždy vymazaly i z adresáře když je uživatel přepíše. Všem moc děkuji za odpověd :)
Darker
Profil
Dej uživateli ID a podle toho pojmenuj avatar. Při aktualizaci avataru se ten starý nahradí novým.
Anonym
Profil
mockrát děkuji :) to mě nenapadlo :)


Ještě jsem se chtěl zeptat, je možné převádět všechny typy obrázků třeba na png, př.: když mám obrázek "já_nevim_co.jpg" můžu ho převést na "$id.png" (a takhle převádět třeba i gif...)? Asi to ovlivní kvalitu obrázku, nebo je to v pořádku?
Darker
Profil
Nejdřív zkontroluj typ souboru:
mime_content_type($_FILES["file"]["tmp_name"])
Potom z typu vypreparuj typ obrázku pomocí PHP funkce substr:
image/png
Následně z obrázku udělaj resource obrázku funkcí ktereu vybereš selectem:
select($type) {
  case "png" : imagecreatefrompng($_FILES["file"]["tmp_name"])  //atd...
Tak, a teď uděláš:
imagepng("upload/avatars/$userid.png");
Majkl578
Profil
Logicky pokud uživatel má v databázi cestu k avataru, tak i ve chvíli, kdy aktualizuje svůj avatar, znáš název původního a můžeš ho smazat. V důsledku je pak můžeš teoreticky pojmenovávat jakkoliv. Zpětně by to šlo snadno - vytáhl by sis seznam všech obrázků z db, poté by sis vylistoval soubory ve složce s obrázky, udělal rozdíl polí (ze seznamu všech na disku bys odstranil ty co jsou v databázi - array_diff) a tuto podmnožinu smazal.

Darker:
Nejdřív zkontroluj typ souboru:
mime_content_type
Tahle funkce je deprecated (ve prospěch Fileinfo) a neměla by se používat.
Anonym
Profil
Darker:
Promin ale nějak tomu nerozumím (a když tam dám nějaké ty funkce tak mi to hází errory ), já mám tento kod:
  $name = $_FILES['myfile']['name'];
  $file = explode(".", $_FILES['myfile']['name']); 
  $pripona = end($file); 
  unset($file[count($file)-1]); 
  $nazev = implode(".", $file);
  $tmp_name = $_FILES['myfile']['tmp_name'];

    // sem dám ještě kontrolu souborů, aby nešlo exe, php, html a já nevim co dalšího

    if ($name)
  {
    $newname = $id.".".$pripona;
     
      $location = "avatars/$newname";
    move_uploaded_file($tmp_name, $location);
                  
      $query = mysql_query("UPDATE users SET image='$location' WHERE username='$username'"); //vím že by tu radši mělo být WHERE id='$id'
                  
      Header("Location: http://127.0.0.1/prof_img.php"); 
  }
  else
    echo "Prosím vyberte soubor.";             
 

zajímá mě jestli bych mohl jen jednoduše udělat toto?
- místo $newname = $id.".".$pripona; bych udělal jen $newname = $id.".png";

moc ti děkuji za trpělivost :)

EDIT: ještě jsem tam měl toto na generování jmen:
$cislice = "1234567890";
    $pocet = 10;
    $hash = "";
    
     SRand((double)MicroTime()*1e6);
    for($i=0;$i<$pocet;$i++):
    
     $rand = Rand(0, StrLen($cislice)-1);
    
     $hash .= SubStr($cislice, $rand, 1);
    
     endfor;

    $newname = $hash."_".$id;
    $newname =  $newname.".".$pripona;

aby ten název nebyl tak krátky :D
Darker
Profil
Patrně bude třeba s mými ukázkami kódu naložit jinak než je zkopírovat a divit se. Pokud chceš ukládat obrázek v jednom daném formátu je přípona irelevantní, takže se nemusíš trápit s jejím zjišťováním.
Dále mi vrtá hlavou celá ta operace s poměnnou cislice. V cyklu by stačilo k proměnné hash připojovat náhdné číslo: $hash.=rand(0,9)

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:

0