ugrás a tartalomhoz

Képfeltöltés

Anonymous · 2005. Május. 18. (Sze), 12.29
Hello!

Képet szeretnék feltölteni a felhasználó gépéről a tárhelyemre. Ezt egy formmal, ahol egy textmezőbe kiválasztja a felhasználó a feltöltendő kép path-ját. A kiválasztott képnek pedig egy a submit gomb lenyomása után a tárhelyemen az images mappába kéne kerülnie.
Valaki tud nekem segíteni, hogy ezt hogy lehet megcsinálni (vagy esetleg scriptet adni)?
 
1

Man

attlad · 2005. Május. 18. (Sze), 13.02
Először ezt olvasd el:

PHP: Fájlfeltöltés kezelése - Manual
http://www.php.net/manual/hu/features.file-upload.php

Attila
3

probléma

Anonymous (nem ellenőrzött) · 2005. Május. 18. (Sze), 15.55
Köszönöm a linket, megcsináltam, viszont a script nem csinál semmit. Itt a script:

$user_images_feltolt_path='/images';
                print "baba*";
                # új user bevitel, de előtte vizsgálat!
                print "baba";
                # fájlformátum ellenőrzés
                if (($_FILES['feltoltes']['type']!="" && $_FILES['feltoltes']['type'] === "image/gif")||
                    ($_FILES['feltoltes']['type']!="" && $_FILES['feltoltes']['type'] === "image/bmp")||
                    ($_FILES['feltoltes']['type']!="" && $_FILES['feltoltes']['type'] === "image/jpg")||
                    ($_FILES['feltoltes']['type']!="" && $_FILES['feltoltes']['type'] === "image/jpeg")||
                    ($_FILES['feltoltes']['type']!="" && $_FILES['feltoltes']['type'] === "image/pjpeg")) {

	                if (is_uploaded_file($_FILES['feltoltes']['tmp_name'])) {
	                   $user_images_feltolt_path='/images';
	                   $image_path = $user_images_feltolt_path . "/" . $_FILES['feltoltes']['name'];
		           copy($_FILES['feltoltes']['tmp_name'], $image_path) or die ("Nem sikerült az áthelyezés!");
 		           print "A kép feltöltése sikeresen befejeződött!<br>";
	                } else {
                           print "Képfeltöltés nincs<br>";
                        }
                }

                $imsql = $_FILES['feltoltes']['name'];
                $query_felvesz_user = " INSERT INTO users
                                        VALUES (NULL,'$_POST[felh_n]',password('$_POST[pass]'),'$_POST[email]','$imsql')";
                $result_felvesz_user = mysql_query($query_felvesz_user,$ossz) or die(gáááz_felvesz_user);

                // Végrehajtjuk az SQL utasítást
                if ($result_felvesz_user) {
                   echo "A felhasználó adatai felvéve!";
                } else {
               	   echo "Valamilyen hiba történt!";
                }
Látjátok, hogy ha feltölti, ha nem akkor is ki kéne írnia valamit, de nem ír ki sem hibát, sem pedig valamit, amit scriptből kellene neki. Az SQL adatbázisba pedig nem kerül be új sor.
Mi lehet a probléma?

Online kipróbálható: http://gytk.atw.hu/includes/forum/reg_link.php
(de úgyse láttok semmit, csak hogy nem csinál semmit :( )
4

fajl feltöltés

Anonymous · 2005. Május. 19. (Cs), 01.54
Én a Coppermine Photo Gallery-t raktam fel 2 napja az atw-re, és az előre gyárilag (feltételezem jól) megírt upload-dal nekem nem sikerült feltöltenem http-n keresztül képeket :(. Akár azt is el tudom képzelni, hogy tiltva van. Vagy csak én vagyok béna?
5

tmp könyvtár

Anonymous · 2005. Május. 19. (Cs), 07.00
Az atw-nél létre kell hozni egy tmp nevű könyvtárat a filefeltöltéshez
6

Re: probléma

attlad · 2005. Május. 19. (Cs), 11.37
Ha megnézted a linket, akkor miért nem az ott leírtakat, meg ottani példát használod?

Pl. copy helyett move_uploaded_file.

Másrészt én elsőnek néznék egy phpinfo()-t, hogy mekkora fájlokat enged feltölteni, ha nincs phpinfo(), akkor pl. ini_get():
echo ini_get('upload_max_filesize');

A fenti kód helyett először érdemes lehet nézni egy var_dump($_FILES);-t hogy megérkezik-e egyáltalán a feltöltött fájl.

Attila
7

Köszönet!

Anonymous · 2005. Május. 19. (Cs), 20.14
Nagyon köszönöm! Ezzel a néhány tanáccsal és tesztelő paranccsal sikerült megoldani a problémát! De van egy olyan érzésem, hogy még írni fogok, amikor a fórumba kell majd betölteni ezt a képfájlt:)))

