Завантаження файлу на сервер

Взаємодія з сервером.

Функція 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; просмотров: 1432;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.016 сек.