Przejdź do treści
Cream Software
  • Start
  • Aplikacje
  • App Store
  • Google Play
  • O nas
  • Jak działamy
  • Blog
  • Kontakt
    • 🇵🇱 Polski
    • 🇺🇸 English
    • 🇵🇱 Polski
    • 🇺🇸 English

    Blog

    Upload plików na serwer w PHP

    Opublikowano
    31 października 2002
    Aktualizacja
    27 marca 2023
    • PHP - Perl - mySQL
    • #php
    • #programowanie
    • #publikowanie
    Upload plików na serwer w PHP

    Autor: Marek Pawłowski

    Czasem zachodzi potrzeba przesłania pliku na serwer z poziomu formularza dostępnego na stronie WWW. W tym artykule zaprezentuję jak tego dokonać z wykorzystaniem języka PHP i Pajączka.

    Najpierw utworzymy prosty formularz, za pomocą którego użytkownicy będą mogli wysłać plik na nasz serwer.

    <form enctype="multipart/form-data" action="<?= $PHP_SELF ?>" method="post">' 
       <input type="file" name="myfile"> 
       <input type="submit" value="submit"> 
       <input type="hidden" name="MAX_FILE_SIZE" value="10000"> 
    </form> 

    Kilka spraw wymaga tutaj wytłumaczenia. Po pierwsze atrybut enctype zamiast domyślnej wartości “application/x-www-form-urlencoded” przybiera postać “multipart/form-data”. To poinformuje serwer, że nasz formularz prócz danych tekstowych wysyła także pliki. Kolejna sprawa to atrybut action - tu pojawia się fragment kodu PHP. Konstrukcja jest równoznaczna , a więc wartość atrybutu będzie wskazywać na sam dokument zawierający formularz. Oczywiście upload może być obsługiwany przez inny skrypt, ale tak jest po prostu wygodnie, jako że mamy zebrane wszystko w jednym pliku. Ukryte pole o nazwie MAX_FILE_SIZE informuje przeglądarkę, że nie życzymy sobie przyjmować plików o rozmiarze większym niż podany (wartość w bajtach). Niestety jest to zabezpieczenie, które dość łatwo ominąć. Na szczęście wartości upload_max_filesize w pliku php.ini nie da się oszukać. Uwaga, jednak, ta zmienna ma domyślną wartość 2 megabajtów. Możemy ją jednak zmienić z poziomu skryptu za pomocą funkcji ini_set().

    OK. Mamy już formularz, czas zabrać się za pisanie skryptu. Jednak zanim to zrobimy musimy się dowiedzieć w jaki sposób PHP obsługuje upload plików. Jeśli tak jak w moim przykładzie pole file miało nazwę myfile to w obrębie skryptu PHP dostępne będą następujące zmienne:

    $myfile - tymczasowa nazwa pliku 
    $myfile_name - oryginalna nazwa pliku 
    $myfile_size - wielkość pliku 
    $myfile_type - typ MIME pliku&lt;/blockquote&gt;

    Nas będą interesowały tylko te dwie pierwsze. Po wysłaniu formularza plik zostanie zapisany w katalogu podanym w upload_tmp_dir w php.ini pod tymczasową nazwą. Do nas należy tylko sprawdzenie, czy plik został faktycznie wysłany z naszej strony i skopiowanie go pod podaną nazwą do miejsca gdzie chcemy go umieścić. Do sprawdzenia czy ktoś nie próbuje przesłać nielegalnie pliku na nasz serwer możemy użyć funkcji is_uploaded_file() lub move_uploaded_file(), które są dostępne od wersji PHP 3.0.17 i PHP 4.0.3. Cały skrypt powinien wyglądać mniej więcej tak:

    <?php 
    if (!isSet($myfile)) { 
    ?>
    <form enctype="multipart/form-data" action="<?= $PHP_SELF ?>" method="post">'; 
       <input type="file" name="myfile">
       <input type="submit" value="submit">
       <input type="hidden" name="MAX_FILE_SIZE" value="10000">
    </form>
    <?php 
    } elseif (is_uploaded_file($myfile)) { 
       copy($myfile, $myfile_name); 
       echo "Udany upload pliku!"; 
    } else 
       die('Próba ataku! Plik: ' . $myfile); 
    ?>

    Jeśli zmienna $myfile nie istnieje wyświetlamy formularz. W przeciwnym przypadku sprawdzamy czy plik został legalnie wysłany na nasz serwer. Jeżeli tak - kopiujemy go w wybrane przez nasz miejsce, jeśli nie - wypisujemy ostrzeżenie. To jest cała filozofia…

    W PHP 4 prócz wyżej wymienionych zmiennych tworzona jest także tablica $HTTP_POST_FILES (od PHP 4.1.0 można użyć tablicy $_FILES) następującej postaci:

    $_FILES[&quot;myfile&quot;]["tmp_name"] - tymczasowa nazwa pliku 
    $_FILES["myfile"]["name"] - oryginalna nazwa pliku 
    $_FILES["myfile"]["size"] - wielkość pliku 
    $_FILES["myfile"]["type"] - typ MIME pliku

    To już właściwie wszystko. Gdyby ktoś miał jakieś wątpliwości zachęcam do przeglądnięcia podręcznika PHP:

    Upload plików is_uploaded_file() move_uploaded_file() copy()

    Pozdrawiam, Marek LOCKOOM Pawłowski

    Powiazane aplikacje Cream Software

    Jesli ten temat jest Ci bliski, sprawdz nasze aplikacje i narzedzia.

    • Spider V6
    • Gonna Rain?
    • Money Gone?!
    • Heartie

    Kategorie

    • Grafika i foto na WWW
    • HTML i tworzenie stron
    • Internet
    • JavaScript VBScript Ajax
    • Mobile
    • Nowe wersje programów
    • Nowości w Cream Software
    • Odtwarzanie i konwersja filmów
    • Odzyskiwanie danych
    • Pająk
    • PHP - Perl - mySQL
    • Sprzęt
    • Style CSS
    • Wpis gościnny
    • Zamknięte projekty

    Nowoczesne aplikacje mobilne i desktopowe, które działają latami.

    Polityka prywatności | Regulamin | Kontakt

    © Cream Software. Wszelkie prawa zastrzeżone.

    Developed by cream.software

    Mierzymy wizyty bez analitycznych cookies. Po Twojej zgodzie używamy także analitycznych cookies. Szczegóły znajdziesz w Polityce prywatności.