Kezdőoldal » Számítástechnika » Weblapkészítés » Miért nem tölti föl?

Miért nem tölti föl?

Figyelt kérdés

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.



2012. aug. 3. 11:47
 1/9 Drone007 ***** válasza:

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!

2012. aug. 5. 16:41
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:

í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?

2012. aug. 6. 15:41
 3/9 Drone007 ***** válasza:

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.

2012. aug. 7. 07:33
Hasznos számodra ez a válasz?
 4/9 A kérdező kommentje:

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!

2012. aug. 7. 13:11
 5/9 Drone007 ***** válasza:

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!

2012. aug. 7. 22:34
Hasznos számodra ez a válasz?
 6/9 A kérdező kommentje:

lehet , hogy hülyén hangzik de csak meg kérdem:

hogyan lehet meghívni?

2012. aug. 8. 11:01
 7/9 A kérdező kommentje:
ez miért nem müxik?
2012. aug. 8. 17:26
 8/9 A kérdező kommentje:

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

}



}

2012. aug. 8. 17:27
 9/9 Drone007 ***** válasza:

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...

2012. aug. 8. 17:31
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!