Autor | Zpráva | ||
---|---|---|---|
asellaa Profil |
#1 · Zasláno: 12. 2. 2015, 09:51:54
Dobrý den všem,
moc prosím o pomoc. V redakčím systému /ne mém/ se náhle při nahrávání fotek začala ukazovat chyba, že danou fotografii nelze nehrát, že není ve formátu .jpg. Fotka samozřejmě ve správném formátu je. Našla jsem kód, který to zřejmě způsobuje, ale nevím jak to opravit. Vůbec netuším, proč to najednou začal systém psát, když doteď to fungovala a nikdo se v kodu nehrabal. Můžete někdo poradit? Děkuju Asellaa $name = Str_Replace("_", "", $name); $name = Str_Replace(" ", "_", $name); $name = Str_Replace("(", "-", $name); $name = Str_Replace(")", "-", $name); $name = StrToLower($name); $koncovka = Explode(".", $name); $koncovka[1]= StrToLower($koncovka[1]); if($koncovka[1]<>"jpg" ) //and $koncovka[1]<>"jpeg" and $koncovka[1]<>"gif" and $koncovka[1]<>"png" echo "Vybrany soubor neni typu -> jpg"; else { $dir=$this->HlavniSlozka."/"; if (is_dir($dir)) { $dirOpen=opendir($dir); if(is_uploaded_file($tmp_name)) |
||
Jan Tvrdík Profil |
#2 · Zasláno: 12. 2. 2015, 09:56:15
asellaa:
Nenahráváš náhodou soubor s příponou jpeg místo jpg ?
|
||
asellaa Profil |
#3 · Zasláno: 12. 2. 2015, 09:58:28
ne e, zkoušela jsem oboje a pořád stejná chyba :-(
|
||
pharaon.jh Profil |
#4 · Zasláno: 12. 2. 2015, 10:03:12
asellaa:
nemáš ten soubor velkýma písmenama JPG, občas se mi to taky stává |
||
Dan Charousek Profil |
pharaon.jh:
K tomu tam je strtolower. V souvislosti s tím, co psal Jan Tvrdík, bych zkusil použít zakomentovanou část kódu pro jpeg. Taky si neodpustím co, že funkce str_replace() může přijmout za prametry pole, tudíž není třeba ji volat několikrát. (vím, že jsi psala, že to není tvůj systém, ale i tak to může pomoci zpřehlednit kód):
$povolene_formaty = array("jpg", "jpeg"); $name = strtolower(str_replace(array("_", " ", "(", ")"),array("", "_", "-", "-"))); $koncovka = explode(".", $name); $koncovka[1] = strtolower($koncovka[1]); if(!in_array($koncovka[1], $povolene_formaty)) { echo "Formát souboru není povolený"; } else { // zde se nahraje obrázek } |
||
asellaa Profil |
#6 · Zasláno: 12. 2. 2015, 10:09:51
Je to malými :-(
|
||
Dan Charousek Profil |
#7 · Zasláno: 12. 2. 2015, 10:16:39
Ještě mě tak napadá. Nemá soubor, který nahráváš v názvu tečku? Proměnná
$koncovka[1] by potom neobsahovala koncovku, ale 2. část názvu. Opravilo by se to nahrazením 4. řádků v mém kódu za:
$ext = $koncovka[count($koncovka) - 1]; a následným nahrazením $koncovka[1] v podmínce na $ext .
|
||
asellaa Profil |
#8 · Zasláno: 12. 2. 2015, 10:23:42
Dan Charousek:
Soubor který nahrávám má název: 112.jpg Ale zkoušela jsem přepsat kod podle tvého návrhu a někde bude něco špatně, tedy tím myslím u mě. Protože i když jsem to přepsala, tak chyba: Vybrany soubor neni typu -> jpg se tam ukazuje stejně. Zkoušela jsem se odhlásit, vymazat mezipaměť a pořád ta samá hláška i když už by se případně mělo objevit: Formát souboru není povolený . Zřejmě to čerpá asi ještě od někud jinud, ale já vůbec netuším odkud. Já osobně dělám stránky s Jooomlou a tohle je pro mě španělská vesnice... |
||
Dan Charousek Profil |
asellaa:
Prvně bude třeba zjistit, který script vkládání obrázků zajišťuje. Snadno to zvládneš i bez naší pomoci. Stačí najít podobné scripty a hlášku "Vybrany soubor neni typu -> jpg" přepsat třeba na "Nacházím se zde" a tímto způsobem se dopracuješ k tomu, který script to má vlastně na starost. Následně je třeba zjistit, zda se v proměnných nachází to, co bychom tam očekávali. Asi první, co bych testoval, je jméno souboru: echo $name; případne zda je správně koncovka: echo $koncovka[1]; Tímto postupným zkoumáním se jistě dopracuješ k tomu, co problém způsobuje :)
|
||
asellaa Profil |
#10 · Zasláno: 12. 2. 2015, 10:59:12 · Upravil/a: asellaa
Dan Charousek:
Takže původní tip byl skutečně správný. Způsobuje to ta část kódu co jsem poslala. Už se mi tam ukazuje tvoje hláška: Formát souboru není povolený . Ale navíc se mi ukazuje chyba v tomto řádku :-( $name = strtolower(str_replace(array("_", " ", "(", ")"),array("", "_", "-", "-"))); Dan Charousek: Ještě tu chybu: Warning: Wrong parameter count for str_replace() in |
||
Dan Charousek Profil |
Jistě, chybí mi tam vstupní parametr, moje chyba :):
$name = strtolower(str_replace(array("_", " ", "(", ")"),array("", "_", "-", "-"), $name)); |
||
asellaa Profil |
#12 · Zasláno: 12. 2. 2015, 11:24:26
Dan Charousek:
Super, díky. Chyba v v řádku zmizela, ale stále to hlásí : fotmát souboru není povolený :-( Já tu z toho snad zešedivim :-( |
||
Dan Charousek Profil |
#13 · Zasláno: 12. 2. 2015, 11:44:51
Zkus si na řádku 5 mého kódu vypsat koncovku.
|
||
asellaa Profil |
#14 · Zasláno: 12. 2. 2015, 12:04:14
Jestli jsi tím myslel toto: echo $name; echo $koncovka[1]; tak jsem to tam dala a nic, stále to píše jen Formát souboru není povolený :-(
|
||
Dan Charousek Profil |
#15 · Zasláno: 12. 2. 2015, 12:07:21
asellaa:
Jak vypadá aktuální script? |
||
asellaa Profil |
#16 · Zasláno: 12. 2. 2015, 12:08:54 · Upravil/a: asellaa
Posílám kus, kdybys potřeboval dál, pošlu zbytek:
<? include("db_connect.php"); class fotogalerie { function fotogalerie($HlavniSlozka) { $this->HlavniSlozka=$HlavniSlozka; } function Uloz_fotku($album,$popis,$name,$tmp_name,$size) { $povolene_formaty = array("jpg", "jpeg"); $name = strtolower(str_replace(array("_", " ", "(", ")"),array("", "_", "-", "-"), $name)); $koncovka = explode(".", $name); $koncovka[1] = strtolower($ext); $ext = $koncovka[count($koncovka) - 1]; if(!in_array($koncovka[1], $povolene_formaty)) { echo "Formát souboru není povolený"; } else { $dir=$this->HlavniSlozka."/"; if (is_dir($dir)) { $dirOpen=opendir($dir); if(is_uploaded_file($tmp_name)) { $velikost = $size; $velikost = round($velikost/1024,0); if($velikost>2000) { echo "velikost fotky presahla povolenou velikost tj. 2MB!!!!"; } else { je to tedy bez toho echo $name; a echo $koncovka[1]; |
||
Dan Charousek Profil |
Po přidání řádku 20 můžeš řádek 19 úplně vypustit a řádek 21 následně změnit na:
if(!in_array($ext, $povolene_formaty)) { Řádek 22 zkus změnit na: echo "Formát souboru není povolený"; echo "Vkládaná data:"; var_dump($name); var_dump($ext); Tím zjistíme, zda jsou vkládaná data v pořádku. |
||
asellaa Profil |
#18 · Zasláno: 12. 2. 2015, 12:17:40
Dan Charousek:
Tak jestli jsem to dala vše dobře, tak to píše toto: Formát souboru není povolenýVkládaná data:string(0) "" string(0) "" |
||
Dan Charousek Profil |
#19 · Zasláno: 12. 2. 2015, 12:25:53
asellaa:
Dobře, to znamená, že do podmínky vstupuje prázdný řetězec, což je samozřejěm špatně. Ty testovací var_dump y klidně můžeš smazat. Zkus si var_dump($name); na řádku 14. Pokud i tam bude proměnná name prázdná, znamená to, že není chyba v tomto scriptu, ale při volání metody Uloz_Fotku() . Pokud bude jméno v pořádku, je chyba někde mezi řádkem 14 a podmínkou. Tímto způsobem se dá dopracovat k tomu, v čem je problém.
|
||
asellaa Profil |
#20 · Zasláno: 12. 2. 2015, 12:31:05
Říkam správně, že je chyba v Uloz_fotku() kdy mi to píše toto: Vkládaná data:NULL Formát souboru není povolený
|
||
Dan Charousek Profil |
#21 · Zasláno: 12. 2. 2015, 12:38:37
Pokud var_dump($name); na řádku 14 ukazuje NULL znamená to, že je chyba mimo tuto metodu
Uloz_Fotku() , ve které se momentálně nacházíme. V tom případě musíš najít soubor, ve kterém se vytváří instance třídy fotogalerie:
$... = new fotogalerie(); $... -> Uloz_Fotku($..., $..., $..., $..., $...); Místo teček budou nějaké názvy proměnných, které neznám. |
||
asellaa Profil |
#22 · Zasláno: 12. 2. 2015, 12:42:31 · Upravil/a: asellaa
Jestli já najdu toho de...a co udělal tenhle bordel, co já, díky tobě musim celý den napravovat, tak ho uškrtim.
Děkuju za tvojí trpělivost a rady, leccos se tu i přiučim :-) Jdu tedy hledat :-) To by mohlo být tohle: $Foto = new fotogalerie("../galerie/Image"); if($_POST['importfoto'])$Foto->ImportujZeSlozkyFTPimport($_GET['album'],'ftp-import'); if($_POST['foto']){ $Foto->Uloz_fotku($_GET['album'],$_POST['popisFotky'],$HTTP_POST_FILES["fotoFile"]["name"],$HTTP_POST_FILES["fotoFile"]["tmp_name"],$HTTP_POST_FILES["fotoFile"]["size"]); } if($_POST['new'])$Foto->Vytvor_Album($_POST['album'],$_POST['albumNadraz']); if($_POST['deletefotoall'])$Foto->DeleteFotoAll($_GET['album']); if($_POST['deletefoto']) { $dotaz = "SELECT fotografie.idFotografie as idFotografie, fotografie.nazev_fotografie as nazev_fotografie, album.idalbum as idalbum, album.uvodni_fotografie as uvodni_fotografie FROM fotografie left join album on fotografie.nazev_fotografie=album.uvodni_fotografie "; $result = mysql_query($dotaz) or die ("Dotaz neslo provést proc"); while ($row=mysql_fetch_array($result)) { if($_POST['fotografie'][$row['idFotografie']]=="check") { if($row['idalbum']!=null) { $Foto->SetVychoziFoto('def.jpg',$_GET['album']); } $Foto->DeleteFoto($row['idFotografie'],$row['nazev_fotografie']); } } mysql_free_result($result); } if($_POST['movefoto']) { $dotaz = "SELECT * FROM fotografie order by nazev_fotografie asc "; $result = mysql_query($dotaz) or die ("Dotaz neslo provést"); while ($row=mysql_fetch_array($result)) { if($_POST['fotografie'][$row['idFotografie']]=="check") $Foto->MoveFoto($row['idFotografie'],$_POST['albumpresun']); } mysql_free_result($result); } |
||
Ivan M. Profil * |
#23 · Zasláno: 12. 2. 2015, 13:38:08 · Upravil/a: Ivan M.
No a nemělo by namísto proměnných $HTTP_POST_FILES[] něco jako $_FILES[]??
myslím volání metody takto: $Foto->Uloz_fotku($_GET['album'],$_POST['popisFotky'],$_FILES["fotoFile"]["name"],$_FILES["fotoFile"]["tmp_name"],$_FILES["fotoFile"]["size"]); A ješte bych ověřil, zda je v předchozím formuláři obsaženo enctype="multipart/form-data" |
||
asellaa Profil |
#24 · Zasláno: 12. 2. 2015, 13:46:10
Hurááááááááááááááááááááááááááááááááááááááááááááááá
Jdem pít, funguje to :-) Nedá se ani říct, jak moc děkuju. Díky! |
||
Časová prodleva: 9 let
|
0