Autor Zpráva
Mufna
Profil
Zdravím Vás. Mám problém s ošetřením názvu souboru zadaného pomocí multiuploadovacího formuláře.
Používám cyklus foreach a potřebuju, aby se regulární výraz aplikoval na soubory s příponou JPG, GIF a PNG (jedině ty se mohou uploadovat). Rozlišení souborů mám ošetřeno jinde.

Tohle mi funguje (ale pouze pro JPG !)

if (!eregi('^[A-Za-z0-9_-]+\.[A-Za-z]\.jpe?g$',$_FILES['userfile']['name' ][$key])) {
         Header("Location: ".$_POST["return_page"]."?msg=U3");
         U3 je hláška, že názvy souborů smí obsahovat pouze bla bla - já bych to potřeboval udělat tak, aby to ošetření názvů zůstalo, ale kromě JPG aby to bralo i PNG a GIF
         exit;
     }


Zkoušel jsem tohle, ale to mi nefunguje.


if (!eregi('^[A-Za-z0-9_-]+\.[A-Za-z]$',$_FILES['userfile']['name'][$key] )) {
         Header("Location: ".$_POST["return_page"]."?msg=U3");
         exit;
     }
Mufna
Profil
Pardon, ten funkční kus skriptu je

if (!eregi('^[A-Za-z0-9_-]+\.jpe?g$',$_FILES['userfile']['name' ][$key])) {
         Header("Location: ".$_POST["return_page"]."?msg=U3");
         exit;
     }

ninja
Profil
^[A-Za-z0-9_-]+\.(jpe?g)|(png)|(gif)$
Mufna
Profil
ninja

Díky !
Mufna
Profil
No tak teď to mám teda takto, ale mám jiný problém: soubor se sice neuloží, ale skript jede dál a nevyhodí mi chybovou hlášku U3.

if (!eregi('^[A-Za-z0-9_-]+\.(jpe?g)|(png)|(gif)$',$_FILES['userfile']['n ame'][$key])) {
         Header("Location: ".$_POST["return_page"]."?msg=U3");
         exit;
     }
ninja
Profil
1. Over si co skutecne mas v promene s nazvem souboru
2. Over jestli funguje ten regualarni dotaz
3. Over jestli dojde k presmerovani
4. Mezi Header a exit si dej jeste radek:

header("Connection: close");
Mufna
Profil
ninja

1. Je OK - pokud to není jen A-Z atd. tak jsou tam "neskutečný klikyháky" :-)
2. Bere to jenom JPG, takže to asi bude muset být nějak jinak

Jinak ve výsledku celého skriptu se děje toto:

PNG - nehlásí + neuloží
GIF - nehlásí + uloží
JPG - hlásí + neuloží - takže jenom zde to funguje

Ještě pro úplnost: po uploadu do tmp_name se pak vytváří nový název takto:

$new_name=strtolower(eregi_replace('^([A-Za-z0-9_-]+)\.jpe?g$' , "\\1.jpg", $_FILES['userfile']['name'][$key]));
$new_name=strtr($new_name," ","_");
ninja
Profil
V tom uploadu mas starou verzi regularniho dotazu (coz neni moc moudre mit 2x to same v kodu, hned prvne si to uloz do promene a dale pracuj jen s ni.

Kde je chyba jinak netusim, ten muj regularni vyraz je (IMHO) dobre.
Mufna
Profil
ninja

Tak díky za snahu, zkusím si s tím nějak poradit. Jen ještě jednu otázku: můžeš konkretizovat, který prvek (prvky) reprezentují tu "strarou verzi dotazu" ?
ninja
Profil
$new_name=strtolower(eregi_replace('^([A-Za-z0-9_-]+)\.jpe?g$' , "\\1.jpg", $_FILES['userfile']['name'][$key]));

Tato cast kodu vubec nepredpoklada neco jineho nez JPEG.
bukaj
Profil
ninja
Kde je chyba jinak netusim, ten muj regularni vyraz je (IMHO) dobre.
Bohužel ne, protože jsi použil špatně rozdělení pomocí |. Tvůj výraz (^[A-Za-z0-9_-]+\.(jpe?g)|(png)|(gif)$) se tedy rozdělí na tři podvýrazy (^[A-Za-z0-9_-]+\.(jpe?g), (png) a (gif)$), kterými se až potom testuje řetězec.

Myslím, že lépe by to mělo být např. takhle: ^[A-Za-z0-9_-]+\.(jpe?g|png|gif)$

Mufna
Jinak ve výsledku celého skriptu se děje toto: ...
I tak je tento výsledek divný. Zkusil bych, být tebou, upravit logiku skriptu.
Mufna
Profil
ninja

V tom uploadu mas starou verzi regularniho dotazu

Jo, to jsem zapomněl tady v diskusi upravit. Jinak o tom vím a samozřejmě jsem to upravil, ale taky mi to nešlape.

bukaj

Zkusím Tvojí variantu dotazu. Jinak celý skript mi až na toto funguje v poho, takže jsem to sem nechtěl celý kopírovat, když IMHO snad bude stačit úprava "eregi"
Mufna
Profil
bukaj

Jinak ve výsledku celého skriptu se děje toto: ...

Chtěl jsem napsat, že mi funguje
Mufna
Profil
bukaj

^[A-Za-z0-9_-]+\.(jpe?g|png|gif)$

Zatím to vypadá dobře. Takže díky za radu. (I ninjovi). Kdyby něco, tak sem zase "přispěju" :-)
b022d
Profil *
A nebylo by lepší určovat typ obrázku pomocí MIME-type?
Ta přípona nemusí odpovídat. Ostatně, dokážu vytvořit soubor s jakoukoliv příponou vč. exe pomocí jednoduchého textového editoru.
b022d
Profil *
pardon, včetně jpg, png, i gif
Mufna
Profil
b022d

MIME-typ jsem ošetřil jinde, tady šlo už pouze o znaky v názvu (ty se - alespoň co já vím, nejsem expert na PHP - pomocí MIME-type nijak ošetřit nedají)

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: