prosim radu,
jak udelat, aby se po nahrati obrazku zmenil nazev?
no presneji, aby po nahraji prvniho obrazku se nazev zmenil napr. na img00001.jpg.
po nahrati druheho obrazku na img00002.jpg atd.
Dekuji za rady, navody.
návody najdeš na internetu, např. když zadáš do Googlu:
php upload souborů
A pak v tom nalezeném dotvoříš nějaké počítadlo, které bude generovat požadovaná jména souborů, které doplníš jako parametr funkci move_uploaded_file
co musim zmenit, pripsat ? Aby se nazev zmenil ? (viz. muj prvni prispevek)
if (isset($_FILES['fupload']))
{
if($_FILES['fupload']['type']=="application/octet-stream"){
echo "Soubory s příponou PHP jsou zakázány!";
echo "Soubory s příponou PHP jsou zakázány!";
}elseif($_FILES['fupload']['size'] > 300*1024){
echo "Soubor přesahuje maximální limit 300kB!";
}else{
$slozka = "../fotky";
$cil = $slozka . "/" .$_FILES['fupload']['name'];
$nazev_souboru = $_FILES['fupload']['tmp_name'];
$copy = move_uploaded_file($nazev_souboru, $cil)
or die ("Přenesený soubor nelze zkopírovat");
chmod ($cil, 0644);
if($copy == true){
echo " " .$_FILES['fupload']['name']. " <b>Fotka úspěšně vložena.</b>\n<br><a href=\"$cil\"></a>";
}else{
echo "Fotka nebyla přidána.\nPočet chyb: " . $_FILES['fupload']['error'];
}
}
}
Je potřeba předem vytvořit nějaké počítadlo pro generování názvu. Vygenerovaný název pak aplikuj do proměnné $cil.
Tedy místo $cil = $slozka . "/" .$_FILES['fupload']['name'];
budeš mít $cil = $slozka . "/" .$generovany_nazev;
kde $generovany_nazev je to vygenerovane jméno z počítadla.
to ale bude napr. jednou 451 podruhe zas 295 apod. ?
Chtel jsem, aby v tom byl prehled, takze kdyz se podivam, tak vidim, ze fotka z nazvem 0001 se nahrala jako prvni apod.
slo by to i udelat nejak pres databazi ?
ze by nazev byl ID ?
nepochopil jsem to 451 a 295, když si uděláš počítadlo s takovým krokem tak ano.
určitě by to šlo přes databázi,
pokud ti nezáleží příliš na formě img+pořadové číslo tak to můžeš proměnnou cíl nahradit třeba nějak takhle - rozepsané na kousky:
$jmeno=$_FILES['fupload']['name'];
$hledej=basename($jmeno);
$nove='img-'.time();
$jmeno = str_replace($hledej, $nove, $jmeno);
$cil = $slozka . "/" .$jmeno;
dostaneš unikátní jméno souboru bez databáze, s pořadovýmh - i když trochu nečitelným číslem - ale s takovým, které jde setřídit podle abecedy.
(třeba si nějakou miliardu milisekund můžeš odečíst)
A co takhle koukat na soubory, které jsou seřazeny, např. podle času kdy byly nahrané
kdyz bych to pouzil takto:
$generovany_nazev = img.rand(0,999);
tak fotky z origo nazvem napr. fotka.jpg se prejmenuje na 254 (bez pripony)
co mam udelat, aby pripona zustala jpg ?
Zkousel jsem pouzit i tohle:
$jmeno=$_FILES['fupload']['name'];
$hledej=basename($jmeno);
$nove='img-'.time();
$jmeno = str_replace($hledej, $nove, $jmeno);
$cil = $slozka . "/" .$jmeno;
Ale tez se odstrani pripona jpg.
takze nazev zustane napr.
img-1122995
$jmeno by mělo být s příponou
basename($jmeno) by mělo být jméno bez přípony
str_replace by mělo v řetězci $jmeno najít řetězec odpovídající vlastnímu jmenu bez přípany, nahradit ho tím 'img-'.time() a výsledek uložit do $jméno
mělo by to tedy být i s příponou.
Co obsahuje
Mimochodem, ten skript by měl mít omezeny možné přípony už při nahrávání, to, že se tam 2x vypíše že PHP přípony jsou zakázány je na dvě věci...
sorry: Co obsahuje $jmeno?
jak myslis, co obsahuje jmeno ?
$_FILES['fupload']['name'];
no jasně, kromě toho mého pokusu existuje ještě funkce strrpos, pokud důvěřuješ tomu, že přípona souboru je za poslední tečkou, tak pomocí strrpos můžeš zjistit polohu poslední tečky a tak zjistit i tu příponu
a ten strrpos bude jak ? Neco malo jsem o tom nasel, ale nevim ja to tam mam pripsat, aby to fungovalo jak ma
$jmeno=$_FILES['fupload']['name'];
$pos = strrpos($jmeno, ".");
if ($pos === false) {
echo 'nic jsem nenašel';
exit;
}else{
$cil = $slozka . '/img-' .time().substr($jmeno, $pos);
}