Köszönöm még1x!

Danci
2

Form:

kamikaze · 2005. Május. 18. (Sze), 13.14
Form:

<FORM TARGET="<?php echo $PHP_SELF; ?>" method="post" action="upload.php" enctype="multipart/form-data"> 
<input type="file" name="fajl" size=17 width=80>
<?php echo "<input name='MAX_FILE_SIZE' type='hidden' value='51200'>"; ?>
<INPUT type=image src='gif/elkuld.jpg' border='0' hspace='0' vspace='0' width='100' height='15'>
upload:

$feltkt=dirname($PATH_TRANSLATED).'/images';
copy($fajl,"$feltkt/$fajl_name") or die
("nem jott ossze");   
Ennek műkodnie kell
8

upload

juhasztibi · 2005. Május. 19. (Cs), 22.43
Ezzel meni fog!
---------------
upload.php tartalma
----------------

<?PHP
$imagesonly = false;
$basedir = ".";
$filetypesinf = "filetypes.txt";
$allowfiletyopesonly = true;

// <--- NO USER EDITABLE PARTS BELOW THIS LINE --->
session_start();

if($imagesonly == false AND $allowfiletyopesonly == true)
	{
	$fa = fopen($filetypesinf, 'r');
	while($line = fgets($fa, 1024))
		{
		if(ereg("\n",$line))
			{
			$line = ereg_replace("\n","", $line);
			}
		$filetypes[$line] = $line;
		}
	fclose($fa);
	}

define("STEP1","<html>\n<head>\n<title>Feltöltés</title>\n</head>\n<form action=\"" . 

$_SERVER['php_self'] . "\" method=\"get\">\nHány fájlt szeretnél feltölteni? <input 

type=\"text\" size=\"1\" value=\"5\" name=\"filestoupload\"/>\n<br />\n<input 

type=\"submit\">\n</form>\n</body>\n</html>");
$step2 = "<html>\n<head>\n<title>Feltöltés</title>\n</head>\n<form action=\"" . 

$_SERVER['php_self'] . "\" method=\"post\" enctype=\"multipart/form-data\">\n{FORM}\n<input 

type=\"submit\" name=\"upload\" value=\"Feltöltés\" />\n</form></body>\n</html>";

function map_dirs($path) 
	{
	if(is_dir($path)) 
		{
		if($contents = opendir($path)) 
			{
			while(($node = readdir($contents)) !== false) 
				{
				if($node!="." && $node!="..") 
					{
					if(is_dir($path."/".$node) AND is_writable($path . 

"/" . $node))
						{
						$_SESSION['path'] .= "<option value=\"" . 

$path . "/" . $node . "\">" . $path . "/" . $node . "</option>\n";
						map_dirs($path . "/" . $node);
						}
					}
				}
			}
		}
	}

$_SESSION['path'] = "";
map_dirs($basedir);

if(Empty($_POST['upload']))
	{
	if(Empty($_GET['filestoupload']))
		{
		die(STEP1);
		}
	else
		{
		$counter = 1;
		for($i=0; $i != $_GET['filestoupload']; $i++)
			{
			$form .= "File " . $counter++ . "\n<br />\n<input type=\"file\" 

name=\"" . $i . "\" /> Helye: <select name=\"place" . $i . "\" size=\"1\">\n" . 

$_SESSION['path'] . "</select>\n<br />\n";
			}
		die(ereg_replace('{FORM}', $form, $step2));
		}
	}
