Biblioteka PHP Wysyłanie pliku na serwer





Biblioteka PHP | Wysyłanie pliku na serwer










jQuery(document).ready(function($) {
$('a[rel*=facebox]').facebox()
})




Jesteś tutaj: Strona Główna > PHP w Akcji > Wysyłanie pliku na serwer






Wysyłanie pliku na serwer



Kategorie:
Podstawy PHPPHP w AkcjiKurs Code IgniterpunFramework




Pomoc
Forum
Zaloguj lub Zarejestruj


 


Kanał RSS KategoriiPrzeglądaj wiadomości z kategorii

Przesyłanie plików za pomocą PHP jest łatwe i odbywa się zazwyczaj za pomocą formularza (zabawy ze strumieniami sobie odpuścimy). Stwórz skrypt o następującym kodzie: <?php echo '<pre>'; print_r($_POST); echo '<HR>'; print_r($_FILES); echo '</pre><HR>'; echo '<form enctype="multipart/form-data" method="post" action="a.php"><input type="file" size="32" name="plik_upload" value=""><input type="submit" name="Wyślij"></form>'; Ja nazwałem go "a.php", nazwa dowolna, pamiętaj tylko o zmianie parametru action. Jest to prosty skrypt roboczy zawierający odpowiedni formularz oraz wyświetlający zawartość tablic _POST i _FILES. Zaczynamy od formularza. By formularz mógł wysłać plik konieczny jest dodatek enctype="multipart/form-data" do taga FORM. Kolejnym elementem jest pole typu file (o dowolnej nazwie i tytule). Formularz musi mieć też oczywiście przycisk wysyłający. Po otworzeniu skryptu w przeglądarce zobaczymy coś takiego: Zaznacz jakiś plik z dysku i wyślij formularz. Zobaczysz wtedy coś takiego: Interesuje nas tablica _FILES. Zawiera ona dane o wysłanym pliku: name - nazwa, type - typ MIME (bardzo ważne), tmp_name - nazwa pliku tymczasowego, size - rozmiar w bajtach. Nasz skrypt nie umie jeszcze ładować pliku ale zaraz się tego nauczy. Musimy po prostu przenieść/skopiować plik tymczasowy do bierzącego katalogu: <?php // Powyżej nasz formularz $f = $_FILES['plik_upload']; IF(isset($f['name'])) { copy($f['tmp_name'], '/opt/lampp/htdocs/html/'.$f['name']); //lub rename($f['tmp_name'], '/opt/lampp/htdocs/html/'.$f['name']); //lub move_uploaded_file($f['tmp_name'], '/opt/lampp/htdocs/html/'.$f['name']); } Wszystkie trzy sposoby (copy, rename, move_uploaded_file) powinny działać (na ładowanie plików ma wpły wiele ustawień PHP jak safe mod czy bezpośrednio zezwolenie na ładowanie plików). Omówienie kodu: zaczynamy od $f = $_FILES['plik_upload']; - po prostu podtablicę przypisujemy do zmiennej $f ($_FILES['NAZWA_POLA_FILE_Z_FORMULARZA']) by było ładniej potem jeżeli to co przypisaliśmy jest tablicą (tj. coś się wysłało) to kopiujemy plik gdzie trzeba. Dziwna ścieżka: /opt/lampp/htdocs/html/ to ścieżka katalogu do miejsca na serwerze, na naszym koncie, w którym pojawić się ma nasz plik (zobacz phpinfo). Możemy to trochę zautomatyzować: <?php $f = $_FILES['plik_upload']; IF(isset($f['name'])) { $patch = str_replace('a.php', '', $_SERVER['SCRIPT_FILENAME']); copy($f['tmp_name'], $patch.$f['name']); //lub rename($f['tmp_name'], $patch.$f['name']); //lub move_uploaded_file($f['tmp_name'], $patch.$f['name']); } Zmienna $_SERVER['SCRIPT_FILENAME'] przechowuje całą ścieżkę katalogów od głównego do katalogu ze skryptem wraz z jego nazwą np. w tym przykładzie: /opt/lampp/htdocs/html/a.php. By mieć ścieżkę usuwamy nazwę pliku ze zmiennej i mamy ścieżkę (którą możemy dalej modyfikować itd.) Bezpieczeństwo skryptu Powyższy skrypt załaduje dowolny plik i jeżeli dostęp będą miały do niego niepowołane osoby to mogą np. załadować własny skrypt PHP. By ograniczyć ładowanie tylko określonych plików np. grafik wykorzystamy wartość klucza type: <?php $f = $_FILES['plik_upload']; IF($f['type'] == 'image/png' or $f['type'] == 'image/jpeg' or $f['type'] == 'image/gif') { $patch = str_replace('a.php', '', $_SERVER['SCRIPT_FILENAME']); copy($f['tmp_name'], $patch.$f['name']); } else { echo 'Niedozwolony plik'; } Oprócz tego warto zabezpieczyć się przed plikami o podmienionych rozszerzeniach, np: <?php $f = $_FILES['plik_upload']; IF($f['type'] == 'image/png' or $f['type'] == 'image/jpeg' or $f['type'] == 'image/gif') { $x = getimagesize($f['tmp_name']); IF(!is_array($x) or $x[0] < 2) { die('Zły plik graficzny'); } $patch = str_replace('a.php', '', $_SERVER['SCRIPT_FILENAME']); copy($f['tmp_name'], $patch.$f['name']); } else { echo 'Niedozwolony plik'; } Wykorzystaliśmy funkcję PHP GetImageSize pobierającą dane o pliku graficznym. Funkcja ta zwraca tablicę z wymiarami i innymi danymi więc jeżeli nie mamy tablicy (plik nie jest grafiką) lub długość jest mniejsza od 2 pikseli to znaczy że mamy podróbkę (pliki nie-grafika o zmienionym rozszerzeniu mają rozmiar 0 na 0) Nie zapomnij też o zabezpieczaniu takich skryptów hasłem (chyba że są to np. ładowacze awatarów itd.) Wysyłanie wielu plików naraz Zobacz tablicę _FILES dla skryptu: <?php echo '<pre>'; print_r($_POST); echo '<HR>'; print_r($_FILES); echo '</pre><HR>'; echo '<form enctype="multipart/form-data" method="post" action="a.php"> <input type="file" size="32" name="plik_upload[]" value=""> <input type="file" size="32" name="plik_upload[]" value=""> <input type="file" size="32" name="plik_upload[]" value=""> <input type="submit" name="Wyślij"></form>'; nazwa pola file wszędzie jest taka sama, tyle że jest tablicą - plik_upload[] (te nawiasy na końcu). Notka: pliki nie muszą być kopiowane z tmp/ na nasze konto, możemy je np. też wysłać emailem, wystarczy klasa wysyłająca maile z załącznikiem....c { color: #408080; font-style: italic } /* Comment */ .err { border: 1px solid #FF0000 } /* Error */ .k { color: #008000; font-weight: bold } /* Keyword */ .o { color: #666666 } /* Operator */ .cm { color: #408080; font-style: italic } /* Comment.Multiline */ .cp { color: #BC7A00 } /* Comment.Preproc */ .c1 { color: #408080; font-style: italic } /* Comment.Single */ .cs { color: #408080; font-style: italic } /* Comment.Special */ .gd { color: #A00000 } /* Generic.Deleted */ .ge { font-style: italic } /* Generic.Emph */ .gr { color: #FF0000 } /* Generic.Error */ .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .gi { color: #00A000 } /* Generic.Inserted */ .go { color: #808080 } /* Generic.Output */ .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ .gs { font-weight: bold } /* Generic.Strong */ .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ .gt { color: #0040D0 } /* Generic.Traceback */ .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ .kp { color: #008000 } /* Keyword.Pseudo */ .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ .kt { color: #B00040 } /* Keyword.Type */ .m { color: #666666 } /* Literal.Number */ .s { color: #BA2121 } /* Literal.String */ .na { color: #7D9029 } /* Name.Attribute */ .nb { color: #008000 } /* Name.Builtin */ .nc { color: #0000FF; font-weight: bold } /* Name.Class */ .no { color: #880000 } /* Name.Constant */ .nd { color: #AA22FF } /* Name.Decorator */ .ni { color: #999999; font-weight: bold } /* Name.Entity */ .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ .nf { color: #0000FF } /* Name.Function */ .nl { color: #A0A000 } /* Name.Label */ .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ .nt { color: #008000; font-weight: bold } /* Name.Tag */ .nv { color: #19177C } /* Name.Variable */ .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ .w { color: #bbbbbb } /* Text.Whitespace */ .mf { color: #666666 } /* Literal.Number.Float */ .mh { color: #666666 } /* Literal.Number.Hex */ .mi { color: #666666 } /* Literal.Number.Integer */ .mo { color: #666666 } /* Literal.Number.Oct */ .sb { color: #BA2121 } /* Literal.String.Backtick */ .sc { color: #BA2121 } /* Literal.String.Char */ .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ .s2 { color: #BA2121 } /* Literal.String.Double */ .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ .sh { color: #BA2121 } /* Literal.String.Heredoc */ .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ .sx { color: #008000 } /* Literal.String.Other */ .sr { color: #BB6688 } /* Literal.String.Regex */ .s1 { color: #BA2121 } /* Literal.String.Single */ .ss { color: #19177C } /* Literal.String.Symbol */ .bp { color: #008000 } /* Name.Builtin.Pseudo */ .vc { color: #19177C } /* Name.Variable.Class */ .vg { color: #19177C } /* Name.Variable.Global */ .vi { color: #19177C } /* Name.Variable.Instance */ .il { color: #666666 } /* Literal.Number.Integer.Long */ Dodane: 14.07.2008 przez riklaunim



Przeglądaj newsy
RSS - ostatnie wiadomości i artykuły
RSS - Co nowego?



Biblioteka Riklaunima. Hosting NRC-FOSS na AU-KBC. Serwis oparty o Django/Python.




_uacct = "UA-166391-3";
urchinTracker();




Wyszukiwarka

Podobne podstrony:
Dlaczego nie widać ilości pobrań pliku na chomikuj info
Wykłady od 1 do 29 Profesor Wolter Veith na serwerze Filesonic
100 sposobow na serwery Windows0ser
Java Programowanie, biblioteki open source i pomysly na nowe projekty
Jak założyć pocztę na własnym serwerze
PHP i MySQL Witryna WWW oparta na bazie danych Wydanie IV
Jak sporzadzic bibliografie na mature
Przejmowanie na własność pliku lub folderu w systemie Windows XP
100 sposobow na PHP0php
Metin2 Captcha na chińskich serwerach
praca dyplomowa serwer internetowy na linuxie

więcej podobnych podstron