RkBlog

Hardware, programming and astronomy tutorials and reviews.

Ładowanie Plików

Ładowaniem plików poprzez formularz w CI zajmuje się biblioteka upload. Oprócz samej możliwości przesłania pliku na serwer oferuje wiele pomocnych udogodnień.

- Utwórz w głównym katalogu CI katalog uploads i (jeżeli to linux/unix) nadaj uprawnienia zapisu na ten katalog (chmod 777 lub 666)
- Stwórz widok upload.php:
<html>
<head>
<title>Ładowanie Plików</title>
</head>
<body>
<?=$error;?>
<?=form_open_multipart('upload/do_upload'); ?>
<input type="file" name="userfile" size="20" />
<br />
<input type="submit" value="upload" />
</form>
</body>
</html>
Mamy zwykły formularz, z tym że form_open_multipart dodaje do taga FORM atrybut enctype="multipart/form-data" umożliwiający wyłasnie pliku poprzez formularz.
- Utwórz Kontroler upload.php:
<?php

class Upload extends Controller
{
function Upload()
    {
    parent::Controller();
    }
function index()
    {
    $this->load->view('upload', array('error' => '')); 
    }
function do_upload()
    {
    // załadowanie biblioteki
    $this->load->library('upload');
    // konfiguracja
    $config['upload_path'] = 'uploads/'; 
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size']    = '100';
    $config['max_width']  = '1024';
    $config['max_height']  = '768';
    // przypisanie konfiguracji
    $this->upload->initialize($config);
    // jeżeli ładowanie się nie powiodło
    if ( ! $this->upload->do_upload())
        {
        $error = array('error' => $this->upload->display_errors());
        $this->load->view('upload', $error);
        }
    else
        {
        // ładowanie pomyślne, wyświetlamy dostępne dane
        echo '<pre>';
        print_R($this->upload->data());
        }
    }
}
- Pod URLem /index.php/upload pojawi się formularz. Możemy spróbować przesłać jakiś plik. W powyższym przykładzie tylko grafiki (gif,jpg,png) o rozmiarze mniejszym od 100 KB zostaną zaakceptowane.

Konfiguracja Klasy Upload

W powyższym przykładzie tablica $config zawiera ustawienia jaki później wykorzystuje klasa ładująca. Oto opis opcji jakie można ustawiać:
- upload_path: ścieżka do katalogu na załadowany plik. Względna lub bezwzględna (pełna)
- allowed_types: nazwy rozszerzeń (typy mime) plików jakie można ładować. oddzielone |
- overwrite: Domyślnie False. Jeżeli ustawione na True załadowanie pliku o tej samej nazwie nadpisze istniejący. False spowoduje dodanie numeru porządkowego do nazwy pliku (zapisanie pod inną nazwą)
- max_size: maksymalny w KB rozmiar pliku, ustawienie "0" oznacza brak limitu. Dodatkowo PHP ma swój własny limit ustawiony w php.ini i domyślnie wynosi 2MB.
- max_width, max_height: maksymalna długość i wysokość w przypadku grafik. "0" oznacza brak limitu
- encrypt_name: ustawienie na True spowoduje zapisywanie plików pod nazwami składającymi się z losowych łańcuchów (hasze). Dobre gdy nazwy plików zawierają polskie znaki i inne dziwności.
- remove_spaces: jeżeli ustawione na True usunie spacje z nazwy pliku

Metody Klasy

$this->upload->do_upload()
Ładuje plik. Spodziewa się go w wysłanym formularzu w polu o nazwie "userfile". Zwraca False przy niepowodzeniu i True w przypadku udanej operacji ładowania pliku.

$this->upload->display_errors()
Zwraca błędy ładowania.

$this->upload->data()
Zwraca dane o załadowanym pliku w postaci tablicy, przykład:
Array
(
    [file_name] => av3.png
    [file_type] => image/png
    [file_path] => /opt/lampp/htdocs/html/ci/uploads/
    [full_path] => /opt/lampp/htdocs/html/ci/uploads/av3.png
    [raw_name] => av3
    [orig_name] => av.png
    [file_ext] => .png
    [file_size] => 5.72
    [is_image] => 1
    [image_width] => 69
    [image_height] => 72
    [image_type] => png
    [image_size_str] => width="69" height="72"
)
- file_name: nazwa pliku z jaką został zapisany na serwerze
- file_type: typ mime pliku
- file_path: bezwzględna ścieżka do katalogu z plikiem
- full_path: jak wyżej z tym że zawiera również nazwę pliku
- raw_name: nazwa pliku bez rozszerzenia
- orig_name: oryginalna nazwa pliku
- file_ext: rozszerzenie pliku
- file_size: rozmiar pliku w KB
- is_image: 1 - grafika, 0 - nie-grafika
- image_width, image_height: długość i wysokość grafiki
- image_type: typ grafiki
- image_size_str: rozmiary grafiki dla tagów img i podobnych
RkBlog

Kurs Code Igniter, 14 July 2008, Piotr Maliński

Comment article