Autor | Zpráva | ||
---|---|---|---|
Anonym Profil |
#1 · Zasláno: 16. 12. 2011, 14:50:32
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 |
#2 · Zasláno: 16. 12. 2011, 14:54:31
Dej uživateli ID a podle toho pojmenuj avatar. Při aktualizaci avataru se ten starý nahradí novým.
|
||
Anonym Profil |
#3 · Zasláno: 16. 12. 2011, 15:20:56 · Upravil/a: Anonym
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 |
#4 · Zasláno: 16. 12. 2011, 16:07:05
Nejdřív zkontroluj typ souboru:
mime_content_type($_FILES["file"]["tmp_name"]) image/png select($type) { case "png" : imagecreatefrompng($_FILES["file"]["tmp_name"]) //atd... imagepng("upload/avatars/$userid.png"); |
||
Majkl578 Profil |
#5 · Zasláno: 16. 12. 2011, 19:46:23
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 |
#6 · Zasláno: 16. 12. 2011, 19:47:34 · Upravil/a: Anonym
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 |
#7 · Zasláno: 16. 12. 2011, 22:18:39
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) |
||
Časová prodleva: 12 let
|
0