Przejdź na skróty do treści. | Przejdź do nawigacji

Zapamiętaj mnie Przypomnij hasło Rejestracja
Wersja mobilna
Newsletter
Zgłoś uwagę
RSS

Blogi

rozwiń
Strona główna Blogi Coderblog - blog o programowaniu

Coderblog - blog o programowaniu

15.06.2009

[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 :)

 

Gość
Gość IP: 83.22.63.* 2011.02.02 16:03
W przypadku połączenia kodu (II część wpisu), usuń znak "!" w 2.giej linijce kodu :

if(!is_file($_FILES['plik']['tmp_name']))


- inaczej formularz wgrywania pliku Ci się nie wyświetli.
katarzynak
katarzynak 2009.08.29 12:35
bardzo fajny blog :)
marceliusz11
marceliusz11 2009.08.27 12:47
ma za slabego kompa na to;p
12.06.2009

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

Gość
Gość IP: 89.79.86.* 2010.03.11 10:49
ja bym bardziej polecał.
$exif = exif_read_data('./images.jpg', 0, true);
zobaczcie sami
var_dump(exif_read_data('./images.jpg', 0, true));
Wywołanie np.
echo $exif['WINXP']['Comments'];
wojtas_vip
wojtas_vip 2009.09.16 20:57
Czegoś takiego właśnie potrzebuje. Świetny opis. Dzięki.
Gość
Gość IP: 84.10.188.* 2009.08.08 10:06
No ale, to wymaga biblioteki EXIF, nie wiadomo czy każdy serwer ją posiada włączoną.

http://pl.php.net/manual/pl/exif.installation.php

-- WebNuLL
Coderblog - blog o programowaniu
Autor: grzegorz zdanowski
Autorem bloga jest czytelnik CHIP Online - Grzegorz Zdanowski
Liczba postów: 5
Liczba komentarzy: 29
Liczba wyświetleń: 21128
Tagi blogu: programowanie
Sonda
Wyraź swoją opinię
Telefony
Play.pl
Cena: 99.00
  • Modem z funkcją routera Wi-Fi
  • Możliwość utworzenia sieci bezprzewodowej dla pięciu urządzeń
  • Wbudowana bateria
  • Wyświetlacz OLED z licznikiem danych
Cena: 269.00
  • Modem z funkcją routera Wi-Fi
  • Możliwość utworzenia sieci bezprzewodowej dla pięciu urządzeń
  • Wbudowana bateria
  • Wyświetlacz OLED z licznikiem danych
CENEO Kup najtaniej
MSI Radeon HD5770 1GB DDR5 128bit PCI-E (R5770-PMD1G) MSI Radeon HD5770 1GB DDR5 128bit PCI-E (R5770-PMD1G)
Dostępny w 6 sklepach
Sprawdź CENY tego produktu
Logitech B110 Logitech B110
Dostępny w 101 sklepach
Sprawdź CENY tego produktu
Archos 7'' Home Tablet 8GB Archos 7'' Home Tablet 8GB
Dostępny w 9 sklepach
Sprawdź CENY tego produktu
Magix PC Check & Tuning 2011 (570993) Magix PC Check & Tuning 2011 (570993)
Dostępny w 4 sklepach
Sprawdź CENY tego produktu

Co:
Gdzie:
Kraj:
praca IT Polska njobs IT praca
vacatures IT Netherlands njobs IT vacatures
arbeit IT Deutschland njobs IT arbeit
work IT United Kingdom njobs IT jobs
Lavoro IT Italia njobs IT lavoro
Emploi IT France njobs IT emploi
trabajo IT Espana njobs IT trabajo
Video
nowe filmy