Завантаження файлу на сервер
Взаємодія з сервером.
Функція file_exists
Синтаксис:
bool file_exists (ім'я файлу або директорії)
Функція file_exist() перевіряє, чи існує файл або директорія, ім'я якої передане їй як аргумент. Якщо директорія або файл у файловій системі сервера існує, то функція повертає TRUE, інакше – FALSE. Результат роботи цієї функції кешується. Відповідно очистити кеш можна, як вже наголошувалося, за допомогою функції clearstatcache(). Для нелокальних файлів використовувати функцію file_exists() не можна.
<?php
$filename = 'c:/users/files/my_file.html';
if (file_exists($filename)) {
print "Файл <b>$filename</b> існує";}
else {
print "Файл <b>$filename</b> НЕ існує";}
?>
Функція is_writable
Якщо окрім перевірки існування файлу потрібно взнати ще, чи дозволено записувати інформацію в цей файл, слід використовувати функцію is_writable() або її псевдонім – функцію is_writeable().
Синтаксис:
bool is_writable (ім'я файлу або директорії)
Ця функція повертає TRUE, якщо файл (або директорія) існує і доступний для запису. Доступ до файлу здійснюється під тим обліковим записом користувача, під яким працює сервер (найчастіше це користувач nobody або www). Результати роботи функції is_writable кешується.
Функція is_readable
Якщо окрім перевірки існування файлу потрібно взнати ще, чи дозволено читати інформацію з нього, потрібно використовувати функцію is_readable().
Синтаксис:
bool is_readable (ім'я файлу)
Ця функція працює подібно до функції is_writable().
<?php
$filename = 'c:/users/files/my_file.html';
if (is_readable($filename)) {
print "Файл <b>$filename</b> існує і доступний для читання";}
else {
print "Файл <b>$filename</b> НЕ існує або НЕ доступний для читання";}
?>
Видалення файлу
Для того, щоб видалити файл за допомогою мови PHP, потрібно скористатися функцією unlink(). Синтаксис цієї функції можна описати таким чином:
bool unlink (ім’я_файла)
Дана функція видаляє файл, що має ім'я ім’я_файла, повертає TRUE в разі успіху цієї операції і FALSE – в разі помилки. Аби видалити файл, потрібно теж мати відповідні права доступу до нього (наприклад, доступу лише на читання для видалення файлу недостатньо).
<?php
$filename = 'c:/users/files/my_file.html';
unlink($filename);
// видаляємо файл з ім'ям
// c:/users/files/my_file.html
?>
Завантаження файлу на сервер
Тепер вирішимо складніше і часто виникаюче на практиці завдання завантаження файлу на сервер. Перше, що потрібно зробити, аби завантажити файл на сервер, це створити html-форму. Для того, щоб за допомогою цієї форми можна було завантажувати файли, вона повинна містити атрибут enctype в тегу form із значенням multipart/form-data, а також елемент input типу file.
Відмітимо, що ми додали у формі приховане поле, яке містить в собі максимальний допустимий розмір завантажуваного файлу в байтах. При спробі завантажити файл, розмір якого більше вказаного в цьому полі значення, буде зафіксована помилка.
Тепер потрібно написати скрипт, який оброблятиме отриманий файл.
Вся інформація про завантажений на сервер файл міститься в глобальному масиві $_FILES. Цей масив з'явився починаючи з PHP 4.1.0. Якщо включена директива register_globals, то значення переданих змінних доступні просто по їх іменах.
Якщо ми завантажили з комп'ютера-клієнта файл з ім'ям critics.htm розміром 15136 байт, то скрипт з єдиною командою print_r($_FILES); виведе на екран наступне:
Array ( [myfile] =>
Array ( [name] => critics.htm
[type] => text/html
[tmp_name] => C:\WINDOWS\TEMP\php49F.tmp
[error] => 0
[size] => 15136
)
)
Взагалі кажучи, масив $_FILES завжди має наступні елементи:
$_FILES['myfile']['name'] – ім'я, яке мав файл на машині клієнта.
$_FILES['myfile']['type'] – mime-тип відправленого файлу, якщо браузер надав цю інформацію. У нашому прикладі це text/html.
$_FILES['myfile']['size'] – розмір завантаженого файлу в байтах.
$_FILES['myfile']['tmp_name'] – тимчасове ім'я файлу, під яким він був збережений на сервері.
$_FILES['myfile']['error'] – код помилки, що з'явилася при завантаженні. Тут 'myfile' – це ім'я елементу форми, за допомогою якого було проведено завантаження файлу на сервер. Тобто воно може бути іншим, якщо елемент форми назвати інакше. Але інші ключі (name, type і т. д.) залишаються незмінними для будь-якої форми.
Якщо register_globals=On, то доступні також додаткові змінні, такі як $myfile_name, яка еквівалентна $_FILES['myfile']['name'], і тому подібне
Помилок при завантаженні в PHP виділяють п'ять типів і відповідно
$_FILES['myfile']['error'] може мати п'ять значень:
- 0 – помилки не сталося, файл завантажений успішно
- 1 – завантажуваний файл перевищує розмір, встановлений директивою upload_max_filesize у файлі налаштувань php.ini
- 2 – завантажуваний файл перевищує розмір, встановлений елементом MAX_FILE_SIZE форми html
- 3 – файл був завантажений частково
- 4 – файл завантажений не був
За умовчанням завантажені файли зберігаються в тимчасовій директорії сервера, якщо інша директорія не вказана за допомогою опції upload_tmp_dir у файлі налаштувань php.ini. Перемістити завантажений файл в потрібну директорію можна за допомогою функції move_uploaded_file().
Функція move_uploaded_file() має наступний синтаксис:
bool move_uploaded_file (временное_имя_файла, место_назначения )
Ця функція перевіряє, чи дійсно файл, позначений рядком временное_имя_файла, був завантажений через механізм завантаження HTTP методом POST. Якщо це так, то файл переміщається у файл, заданий параметром место_назначения (цей параметр містить як дорогу до нової директорії для зберігання, так і нове ім'я файлу).
Якщо тимчасове ім’я_файла задає неправильний завантажений файл, то жодних дій проведено не буде, і move_uploaded_file() поверне FALSE. Те ж саме станеться, якщо файл по якихось причинах не може бути переміщений. В цьому випадку інтерпретатор виведе відповідне попередження. Якщо файл, заданий параметром место_назначения, існує, то функція move_uploaded_file() перезапише його.
<?
/* У версіях PHP, раніших, ніж 4.1.0, замість масиву
$_FILES потрібно використовувати масив $HTTP_POST_FILES */
$uploaddir = 'c:/uploads/';
// зберігатимемо завантажувані
// файли в цю директорію
$destination = $uploaddir .
$_FILES['myfile']['name'];
// ім'я файлу залишимо незмінним
print "<pre>";
if (move_uploaded_file(
$_FILES['myfile']['tmp_name']
$destination)) {
/* переміщаємо файл з тимчасової теки у вибрану директорію для
зберігання */
print "Файл успішно завантажений <br>";
} else {
echo "Сталася помилка при завантаженні файлу.
Деяка налагоджувальна інформація:<br>";
print_r($_FILES);
} print "</pre>"; ?>
<== предыдущая лекция | | | следующая лекция ==> |
Запис даних у файл Функція fwrite | | | Створення і використання сесійних змінних |
Дата добавления: 2016-04-02; просмотров: 1490;