else
	{
	foreach($_FILES as $file)
		{
		if(!empty($file['tmp_name']))
			{
			if($imagesonly == true)
				{
				$size = getimagesize($file['tmp_name']);
				if(!$size)
					{
					print $file['name'] . " feltöltése <font 

color=\"ff0000\">sikertelen</font>, mivel az nem kép!\n<br />\n";
					}
				else
					{
					if(@copy($file['tmp_name'], $_POST['place' . 

key($_FILES)] . '/' . $file['name']))
						{
						print $file['name'] . " feltöltése <font 

color=\"00ff00\">sikeres</font>\n<br />\n";
						}
					else
						{
						print $file['name'] . " feltöltése <font 

color=\"ff0000\">sikertelen</font>, mivel belső hiba történt...\n<br />\n";
						}
					}
				}
			else
				{
				if($allowfiletyopesonly == true AND 

!empty($filetypes[$file['type']]))
					{
					print $file['name'] . " feltöltése <font 

color=\"ff0000\">sikertelen</font>, mivel a file típus nem megengedett...(" . $file['type'] 

. ")\n<br />\n";
					}
				else
					{
					if(!Is_dir($_POST['place' . key($_FILES)]))
						{
						print $file['name'] . " feltöltése <font 

color=\"ff0000\">sikertelen</font>, mivel a megadott könyvtár nem létezik...\n<br />\n";
						}
					else
						{
						if(@copy($file['tmp_name'], $_POST['place' 

. key($_FILES)] . '/' . $file['name']))
							{
							print $file['name'] . " feltöltése 

<font color=\"00ff00\">sikeres</font>\n<br />\n";
							}
						else
							{
							print $file['name'] . " feltöltése 

<font color=\"ff0000\">sikertelen</font>, mivel belső hiba történt...\n<br />\n";
							}
						}
					}
				next($_FILES);
				}
			}
		}
	}
?>
--------------------------------------
filetype.txt tartalma

text/plain
image/gif
application/octet-stream
---------------------------------------
Beállítási lehetőségek:
$imagesonly = false; -> true / false: megadja, hogy csak képet lehessen-e feltölteni
$basedir = "."; -> A célkönyvtárak listázánál használt alapkönyvtár
$filetypesinf = "filetypes.txt"; -> A feltölthető filetípusokat tartalmazó file neve
$allowfiletyopesonly = true; -> Csak a fentebb megadott fileban leírt filetípusok feltöltésének engedélyezése

ISMERT BUG-ok:
A filetypesinf-ben megadott file utolsó sorának mindig üresnek kell lenni, különben az utolsó sorban leírt filetípust nem engedi feltölteni...
9

újra itt

Anonymous · 2005. Május. 20. (P), 15.41
Hello és köszönet az igen velős és bonyolult scriptért juhasztibinek!
Mint mondtam a képfeltöltés megoldódott, ám amikor a képet ki akarom tenni a weblapra (most éppen a fórumba), akkor nem jelenik meg a kép, pedig az elérési út jó! Tapasztaltam, hogy olyan kép, amit nem az SQL adatbázisból hívok le, az viszont megjelenik a lapon.
Ebből nem tudom, hogy mit értettetek, de itt a script lényeges része:

$i = 1;
while ($user_tomb = mysql_fetch_array($user_lekerd_eredm)) {
$login_tomb[$i] = $user_tomb['login'];
$kep_tomb[$i] = $user_tomb['image'];
$i++;
}

...

if ( $hsz_bekuldoje == $login_tomb[$i] ) {
$kep_kiir=$user_images_feltolt_path ."/" .$kep_tomb[$i];
$i = $z;
} else {
$kep_kiir=$user_images_feltolt_path ."/nemreg.jpg";
}

Miért van, hogy az SQL adatbázisból vett kép nem jelenik meg, mikor jó az elérési útja?

Online: http://users.atw.hu/gytk/includes/forum/temalista_link.php
(bármelyik témára kattintva)

Danci
10

Képfeltöltő

