Відправка файлів через форму - веб-студія андрея москалюкова

Рейтинг: 0/5

У цій статті розглянемо ситуацію з відправкою файлу електронною поштою стандартною функцією mail ().

Створимо просту форму.


Ім'я відправника:

Прикріпити файл:


І відразу невеликі пояснення. Якщо ви хочете відправити файл, то в формі необхідно встановити атрибут enctype в значення "multipart / form-data". в іншому випадку файли відправлятися не будуть. Цей атрибут визначає метод кодування даних і за замовчуванням встановлений в "application / x-www-form-urlencoded".

У нашому випадку, відправка даних форми відбувається методом post (що зазначено в формі: method = "post") за допомогою тегів input різних типів. Тег input типу file - відправляє файл.

Тег input напевно найпоширеніший тег форми, що має кілька типів. В нашій формі присутній ще і тег input типу text. який приймає і передає текстове значення. Кнопка "Відправити", це теж тег input типу submit.

конструкція . говорить про те, що в якості обробника форми виступає сам цей файл. Це ж може бути записано ще й таким способом /articles/vidpravka-fajliv-cherez-formu-veb-studija-andreja.html. У будь-якому випадку $ php_self і $ SERVER [ 'PHP_SELF'] - суперглобальні змінні, введення яких необхідно перевіряти. Тому рекомендую використовувати кілька змінену конструкцію . в якій введення php_self проходить через функцію htmlspecialchars ().

Повернемося до форми. Як відправити файл через форму ми вже знаємо, тепер подивимося як файл прийняти і обробити на стороні сервера.

Текстові значення форми тегів input типу text. password. hidden. radio. а також тегів textarea і select приймаються на сервері через суперглобальні масиви $ _POST або $ _GET (в залежності від вказівок містяться в формі) виразом типу

$ Username = htmlspecialchars (stripslashes ($ _ POST [ 'username']), ENT_QUOTES).

У цьому виразі присутні фунции php htmlspecialchars і stripslashes. Перша перетворює спеціальні символи в HTML суті. Наприклад, '' (амперсанд) перетворюється в '-', '<' (знак "меньше чем") преобразуется в '<'. Вторая удаляет экранирующие бэкслэши. (\' преобразуется в ', и т.д.).

Якщо прийом текстових значень особливої ​​складності не викликає, то прийом файлу відбувається дещо складніше через суперглобальний масив $ _FILES. Цей масив дає доступ до безлічі даних про прийняте файлі:

$ _FILES [ 'fileup'] [ 'name'] - ім'я переданого файлу
$ _FILES [ 'fileup'] [ 'tmp_name'] - тимчасове ім'я файлу на сервері
$ _FILES [ 'fileup'] [ 'type'] - тип прийнятого файлу
$ _FILES [ 'fileup'] [ 'size'] - розмір файлу в байтах
$ _FILES [ 'fileup'] [ 'error'] - код помилки

Прийняти файл на стороні сервера можна наприклад так:

Спочатку перевіряється наявність прийнятого файлу, а потім змінним присвоюємо значення з даними файлу, які пізніше можна використовувати для різних перевірок. Ми перевіримо тип прийнятого файлу. У нашому випадку передбачається, що прийнятий файл повинен бути zip архівом. Прийнятий файл (якщо він має тип zip) копіюється з новим ім'ям в кореневу папку сайту. При обробці файлу треба пам'ятати, що тимчасовий файл буде автоматично видалений після закінчення роботи скрипта, а скопійований файл після обробки треба буде видалити самостійно щоб "не засмічувати" сервер.

Дані прийняті. Тепер треба послати прийнятий файл по електронній пошті.

Для відправки будемо використовувати стандартну php функцію mail (). яка має формат: mail ( "кому", "тема", "тіло листи", "заголовки");

Підготуємо заголовки для письма.

Якби нам не потрібно було відправляти файл вкладенням до листа, то заголовки могли б виглядати так:

$ Header = "From: no-reply @". $ _ SERVER [ 'HTTP_HOST']. "\ R \ nContent-Type: text / html; charset = 'windows-1251' \ r \ nContent-Transfer-Encoding: 8bit \ r \ n ";

Тут вказуємо від кого лист (From.), Тип тексту листа і його кодування (Content-Type: text / html; charset = 'windows-1251') і кількість біт для кодування символів (Content-Transfer-Encoding: 8bit). Для кириличних кодувань (koi8-r, koi8-u, windows-1251, iso-8859-5, cp866) зазначення кількості біт є вкрай бажаним, якщо ви не хочете отримувати знаки питання замість тексту. Код \ r \ n служить позначення кодів "повернення каретки" і "розриву рядків" (так позначається кінець рядка в windows)

Хочете знати більше? Натисніть "Подобається"

Якщо лист має вкладення у вигляді файлу, то підготовка заголовка ускладнюється, змінюється і тіло листа. Нам треба прочитати файл в змінну, перетворити її і подати в перетвореному вигляді з дотриманням розмітки. Це буде виглядати так:

Залишилося тільки відправити листа і видалити прийнятий файл.

Функція mail () повертає логічне значення true або false залежно від результату відправлення листа.