Miért nem tölti föl?
a phps kód:
//////////////////////////////////////////////////////////////////////////////////////////kép
/*************** Képfeltöltõ ***************/
/*************** .jpg .png .gif formátum ***************/
/*************** Konfigurálható ***************/
/*************** Beágyazható ***************/
/*************** www.web-index.hu ***************/
/*************** Beállítás ***************/
$upfilepath = "img/"; # Feltöltendõ képek könyvtára
/*************** Beállítás ***************/
$up = $HTTP_POST_VARS['up'];
$newimg = $HTTP_POST_FILES ['newimg'];
$extension = end(explode(".", $newimg['name'])); $extension = strtolower( $extension );
$filesize = $newimg[size]/1000; settype($filesize, "integer");
$abc = $newimg[size];
if($abc > "2000000")
{
echo "a kép mérete nagyobb 2MBnál ettol függetlenül a feltöltés meg történt.<br>";
}
$extension = 'png';
$newname = $id;
$path = $upfilepath.$newname.'.'.$extension; //Kép könyvtár, név, kiterjesztés.
if (move_uploaded_file($_FILES[newimg]['tmp_name'],$path))
{
$feltoltve = "true";
}
else
{
echo "A kép feltöltés sikertelen volt!<br>így a képfeltöltés elmarad---->csak akkor lesz kép a profilján ha az ügyfélszolgálatot megkéri!<br>";
}
//////////////////////////////////////////////////////////////////////////////////////////kép
$bemutatkozas = $_POST['bemutatkozas'];
$kepmeret = $newimg[size];
$new = htmlspecialchars($bemutatkozas, ENT_QUOTES);
$bemutatkozashossza = strlen($new);
$meret = $kepmeret + $bemutatkozashossza;
a htmls rész:
<tr><td>Profil Kép:(Max méret 2MB)</td><td><input type='file' name='newimg' id='newimg' /> </td></tr>
<input type='hidden' value='up' name='up'>
a phps kódban nem határoztam meg max méretet.
Azt kell írjam, hogy ez a kód erősen meg van erőszakolva. Rengeteg helyen hiányoznak aposztrofok, hiányos form (vagy csak nem szúrtad be a teljes részt), szabványtalan php hívások...
Jó lenne, hogyha a kapott hibaüzenetet is másolnád, mert abból több is kiderülhet.
Részletezve:
1.
$HTTP_POST_VARS helyett $_POST
$HTTP_POST_FILES helyett $_FILES (ami érdekes, hogy lejjebb így használja a kód írója)
Ezek a változók a php 5.3-as verziűjából ki vannak vezetve, csak az egyszerűsített forma használható.
2.
Ha már egyszer be van olvasva a form tartalom a $newimg változóba, nem kell újra $_FILES['newimg'] néven hivatkozni rá, főleg nem hibásan ($_FILES[newimg]).
3.
Előzőhöz hasonlóan: $newimg['size'] (aposztrof vagy idézőjel kell!)
4.
A képfeltöltő script szerint jpg, gif és png fájlok is feltölthető, most viszont bármilyen típusú képet is töltesz fel, az png kiterjesztésű lesz. Ez hiba.
5.
Képet nem töltünk fel úgy a szerverre, hogy ne méreteznénk újra. Egyrészt azért, mert a 2mb-os limitbe egy 5 megapixeles kép is belefér (akár 10 is jó tömörítéssel), ami méretileg túl nagy, másrészt azért mert kedvelt szórkozása a nyomorult, t**@Éß... hackereknek, hogy futtatható vírus állományt rejtenek jpg állományokba, amit az át/újraméretezés kinyír.
Azt javaslom gondold újra ezt a képfeltöltő rutint, mert nemcsak biztonságilag kétes, de elég sok hibát is tartalmaz.
Sok sikert!
íme:
//////////////////////////////////////////////////////////////////////////////////////////kép
$upfilepath = "img/";
$newimg = $_FILES ['newimg'];
$filesize = $newimg['size']/1000; settype($filesize, "integer");
$extension = "jpg";
$newname = $id;
$path = $upfilepath.$newname.'.'.$extension;
if (move_uploaded_file($_FILES[newimg]['tmp_name'],$path))
{
$feltoltve = "true";
}
else
{
echo "A kép feltöltés sikertelen volt!<br>így a képfeltöltés elmarad---->csak akkor lesz kép a profilján ha az ügyfélszolgálatot megkéri!<br>";
}
if($feltoltve == "true"){
$filename="img/$id.jpg";
list($width, $height) = getimagesize($filename);
$new_width =200;
$new_height=200;
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
if($newimg['size'] < '2000000'){
imagejpeg($image_p, "keszkep/$id.jpg", 100);
$mg0 = "A kép sikeresen átméretezve 200x200px-re!<br>";
$mg = "nem történt fájl méret változtatás!";
}
elseif($newimg['size'] > '2000000'){
imagejpeg($image_p, "keszkep/$id.jpg", 30);
$mg0 = "A kép sikeresen átméretezve 200x200px-re!<br>";
$mg = "Mivel 2MBnál nagyobb képet akart feltölteni így 30%-ra csökkentettük le a méretét!<br>";
}
$filename = "keszkep/$id.jpg";
$ujkepmeret = filesize($filename);
//unlink("img/$id.png");
}
ezt a kódot az alábbi hibaüzenettel hoztam létre:
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'img/4.jpg' is not a valid JPEG file in /home/a9426947/public_html/****/**/*/*****/*/***********.php on line 86
Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /home/a9426947/public_html/****/**/*/*****/*/***********.php on line 87
és igaza is van mivel png filét jpgre alakította át majd azt akartam méretezni!
mi tévő legyek?
Először is én ezt úgy szoktam csinálni, hogy egy átmeneti tárolóba teszem a képet, átmeneti néven pl: "tmp/temp.jpg" (nálad ez a $path). A file nevének ne csak egy számot adj, ezt a szerver nem szereti. legyen pl "avatar_1.jpg".
A kiterjesztést persze le kell vizsgálni feltöltés előtt, ha több típusú képet is fel szeretnél tölteni.
A te példádban a $newimg változóból lekérdezhető a kép típusa: $newimg["type"] = 'image/gif' vagy 'image/jpeg' vagy 'image/png'
javítandó sor:
if (move_uploaded_file($newimg['tmp_name'],$path))
a $filename tartalma már a $path változóban van, ne hozd létre kétszer, mert többször kell javítanod.
Az átméretezéskor ezzel a módszerrel ha nem négyzetes alkatú a kép, akkor torzulni fog! Ne várd el a felhasználóktól, hogy értsenek a képkészítéshez/photoshophoz!
kiterjesztéstől függően más és más parancs kell majd (imagecreatefromjpeg/imagecreatefrompng/imagecreatefromgif valamint imagejpeg/imagepng/imagegif), és gif esetén imagecreattruecolor helyett imagecreate.
Kicsit átláthatatlan a kódod. Próbálj kicsit natívabb lenni. Ha bonyolultnak érzed a feladatot, sok lehetséges irányt vehet fel a művelet, mindenképpen rajzolj előtte egy folyamatábrát, amiben rögzíted, hogy az egyes műveleteket milyen sorrendben kell végrehajtani. A változóknak adj értelmezhetőbb nevet, és ne deklarálj többszörösen. Minden deklarációt - amennyire a művelet megengedi - a lehető legkorábban tegyél meg, és végig azokkal a deklarációkkal dolgozz.
Egyébként most már alakul, de sokkal natívabb és bővebb kód kell.
na most ez a szitu:
//////////////////////////////////////////////////////////////////////////////////////////kép
$upfilepath = "img/";
$newimg = $_FILES['newimg'];
$filesize = $newimg['size']/1000; settype($filesize, "integer");
$extension = end(explode(".", $newimg['name'])); $extension = strtolower( $extension );
if($extension != "gif" or "jpg" or "png"){
$enged = "0";
}
$newname = "abc$id";
$path = $upfilepath.$newname.'.'.$extension;
if($enged != "0"){
if (move_uploaded_file($_FILES[newimg]['tmp_name'],$path))
{
$feltoltve = "true";
}
else
{
echo "A kép feltöltés sikertelen volt!<br>így a képfeltöltés elmarad---->csak akkor lesz kép a profilján ha az ügyfélszolgálatot megkéri!<br>";
}
}
if($feltoltve == "true"){
$kepfajl="img/abc$id.$extension";
$maxmeret = "200";
$ujfajlnev = "keszkep$id.$extension";
function kepgenerator ($kepfajl, $maxmeret, $ujfajlnev)
{
if (!file_exists($kepfajl))
return (false);
// Megfelelő méret kiválasztása
list($width, $height, $type) = getimagesize($kepfajl);
$nagyobb = ($width > $height) ? $width : $height;
$kisebb = ($width > $height) ? $height : $width;
if ($nagyobb <= $maxmeret)
{
$new_nagyobb = $nagyobb;
$new_kisebb = $kisebb;
}
else
{
$szorzo = $maxmeret / $nagyobb; // Mennyire (milyen aránnyal) kicsinyítjük le a képet - ez egy 0 és 1 közötti szám lesz
$new_nagyobb = $maxmeret; // A nagyobb oldalszélesség lesz a maximális
$new_kisebb = $kisebb * $szorzo; // A nagyobb oldalméret kicsinyítésével ($szorzo) arányosan kicsinyítjük le a kisebb oldalt is
}
$new_width = ($width > $height) ? $new_nagyobb : $new_kisebb; // Az eredeti méretek alapján összepárosítjuk az új szélességet és magasságot a kissebb-nagyobb értékekkel
$new_height = ($width > $height) ? $new_kisebb : $new_nagyobb;
// Kép generálása
switch ($type) // A kép formátumától függően más-más függvénnyel dolgozzuk fel a képet
{
case 1:
$kep = imagecreatefromgif ($kepfajl);
break;
case 2:
$kep = imagecreatefromjpeg ($kepfajl);
break;
case 3:
$kep = imagecreatefrompng ($kepfajl);
break;
}
$ujkep = imagecreatetruecolor ($new_width, $new_height);
imagecopyresampled ($ujkep, $kep, 0, 0, 0, 0, $new_width, $new_height, $width, $height); // A lényeg - most generáljuk az új képet
$mg0 = "A kép sikeresen átméretezve !<br>";
$mg = "nem történt fájl méret változtatás!<br>";
imagejpeg ($ujkep, $ujfajlnev, 100); // És végül egy (lehető legjobb minoségű) jpeg képet generálunk az egészből, és azt elmentjük a megadott néven
return (array($new_width, $new_height)); // Visszaadjuk a generált kép szélességét és magasságát
}
}
//////////////////////////////////////////////////////////////////////////////////////////kép
de ebből semmi sem látszik mint "kimenet"!
please help!
Itt már egyre nagyobb a zűr és a zavar...
Hol hívod meg a "kepgenerator" függvényt?
Miért deklarálod újra a képfájl url-jét (ráadásul rosszul: $ujfajlnev), ha már egyszer létezik ($path)?
Szerintem kezd az elejéről, de először tényleg rajzold meg az a folyamatábrát, és tisztázd, hogy milyen változókra lesz szükséged, mert ez egyre nagyobb káosz lesz.
Egyébként nem tudom milyen kimenetet vársz, hiszen a függvényt nem hívtad meg, és a lényegi kimenet az maga a feltöltött/létrehozott kép kellene legyen.
Sok sikert!
lehet , hogy hülyén hangzik de csak meg kérdem:
hogyan lehet meghívni?
elnézést az adminoktól az előző kommentemért!
csak elfelejtettem bemásolni:
$upfilepath = "img/";
$newimg = $_FILES['newimg'];
$filesize = $newimg['size']/1000; settype($filesize, "integer");
$extension = end(explode(".", $newimg['name'])); $extension = strtolower( $extension );
if($extension == "gif" or $extension == "jpg" or $extension == "png"){
$enged = "0";
}
$newname = "abc$id";
$path = $upfilepath.$newname.'.'.$extension;
if($enged == "0"){
if (move_uploaded_file($_FILES[newimg]['tmp_name'],$path))
{
$feltoltve = "true";
}
else
{
echo "A kép feltöltés sikertelen volt!<br>így a képfeltöltés elmarad---->csak akkor lesz kép a profilján ha az ügyfélszolgálatot megkéri!<br>";
}
}
if($feltoltve == "true"){
$kepfajl="img/abc$id.$extension";
$maxmeret = "200";
$ujfajlnev = "keszkep$id.$extension";
$kepgenerator = kepgenerator ($kepfajl, $maxmeret, $ujfajlnev);
echo $kepgenerator;
function kepgenerator ($kepfajl, $maxmeret, $ujfajlnev)
{
if (!file_exists($kepfajl))
return (false);
// Megfelelo méret kiválasztása
list($width, $height, $type) = getimagesize($kepfajl);
$nagyobb = ($width > $height) ? $width : $height;
$kisebb = ($width > $height) ? $height : $width;
if ($nagyobb <= $maxmeret)
{
$new_nagyobb = $nagyobb;
$new_kisebb = $kisebb;
}
else
{
$szorzo = $maxmeret / $nagyobb; // Mennyire (milyen aránnyal) kicsinyítjük le a képet - ez egy 0 és 1 közötti szám lesz
$new_nagyobb = $maxmeret; // A nagyobb oldalszélesség lesz a maximális
$new_kisebb = $kisebb * $szorzo; // A nagyobb oldalméret kicsinyítésével ($szorzo) arányosan kicsinyítjük le a kisebb oldalt is
}
$new_width = ($width > $height) ? $new_nagyobb : $new_kisebb; // Az eredeti méretek alapján összepárosítjuk az új szélességet és magasságot a kissebb-nagyobb értékekkel
$new_height = ($width > $height) ? $new_kisebb : $new_nagyobb;
// Kép generálása
switch ($type) // A kép formátumától függoen más-más függvénnyel dolgozzuk fel a képet
{
case 1:
$kep = imagecreatefromgif ($kepfajl);
break;
case 2:
$kep = imagecreatefromjpeg ($kepfajl);
break;
case 3:
$kep = imagecreatefrompng ($kepfajl);
break;
}
$ujkep = imagecreatetruecolor ($new_width, $new_height);
imagecopyresampled ($ujkep, $kep, 0, 0, 0, 0, $new_width, $new_height, $width, $height); // A lényeg - most generáljuk az új képet
$mg0 = "A kép sikeresen átméretezve !<br>";
$mg = "nem történt fájl méret változtatás!<br>";
imagejpeg ($ujkep, $ujfajlnev, 100); // És végül egy (leheto legjobb minoségu) jpeg képet generálunk az egészbol, és azt elmentjük a megadott néven
return (array($new_width, $new_height)); // Visszaadjuk a generált kép szélességét és magasságát
}
}
Meghívni a nevével kell, bemenetként 3 paramétert vár: feltöltött fájl url-je, maximális méret (gondolom pixelben), és létrehozandó fájl url-je.
Kimenetként tömbként adja a létrehozott képfájl méreteit. hibás bemeneti forrás képfájl url esetén false-t ad vissza kimenetként.
Pl.:
$meretek = kepgenerator("temp/temp.jpg",500,"img/kep_01.jpg");
Egyébként meg is hívod, csak rossz helyen, mert a függvényt előbb kell deklarálni, mint ahogy meghívnád.
Bár igazából nem értem minek neked ehhez függvényhívás, hiszen a folyamat része...
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!