Ł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:
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.
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
$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