Autor | Zpráva | ||
---|---|---|---|
Mufna Profil |
#1 · Zasláno: 8. 4. 2008, 16:33:51
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 |
#2 · Zasláno: 8. 4. 2008, 16:36:50
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 |
#3 · Zasláno: 8. 4. 2008, 16:42:17
^[A-Za-z0-9_-]+\.(jpe?g)|(png)|(gif)$
|
||
Mufna Profil |
#4 · Zasláno: 8. 4. 2008, 16:44:42
ninja
Díky ! |
||
Mufna Profil |
#5 · Zasláno: 8. 4. 2008, 16:54:35
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 |
#6 · Zasláno: 8. 4. 2008, 17:17:52
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 |
#7 · Zasláno: 8. 4. 2008, 17:42:25
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 |
#8 · Zasláno: 8. 4. 2008, 17:45:16
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 |
#9 · Zasláno: 8. 4. 2008, 18:07:04
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 |
#10 · Zasláno: 8. 4. 2008, 18:20:44 · Upravil/a: ninja
$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 |
#11 · Zasláno: 8. 4. 2008, 18:26:11
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 |
#12 · Zasláno: 8. 4. 2008, 20:54:36
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 |
#13 · Zasláno: 8. 4. 2008, 20:56:54
bukaj
Jinak ve výsledku celého skriptu se děje toto: ... Chtěl jsem napsat, že už mi funguje |
||
Mufna Profil |
#14 · Zasláno: 8. 4. 2008, 21:05:02
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 * |
#15 · Zasláno: 10. 4. 2008, 18:14:51
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 * |
#16 · Zasláno: 10. 4. 2008, 18:15:38
pardon, včetně jpg, png, i gif
|
||
Mufna Profil |
#17 · Zasláno: 10. 4. 2008, 21:22:56
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í) |
||
Časová prodleva: 16 let
|
0