Elektromann · 2011. Feb. 10. (Cs), 16.21
Sziasztok
Ismerek egy egyszerű képfeltöltőt, de én olyat szeretnék, hogy ha tallózok egy képet, azt gombra kattintás nélkül (mikor rákattintok a megnyitásra) jelenítse meg, majd ha rákattint a feltöltésre, akkor hajtsa végre a műveletet.
Tudtok segíteni?
11

Flash, Java, Silverlight

Poetro · 2011. Feb. 10. (Cs), 16.23
Ezt nem tudod megvalósítani HTML+JS-ben egyenlőre. Addig is marad a Flash / Java / Silverlight.
12

képtípus ellenőrzése

gaso · 2012. Feb. 10. (P), 18.02
sziasztok, képfeltöltés nagyjából megy PHP-MySQL párossal, egyedül valahogy a képtípus ellenőrzése nem jó.

Ezt próbálom erőltetni, tehát nézze meg, hogy .jpg a fájl, ha nem akkor kiírja hibaüzenetet. De akárhogy változtatom az utasítást mindig kiszáll hibaüzenettel, hiába töltök jpg fájlt.

if ($_FILES["pix"]["type"] !== "image/jpg")
{
echo "A file nem kép típusú. Tölts fel másikat";
exit();
}
13

Nem jó

Poetro · 2012. Feb. 10. (P), 18.14
Ezzel nem feltétlen szerencsés azt ellenőrizni, hogy az illető fájl JPEG-e, ugyanis valaki feltölthet egy vírusos EXE fájlt, átnevezve virusosfajl.exe.jpg-ve, és akkor te szépen el fogod fogadni, ami nem szerencsés. Használd inkább a GD2 függvényeket a fájltípus ellenőrzésére.

A másik dolog, ha már a type-ot ellenőrzöd, akkor nézd már meg, a böngészők milyen MIME type-ot adnak vissza JPEG fájlok esetén
14

köszi a választ, a MIME

gaso · 2012. Feb. 10. (P), 18.43
köszi a választ, a MIME típust kell azt hiszem megnéznem, IE simán engedi a feltöltést, FF és Chrome nem.

GD2 függvényeket abszolút nem ismerem, nem is tudom mennyire szűrik ki jobban a képbe rejtett vírusokat mint ez a módszer.
15

Nem kép

Poetro · 2012. Feb. 10. (P), 19.07
Te nem ellenőrzöd, hogy a feltöltött fájl kép-e, hanem csak azt, hogy a böngésző milyen MIME típust küldött. Például megtehetem azt, hogy veszek egy EXE vagy PHP fájlt és elküldöm a szkriptednek image/jpg MIME típussal (egyébként a szabvány szerint ennek image/jpeg-nek kellene lennie), és akkor te ezt boldogan feltöltöd a szerveredre. Ezzel nagy biztonsági rést hagysz az oldalon (mivel még a fájl kiterjesztést se ellenőrzöd).

Ekkor tegyük fel, hogy valaki feltölt a szerverre egy PHP fájlt, mivel te nem ellenőrzöd csak azt az adatot amit a böngésző küld, és amit meg lehet hamisítani. És ha már fel tudta tölteni a PHP fájlt .php kiterjesztéssel, akkor tudja futtatni a szervereden, így újabb PHP fájlokat, vírusokat stb. tud a szerveredre juttatni, ezzel teljesen átvéve a hatalmat a szervered felett. A másik, hogy tegyük fel egy EXE fájlt tölt fel a fenti módszerrel a .exe kiterjesztést is megtartva, majd belinkeli a fájlt egy másik oldalra. Így előbb-utóbb a Google számára is nyilvános lesz, hogy a te oldalad vírusos, így azokban a böngészőkben, amelyek a Google és más feketelistákra támaszkodnak, meg fogják tagadni a te oldaladra való látogatást.

A getimagesize és exif_imagetype használatával meg tudod állapítani, hogy az illető fájl kép-e, és hogy milyen típusú.
16

Manual

Pepita · 2012. Feb. 12. (V), 22.07
GD2 függvényeket abszolút nem ismerem
Akkor nézd meg a PHP Manual-t, amit le is tölthetsz. (Még valamennyire magyarra fordított változat is van.)
De persze először is azokat a függvényeket, miket Poetro írt.