Podręcznik użytkownika CodeIgniter wersja 2.2.1


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:

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.

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