Klasa przesyłania plików
Klasa przesyłania plików, pozwala - jak sama nazwa wskazuje - na przesyłanie plików na serwer. Możesz ustawić wiele preferencji, m.in. określać typ i rozmiar plików.
Proces
Przesyłanie plików obejmuje następujące procesy:
- Wyświetlany jest formularz uploadu, pozwalając użytkownikowi na wybór pliku do przesłania.
- Kiedy formularz zostaje wysłany, plik zostaje przesłany do lokalizacji, którą określiłeś.
- Po drodze, plik jest sprawdzany, aby przekonać się, czy może zostać przesłany i czy spełnia wszystkie warunki określone przez Ciebie w preferencjach.
- Po przesłaniu, użytkownik zobaczy wiadomość o powodzeniu.
Aby zademonstrować ten proces, poniżej znajdziesz krótki tutorial. Na końcu znajdziesz opis wszystkich dostępnych ustawień.
Tworzenie formularza upload
Korzystając z edytora tekstu utwórz plik upload_form.php. Umieść w nim poniższy kod i zapisz w folderze applications/views/:
Zauważ, że używamy helpera Form, aby utworzyć tag otwarcia formularza. Przesyłanie plików wymaga typu multipart, więc helper tworzy odpowiednią składnię za Ciebie. Zwróć również uwagę, że mamy zmienną $error. Istnieje ona po to, abyśmy mogli pokazać wiadomości o błędzie w przypadku kiedy użytkownik wykona coś błędnie.
Strona sukcesu
Korzystając z edytora tekstu utwórz plik upload_success.php. Umieść w nim poniższy kod i zapisz w folderze applications/views/:
Kontroler
Korzystając z edytora tekstu utwórz plik upload.php. Umieść w nim poniższy kod i zapisz w folderze applications/controllers/:
Folder do przesyłania plików
Potrzebny będzie docelowy folder do przesyłania zdjęć. Utwórz ten folder w głównym katalogu, w którym znajduje się instalacja CodeIgnitera, i nazwij go uploads, a następnie ustaw jego prawa dostępu na 777.
Czas to wypróbować!
Aby wypróbować swój formularz, odwiedz stronę za pomocą adresu URL podobnego do tego:
example.com/index.php/upload/
Powinieneś zobaczyć formularz do przesyłania plików. Sprobuj przesłać plik graficzny (jpg, gif lub png). Jeśli ścieżki w Twoim kontrolerze są poprawne, to wszystko powinno działać prawidłowo.
Instrukcja
Inicjalizowanie klasy Upload
Tak jak większość innych klas w CodeIgniterze, klasa Upload jest inicjalizowana w Twoim kontrolerze poprzez funkcję $this->load->library:
$this->load->library('upload');
Po załadowaniu, obiekt klasy Upload będzie dostępny poprzez wywołanie: $this->upload
Ustawianie preferencji
Podobnie jak w innych bibliotekach, będziesz kontrolował to, co może być przesyłane na podstawie własnych preferencji. W kontrolerze, który utworzyleś powyżej ustawione są następujące preferencje:
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
// Alternatywnie, możesz ustawić preferencje poprzez wywołanie funkcji initialize. Jest to przydatne, kiedy automatycznie ładujesz tę klasę:
$this->upload->initialize($config);
Powyższe preferencje powinny być dość oczywiste. Poniżej w tabeli przedstawione są wszystkie dostępne preferencje.
Preferencje
Dostępne są następujące preferencje. Domyślne wartości określają jaka wartość zostanie użyta, jeśli nie ustawisz jej samodzielnie.
Preferencja | Domyślna wartość | Opcje | Opis |
---|---|---|---|
upload_path | Brak | Brak | Ścieżka do folderu w którym mają się znajdować przesłane pliki. Folder musi mieć prawa do zapisu, a ścieżka może być absolutna lub relatywna. |
allowed_types | Brak | Brak | Typ mime odnoszący się do typów plików jakie mogą być przesyłane. Zazwyczaj rozszerzenie pliku może zostać użyte jako typ mime. Wiele typów oddzielamy od siebie za pomocą pionowej kreski. |
file_name | Brak | Pożądana nazwa pliku |
Jeśli ustawisz tą preferencję, CodeIgniter zmieni nazwę pliku na tą wartość. Rozszerzenie dla nowej nazwy pliku, musi również być jednym z dozwolonych typów plików. |
overwrite | FALSE | TRUE/FALSE (boolean) | Ustawienie na wartość true sprawia, że pliki o tej samej nazwie są nadpisywane. Jeśli wartość jest ustawiona na false, to do nowego pliku o tej samej nazwie dołączany jest odpowiedni numer. |
max_size | 0 | Brak | Maksymalny rozmiar pliku (w kilobajtach). Ustaw na zero dla zniesienia limitów. Uwaga: większość instalacji PHP ma swoje własne limity, które są określane w pliku php.ini. Zazwyczaj 2 MB (lub 2048 KB) domyślnie. |
max_width | 0 | Brak | Maksymalna szerokość dla pliku (w pikselach). Ustaw na zero dla zniesienia limitów. |
max_height | 0 | Brak | Maksymalna wysokość dla pliku (w pikselach). Ustaw na zero dla zniesienia limitów. |
max_filename | 0 | Brak | Maksymalna długość nazwy pliku. Ustaw na zero dla zniesienia limitów. |
encrypt_name | FALSE | TRUE/FALSE (boolean) | Ustawienie na wartość TRUE, zmienia nazwę pliku na losowy zaszyfrowany ciąg. Może być przydatne, kiedy chcesz aby plik został zachowany pod nazwą, którą trudno będzie zgadnąć osobie która go wgrała. |
remove_spaces | TRUE | TRUE/FALSE (boolean) | Ustawienie na TRUE sprawia, że wszystkie wystąpienia spacji w nazwie pliku zostaną zastąpione podreśleniami. To ustawienie jest zalecane. |
Ustawianie preferencji w pliku konfiguracyjnym
Jeśli nie chcesz ustawiać preferencji za pomocą powyższej metody, możesz umieścić je w pliku konfiguracyjnym. Po prostu utwórz nowy plik o nazwie upload.php z tablicą $config w środku i zapisz go w config/upload.php, a zostanie on użyty automatycznie. Jeśli zapiszesz swoje preferencje w pliku konfiguracyjnym, nie będziesz musiał korzystać z funkcji $this->upload->initialize.
Dostępne funkcje
Dostępne są następujące funkcje
$this->upload->do_upload()
Dokonuje przesyłania na podstawie preferencji jakie określiłeś. Uwaga: Domyślnie procedura wysyłania oczekuje, że nazwa pola z formularza będzie nosiła nazwę userfile. Formularz musi być typu multipart:
<form method="post" action="some_action" enctype="multipart/form-data" />
Jeśli chcesz ustawić swoją własną nazwę pola formularza, po prostu przypisz ją do funkcji do_upload:
$field_name = "some_field_name";
$this->upload->do_upload($field_name)
$this->upload->display_errors()
Zwraca wiadomość błędu, jeśli funkcja do_upload() zwróci warrtość false. Funkcja nie wyświetla danych automatycznie, zwraca je abyś mógł je przypisać w sposób jaki chcesz.
Formatowanie błędów
Domyślnie, powyższa funkcja otacza każdy błąd tagami <p>. Możesz sam ustalić tagi, które mają otaczać wiadomość błędu:
$this->upload->display_errors('<p>', '</p>');
$this->upload->data()
To jest funkcja pomocnicza, która zwraca tablicę zawierającą wszystkie dane powiązane z plikiem, który został przesłany. Oto prototyp tablicy:
Array
(
[file_name] => mypic.jpg
[file_type] => image/jpeg
[file_path] => /path/to/your/upload/
[full_path] => /path/to/your/upload/jpg.jpg
[raw_name] => mypic
[orig_name] => mypic.jpg
[client_name] => mypic.jpg
[file_ext] => .jpg
[file_size] => 22.2
[is_image] => 1
[image_width] => 800
[image_height] => 600
[image_type] => jpeg
[image_size_str] => width="800" height="200"
)
Wyjaśnienie
Oto wyjaśnienie powyższych wartości tablicy.
Pozycja | Opis |
---|---|
file_name | Nazwa przesyłoanego pliku razem z rozszerzeniem. |
file_type | Typ Mime pliku |
file_path | Absolutna ścieżka serwerowa do pliku |
full_path | The absolute server path including the file name |
raw_name | Nazwa pliku bez rozszerzenia |
orig_name | Oryginalna nazwa pliku. Przydatne tylko jeśli używasz opcji szyfrowania nazwy. |
client_name | Nazwa pliku przesłana przez użytkownika, przed przygotowaniem nazwy lub dodaniem ewentualnych liczb. |
file_ext | Rozszerzenie pliku razem z kropką |
file_size | Rozmiar pliku w kilobajtach |
is_image | Czy plik jest plikiem graficznym. 1 = tak. 0 = nie. |
image_width | Szerokość pliku graficznego. |
image_height | Wysokość pliku graficznego |
image_type | Typ pliku graficznego. Zazwyczaj nazwa rozszerzenia bez kropki. |
image_size_str | Ciąg zawierający szerokość i wysokość pliku graficznego. Przydatne do zastosowania w tagach html. |