Coderblog - blog o programowaniu
[PHP] Upload pliku na serwer
W erze serwisów Web 2.0 to użytkownicy decydują o zawartości serwisu. W dzisiejszych czasach tekst to za mało - należy dać użytkownikom możliwość uploadu filmów i zdjęć.
PHP zosta?o stworzone do tworzenia dynamicznych stron internetowych. Uploadowanie pliku sk?ada si? z dwóch bloków - formularza i obs?ugi wgranego pliku.
Przyk?adowy formularz niech wygl?da tak:
<form enctype="multipart/form-data" action="index.php" method="POST"> <input name="plik" type="file"> <input type="submit" value="Wgraj"> </form>
Teraz wystarczy zapisa? wys?any plik. Zalecam po?wi?ci? chwik? uwagi na przeanalizowania poni?szego kodu przed kopiowaniem:
$u_plik = $_FILES['plik']['tmp_name']; $u_nazwa = $_FILES['plik']['name']; $u_rozmiar = $_FILES['plik']['size']; $u_max_rozmiar = 2*1024*1024; //Maksymalny rozmiar pliku dozwolony do wgrania a bajtach - w przyk?adzie 2MB if($u_rozmiar > $u_max_rozmiar)
{
echo "Plik jest zbyt du?y!"; } elseif(is_uploaded_file($u_plik)) { move_uploaded_file($u_plik, "pliki/$u_nazwa"); echo "Plik: <b>$u_nazwa</b> ($u_rozmiar B) zosta? uploadowany!"; }
Dla wygody mo?na obie cz??ci po??czy? w jeden plik w ten sposób:
<?
if(!is_file($_FILES['plik']['tmp_name']))
{
$u_plik = $_FILES['plik']['tmp_name'];
$u_nazwa = $_FILES['plik']['name'];
$u_rozmiar = $_FILES['plik']['size'];
$u_max_rozmiar = 2*1024*1024; //Maksymalny rozmiar pliku dozwolony do wgrania a bajtach - w przyk?adzie 2MB
if($u_rozmiar > $u_max_rozmiar)
{
echo "Plik jest zbyt du?y!";
}
elseif(is_uploaded_file($u_plik))
{
move_uploaded_file($u_plik, "pliki/$u_nazwa");
echo "Plik: <b>$u_nazwa</b> ($u_rozmiar B) zosta? uploadowany!";
}
}
else
{
echo'<form enctype="multipart/form-data" action="index.php" method="POST">
<input name="plik" type="file">
<input type="submit" value="Wgraj">
</form>';
}
?>
Koniec lekcji - jedynek nie stawiam :)
[PHP] Odczyt danych EXIF ze zdjęć
Czy wiesz, że plik JPG zawiera coś więcej niż tylko obraz? Aparat podczas robienia zdjęcia zapisuje pewne dane dot. Ekspozycji czy też orientacji aparatu. Dzisiaj pokażę jak te dane odczytać.
PHP posiada wbudowaną funkcję do odczytu metadanych zdjęć –
exif_read_data().
Poniższa funkcja zwraca tablicę dwuwymiarową zawierającą nazwę parametru i
dane.
Kod:
function pobierz_exif($plik)
{
$exif = exif_read_data($plik, 'IFD0');
if($exif===false) //Je?li obraz ni zawiera exif zwraca pust? tablic?
{
return array();
}
$exif = exif_read_data($plik, 0, true);
foreach ($exif as $key => $section)
{
foreach ($section as $name => $val)
{
$dane[] = array("nazwa" => $key.$name, "wartosc" => $val);
}
$x++;
}
return $dane;
}
Funkcja na początku swojego działania stara się odczytać dane i sprawdza czy zdjęcie je zawiera. Jeśli plik nie zawiera metadanych funkcja zwraca pustą tablicę (o zerowej liczbie elementów).
Wykonajmy dla przykładu taki kod:
var_dump(pobierz_exif(‘test.jpg’));
Jeśli plik test.jpg istnieje i zawiera dane zobaczymy listing podobny do tego:
Kod:
array(55) {
[0]=>
array(2) {
["nazwa"]=>
string(12) "FILEFileName" – nazwa pliku
["wartosc"]=>
string(8) "test.jpg"
}
[1]=>
array(2) {
["nazwa"]=>
string(16) "FILEFileDateTime" – data i czas wykonania zdjęcia
["wartosc"]=>
int(1244806556)
}
[2]=>
array(2) {
["nazwa"]=>
string(12) "FILEFileSize" – rozmiar pliku w bajtach
["wartosc"]=>
int(79446)
}
[3]=>
array(2) {
["nazwa"]=>
string(12) "FILEFileType" – kod rozszerzenia – w moim przypadku 2 (jpg)
["wartosc"]=>
int(2)
}
[4]=>
array(2) {
["nazwa"]=>
string(12) "FILEMimeType" – typ mime zdjęcia
["wartosc"]=>
string(10) "image/jpeg"
}
[5]=>
array(2) {
["nazwa"]=>
string(17) "FILESectionsFound" – znalezione sekcje
["wartosc"]=>
string(30) "ANY_TAG, IFD0, THUMBNAIL, EXIF"
}
[6]=>
array(2) {
["nazwa"]=>
string(12) "COMPUTEDhtml" – rozmiary zdjęcia gotowe do wstawienia na stronę (html)
["wartosc"]=>
string(24) "width="672" height="512""
}
[7]=>
array(2) {
["nazwa"]=>
string(14) "COMPUTEDHeight" – wyliczona wysokość
["wartosc"]=>
int(512)
}
[8]=>
array(2) {
["nazwa"]=>
string(13) "COMPUTEDWidth" – wyliczona szerokość
["wartosc"]=>
int(672)
}
[9]=>
array(2) {
["nazwa"]=>
string(15) "COMPUTEDIsColor" – przestrzeń kolorystyczna
["wartosc"]=>
int(1)
}
[10]=>
array(2) {
["nazwa"]=>
string(25) "COMPUTEDByteOrderMotorola" – organizacja danych wg, standardu motorolli
["wartosc"]=>
int(1)
}
[11]=>
array(2) {
["nazwa"]=>
string(20) "COMPUTEDExposureTime" – czas ekspozycji
["wartosc"]=>
string(14) "0.031 s (1/32)"
}
[12]=>
array(2) {
["nazwa"]=>
string(23) "COMPUTEDApertureFNumber" – wartość przysłony
["wartosc"]=>
string(5) "f/2.4"
}
[13]=>
array(2) {
["nazwa"]=>
string(26) "COMPUTEDThumbnail.FileType" – typ miniatury (kompresja) – tutaj tiff (8)
["wartosc"]=>
int(8)
}
[14]=>
array(2) {
["nazwa"]=>
string(26) "COMPUTEDThumbnail.MimeType" – typ mime miniatury
["wartosc"]=>
string(10) "image/tiff"
}
[15]=>
array(2) {
["nazwa"]=>
string(24) "COMPUTEDThumbnail.Height" – wyliczona wysokość miniatury
["wartosc"]=>
int(60)
}
[16]=>
array(2) {
["nazwa"]=>
string(23) "COMPUTEDThumbnail.Width" – wyliczona szerokość miniatury
["wartosc"]=>
int(80)
}
[17]=>
array(2) {
["nazwa"]=>
string(20) "IFD0ImageDescription" – opis zdjęcia (czasami dodawany przez aparaty)
["wartosc"]=>
NULL
}
[18]=>
array(2) {
["nazwa"]=>
string(8) "IFD0Make" – producent aparatu
["wartosc"]=>
string(4) "SONY"
}
[19]=>
array(2) {
["nazwa"]=>
string(9) "IFD0Model" – model aparatu
["wartosc"]=>
string(8) "DSC-D700"
}
[20]=>
array(2) {
["nazwa"]=>
string(15) "IFD0Orientation" – orientacja aparatu w osi pion/poziom (1 – poziomo)
["wartosc"]=>
int(1)
}
[21]=>
array(2) {
["nazwa"]=>
string(15) "IFD0XResolution" - DPIx
["wartosc"]=>
string(4) "72/1"
}
[22]=>
array(2) {
["nazwa"]=>
string(15) "IFD0YResolution" - DPIy
["wartosc"]=>
string(4) "72/1"
}
[23]=>
array(2) {
["nazwa"]=>
string(18) "IFD0ResolutionUnit" – jednostki rozdzielczości
["wartosc"]=>
int(2)
}
[24]=>
array(2) {
["nazwa"]=>
string(12) "IFD0DateTime" – data i godzina wykonania zdjęcia w czytelnym dla człowieka formacie
["wartosc"]=>
string(19) "1998:12:01 14:22:36"
}
[25]=>
array(2) {
["nazwa"]=>
string(20) "IFD0YCbCrPositioning" – pozycja palety kolorów YCbCr
["wartosc"]=>
int(1)
}
[26]=>
array(2) {
["nazwa"]=>
string(20) "IFD0Exif_IFD_Pointer" – wersja IFD/EXIF
["wartosc"]=>
int(206)
}
[27]=>
array(2) {
["nazwa"]=>
string(19) "THUMBNAILImageWidth" – szerokość miniatury
["wartosc"]=>
int(80)
}
[28]=>
array(2) {
["nazwa"]=>
string(20) "THUMBNAILImageLength" – wysokość miniatury
["wartosc"]=>
int(60)
}
[29]=>
array(2) {
["nazwa"]=>
string(22) "THUMBNAILBitsPerSample" – Bit/próbkę
["wartosc"]=>
array(3) {
[0]=>
int(8)
[1]=>
int(8)
[2]=>
int(8)
}
}
[30]=>
array(2) {
["nazwa"]=>
string(20) "THUMBNAILCompression" – kompresja miniatury
["wartosc"]=>
int(1)
}
[31]=>
array(2) {
["nazwa"]=>
string(34) "THUMBNAILPhotometricInterpretation" – numeryczna interpretacja miniatury
["wartosc"]=>
int(2)
}
[32]=>
array(2) {
["nazwa"]=>
string(21) "THUMBNAILStripOffsets" – ilość offsetów
["wartosc"]=>
int(648)
}
[33]=>
array(2) {
["nazwa"]=>
string(24) "THUMBNAILSamplesPerPixel" – ilość próbek/pixel w miniaturze
["wartosc"]=>
int(3)
}
[34]=>
array(2) {
["nazwa"]=>
string(21) "THUMBNAILRowsPerStrip" – liczba kolumn w miniaturze
["wartosc"]=>
int(60)
}
[35]=>
array(2) {
["nazwa"]=>
string(24) "THUMBNAILStripByteCounts" – waga miniatury
["wartosc"]=>
int(14400)
}
[36]=>
array(2) {
["nazwa"]=>
string(20) "THUMBNAILXResolution" – DPIx miniatury
["wartosc"]=>
string(4) "72/1"
}
[37]=>
array(2) {
["nazwa"]=>
string(20) "THUMBNAILYResolution" – DPIy miniatury
["wartosc"]=>
string(4) "72/1"
}
[38]=>
array(2) {
["nazwa"]=>
string(23) "THUMBNAILResolutionUnit" – jednostki rozdzielczości miniatury
["wartosc"]=>
int(2)
}
[39]=>
array(2) {
["nazwa"]=>
string(19) "EXIFExposureProgram" – program tematyczny na podczas którego wykonano zdjęcie
["wartosc"]=>
int(3)
}
[40]=>
array(2) {
["nazwa"]=>
string(19) "EXIFISOSpeedRatings" - migawka
["wartosc"]=>
int(200)
}
[41]=>
array(2) {
["nazwa"]=>
string(15) "EXIFExifVersion" – wersja Exif
["wartosc"]=>
string(4) "0200"
}
[42]=>
array(2) {
["nazwa"]=>
string(20) "EXIFDateTimeOriginal" – oryginalny czas i data zrobienia zdjęcia
["wartosc"]=>
string(19) "1998:12:01 14:22:36"
}
[43]=>
array(2) {
["nazwa"]=>
string(21) "EXIFDateTimeDigitized" – data i godzina zapisu zdjęcia do jpg
["wartosc"]=>
string(19) "1998:12:01 14:22:37"
}
Zalecam przed kopiowaniem gotowego kodu przeanalizowanie zasady jego działania a w szczególności zwracanej tablicy.

Kup najtaniej

if(!is_file($_FILES['plik']['tmp_name']))
- inaczej formularz wgrywania pliku Ci się nie wyświetli.