Кожен початківець веб розробник стикався з проблемами при завантаженні файлу на сервер. Зараз я хочу створити невеликий скрипт для закачування на сервер. і на його прикладі випробувати всі найбільш часті проблеми, з якими стикається будь-який php програміст.
Наш тестовий файл буде такою:
Тепер подивимося що я тут написав:
Найперша перевірка - це перевірка на наявність завантаження. Якщо його немає, виводимо повідомлення на екран «Виберіть файл». Якщо файл обраний, то починаємо нашу завантаження.
Для початку, в тегах
я показую вміст масиву $ _FILES. Всі файли вибрані в input типу file, відправляються в цей масив. Щоб було зрозуміліше з чим ми працюємо, весь його вміст я виводжу на екран в отформатированном вигляді (print_r ($ _ FILES)). Тепер коли ми виберемо якийсь файл, і спробуємо його завантажити, ми побачимо щось подібне:Що означають елементи цього масиву, ми розглянемо пізніше. А зараз подивимося як проходить завантаження файлу на PHP.
Перед потраплянням файлу в масив $ _FILES. файл завантажується в тимчасову директорію на сервері (до речі, саме вона і показується в елементі tmp_name масиву $ _FILES). Потім за допомогою функції move_uploaded_file () цей файл копіюється з тимчасової директорії в зазначену другим параметром у функції (перший, як вже стало напевно зрозуміло - це шлях до файлу в тимчасовій директорії). Варто зазначити що шлях до директорії потрібно вказувати щодо кореня сервер. Для цього використовуємо елемент глобального масиву - $ _SERVER [ 'DOCUMENT_ROOT']. На цьому завантаження файлу закінчена. Я думаю тут нічого немає складного.
Тепер розглянемо що ж знаходиться в масиві $ _FILES.
В даний масив потрапляють всі файли вибрані в формі, попередньо завантажившись в тимчасову директорію. Ще туди відразу заноситься інформація про фото:
Тепер розглянемо часті помилки при завантаженні файлів на сервер на PHP.
В елементі масиву error може бути тільки 8 варіантів помилок (половина додана в 5 версії):
Так само часто новачки допускають такі помилки при завантаженні файлів на PHP:
- Не вказаний enctype = "multipart / form-data" у формі завантажувача
- Файлу завантажувачу не дані права на запис файлу. Для цього в будь-якому FTP менеджері, наприклад FileZilla вибрати файл завантажувач, натиснути правою кнопкою миші і вибрати пункт «Права доступу до файлу». Потім поставити галочки навпроти всіх пунктів «Запис».
- Звертаються не по тому імені фала, зазначеного в атрибуті форми - name.
Настійно рекомендую на етапі налагодження завантаження файлу постійно виводити вміст масиву $ _FILES наступним кодом:
Саме так я зробив у своєму прикладі щоб постійно контролювати вміст цього масиву.