8.2. A képfeltöltési procedúra

iDevice ikon

Két fájlra lesz szükségünk amivel megoldhatjuk, hogy a felhasználó az általa a 'sajátgépéről' kiválasztott *.jpg fájlt fel tudja tölteni a megfelelő helyre:

  • egy a tallózást és a feltöltés indítását kezelő (tallozas.html) html fájlra (ez az amit az image_upload.swf fájl upload_btn-ja egy popup ablakba nyit) és
  • egy, a tényleges feltöltést kezelő, és annak rendben menetelét követően a pictnamesender.swf fájt megnyitó upload.php fájlra
  • tallozas.html:
Csak a szükséges részletekre szorítkozva:

Keresd ki a feltöltendő fájlt! <br>
(non-interlaced *.jpg, mérete maximum 300*200 pixel!) <br><br>
<form action="upload.php" method="post" enctype="multipart/form-data">
File:
<input type="file" name="userfile" >
<input name="submit" type="submit" value="Feltöltés!">
</form>

49. ábra

A tallózás gombra kattintva felnyílik az operációs rendszer fájlkezelő ablaka, az itt kiválasztott fájl nevét pedig a feltöltés gombra kattintva 'userfile' paraméterként átadjuk az upload.php fájlnak, ami ugyanebben a popup ablakban fog megnyílni. Érdemes a felhasználó figyelmét felhívni rá, hogy csak nem progressive (non-interlaced) jpg fájlt érdemes feltölteni, hiszen a flash csak ezeket tudja megjeleníteni, illetve megadhatunk pár a kép méretével kapcsolatos kikötést, amelyeket aztán majd ellenőrzünk is, hogy ne lehessen óriás képeket feltölteni.

  • upload.php:
Ennek a fájlnak a feladata lesz hogy a felhasználó által kiválasztott fájlt feltöltse a szerverünkre, és ha ez sikerült, akkor a fájl nevének átadása mellett megnyissa (még mindig a nyitott popup ablakunkba) a pictnamesender.swf fájlt

<?php
// a könyvtár -ahova a feltöltendo képet rakni szeretnénk- elérési útjánala(*1)
$uploaddir = "images";
// a kép maximális méretei
$max_height = "200";
$max_width = "300";
// a feltölthető kép lehetséges kitejesztése
$allowed_ext = "jpg";
// kiterjesztés, szélesség, magasság ellenőrzése(*2)
$fileinfo = pathinfo($_FILES['userfile']['name']);
$fileextension = "$fileinfo[extension]";
list($width, $height, $type, $w) = getimagesize($_FILES['userfile']['tmp_name']);
if($height > $max_height || $width > $max_width || $fileextension != $allowed_ext){
print "A fájl nem .jpg kitejesztésű vagy a kép nagyobb 300*200 pixelnél<br>";
print "<A href='javascript: self.close ()'>Ablak bezárása!</A>";
exit;
}
// Fájl feltöltése(*3)
if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
// a feltöltött fájl attributumának módosítása(*4)
if (chmod($_FILES['userfile']['tmp_name'], 0644)){
// a célkönyvtárba való töltés
if (move_uploaded_file($_FILES['userfile']['tmp_name'],$uploaddir.'/'.$_FILES['userfile']['name']){
}else{
print "problémák adódtak a feltöltéssel, próbálkozzon újra<BR>";
print "<A href='javascript: self.close ()'>Ablak bezárása!</A>";
exit;
}
}else{
print "problémák adódtak a feltöltéssel, próbálkozzon újra<BR>";
print "<A href='javascript: self.close ()'>Ablak bezárása!</A>";
exit;
}
}else{
print "problémák adódtak a feltöltéssel, próbálkozzon újra<BR>";
print "<A href='javascript: self.close ()'>Ablak bezárása!</A>";
exit;
}
//siker esetén innen folytatjuk(*5)
$neve=$_FILES['userfile']['name'];
print "A fájl sikeresen feltöltődött.";
//pictnamesender.swf fájl megnyitása(*6)
print "<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0' width='460' height='90'>
<param name='movie' value='pictnamesender.swf?pict_to_send=$neve'>
<param name=quality value=high>
<embed src='pictnamesender.swf?pict_to_send=$neve' quality=high pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_
Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width='460' height='90'></embed>
</object>";
?>

Mi is történik tehát a fentiekben:
*1 - a feltöltendő képet az 'images' könyvtárba fogjuk rakni (a már kész image_upload.swf fájlunkban is ezt az útvonalat adtuk meg....). Érdemes odafigyelni, hogy ez a könyvtár 0777 attribútumú hozzáféréssel rendelkezzen, hogy a fájlfeltöltés lehetséges legyen.
*2 - a feltöltendő fájl (a nevét 'userfile' paraméterként kapta meg a php) különbőző jellemzőinek ellenőrzése. Itt korlátozhatjuk a kép méretét is, ahogy azt a tallozas.html fájlnál jeleztük is. Amennyiben a kép bármilyen paramétere nem stimmel (esetleg nem is jpg képet próbált a user feltölteni), úgy hibaüzenetet küldünk és kilépünk a php-ból, az elegancia kedvéért egy popup bezárási lehetőséggel.
*3 - A fájl szerveroldali feltöltésének menetét is ellenőrizzük, bármilyen hiba esetén ugyancsak kilépünk a php-ből az előbb már írt elegáns módon :).
*4 - Ez az ellenőrzés a php alapbeállításaitól függően esetlegesen nem is szükséges, ami miatt itt szerepel, hogy számos tárhely-szolgáltatónál az így feltöltött fájl attribútuma 0600 lesz, ami egyben azt is jelenti, hogy átlagos user (és ebből a szempontból a image_upload.swf fájl is 'átlagos user') nem fér hozzá a fájlhoz, azaz betölteni sem tudja. Ezért módosítjuk az attribútumot 0644-re (azaz bárki által olvashatóra). Megjegyzendő, hogy ugyancsak a php alapbeállításaitól függően ez a módosítás esetlegesen nem engedélyezett.
*5 - Ha minden rendben ment, a fájl feltöltődött, akkor a felhasználó tájékoztatása végett kiírathatjuk a sikert jelző üzenetünket...
*6 - ...és egyúttal ugyanebbe az ablakba beágyazzuk a pictnamesender.swf fájt, úgy, hogy annak 'pict_to_send' nevű paraméterként átadjuk a feltöltött kép nevét (lásd a kiemelést!). (A screenshot kicsit csalóka, mert már tartalmazza ezt a fájlt, holott még nem volt róla szó, de ez csak pillanatok kérdése...)

50. ábra


Kész is volnánk a fájlfeltöltéssel, egyetlen feladat maradt hátra, a kép nevét elküldeni az arra azóta is türelmesen várakozó image_upload.swf -nek.