Html отправка файла
Как создать форму обратной связи с возможностью загрузки и отправки файла на почту PHP
В этой статье вы узнаете, как создать форму обратной связи (мы будем получать email пользователя), которая предоставляет пользователю возможность прикрепить и отправить на сервер свой файл. Также в этой статье вы узнаете, как проверить тип и размер загруженного файла.
Html формы с полем отправки файла
Html формы с полем отправки файла представлен ниже. При клике по кнопке » browse » пользователь получает возможность выбрать файл на своей локальной машине.
Форма будет выглядеть следующим образом:
Обратите внимание, что в атрибутах формы мы указали enctype=»multipart/form-data» . Это скажет браузеру, что форма может быть использована для отправки файлов. Также мы добавили поля » name » и » email » с целью собрать как можно больше информации о пользователе. Затем идет поле отправки файла.
При клике по кнопке submit , данные, включая данные о посылаемом файле, отправятся в файл-обработчик, путь к которому мы указали в атрибуте формы action .
Получаем информацию о загруженном файле
Сперва мы проверим полученные данные, затем, в случае успешной проверки, отправим данные на электронную почту.
Всю информацию о загруженных файлах можно получить при помощи массива $_FILES .
Содержимое массива $_FILES для нашего примера приведено ниже. Обратите внимание, что значение атрибута name (у нас оно равно uploaded_file ) в поле выбора файла может быть любым.
- $_FILES[‘uploaded_file’][‘name’]
Оригинальное имя файла на компьютере пользователя. - $_FILES[‘uploaded_file’][‘type’]
Mime-тип файла, в случае, если браузер предоставил такую информацию. Пример: «image/gif». Этот mime-тип не проверяется в PHP, так что не полагайтесь на его значение без проверки. - $_FILES[‘uploaded_file’][‘size’]
Размер в байтах принятого файла. - $_FILES[‘uploaded_file’][‘tmp_name’]
Временное имя, с которым принятый файл был сохранен на сервере. - $_FILES[‘uploaded_file’][‘error’]
Код ошибки, которая может возникнуть при загрузке файла. Этот элемент был добавлен в PHP 4.2.0
Получаем имя, тип и размер загруженного файла:
Как видите, информация о загруженном файле доступна через массив $_FILES .
Проверяем размер и тип расширения загруженного файла
Предположим, что получаемый файл должен быть изображением (» jpg «, » jpeg «, » gif «, » bmp «) и не должен превышать 100 Kb. Тогда наш код будет выглядеть так:
В вышеприведенном коде мы проверяем размер и тип файла. Максимально допустимый размер файла равен 100 KB ( $max_allowed_file_size ). Массив $allowed_extensions содержит названия всех допустимых расширений файла. Таким образом, расширение файла проходит проверку на соответствие значениям массива $allowed_extensions . При обнаружении ошибок переменной $error присваивается соответствующая запись.
Копируем загруженный файл
Пришло время отправить загруженный файл на почту администратора.
Сперва мы должны скопировать файл в папку на сервере. (По окончанию работы скрипта, в случае, если принятый файл не был переименован или скопирован в новую папку, он будет автоматически удален из временной папки.)
Копируем загруженный файл в папку ‘ uploads ‘. Если вы хотите переименовать папку ( uploads ), обновите переменную $upload_folder .
Убедитесь, что папка ‘ uploads ‘ имеет права доступа 777. Файл сохранен на вашем сервере, и вы можете обратиться к нему в любой момент.
Отправляем письмо
Составим и отправим письмо на электронную почту администратора сайта (или кому хотите). Для отправки и компоновки письма будем использовать pear library (инструкцию по установке смотрите ниже). Pear классы PEAR::Mail и PEAR::Mail_Mime используются для отправки электронной почты с прикрепленными файлами.
Для начала мы должны подключить файлы pear library для этих классов:
Ниже приведен код компоновки и отправки письма:
Класс Mail_mime() поможет в создании MIME послания. В приведенном выше коде мы создали объект Mail_mime , обновили тело письма ( $message->setTXTBody($text); ) и добавили прикрепленный файл ( $message->addAttachment(file) ).
Прежде чем использовать классы PEAR необходимо установить PEAR на вашем сервере. Вот быстрый способ установить PEAR:
Скачайте инсталлятор PEAR
Сохраните файл как » pear-installer.php «. Загрузите этот файл на ваш сервер в любой каталог. Затем пропишите путь к файлу в вашем браузере:
http://www.yourdomain.com/pear-installer.php
Появится веб-интерфейс для установки PEAR на вашем сайте. Следуйте инструкции по установке. После установки Pear, найдите и установите пакеты » mail » и » mail_mime «.
Простая форма с загрузкой, скачать
Архив содержит простую форму с отправкой загруженного файла на почту.
Форма отправки файла с сайта
Недавно, вспомнил как я когда-то работал с компанией, которая занималась производством и продажей деревянных поддонов. Нам часто звонили, яндекс директ — успешно работал и принимая звонки нередко приходилось просить выслать чертеж с размерами на почту, хотя она и висела в правом верхнем углу, над кнопкой заказать звонок.
То есть, даже если оставляли заявку, менеджер связывался с клиентом и все равно в телефонном разговоре мы либо диктовали адрес электронной почты, для того чтобы нам выслали чертеж с параметрами поддона, либо просили людей зайти на сайт и на указанную почту отправить свое письмо. Это было не очень удобно, и сегодня я решил разобраться в том, как сделать такую форму, чтобы в нее можно было загрузить файл, например, простым перетягиванием или через проводник. В общем — все как обычно.
Согласитесь, в некоторых сферах бизнеса подобная форма загрузки файла через форму была бы очень актуальна. Может быть даже в вашем, просто вы не задумывались об этом). Давайте приступим.
Форма загрузки файла для сайта
Давайте начнем с того, что нужно сделать — это создать файл index.php, так как в противном случае наша форма не будет работать. Если у кого-то уже был создан index.htm — просто измените расширение. Ничего с вашим landing page не случится. Не паникуйте :). После этого, создадим самую обычную форму, с двумя полями.
— как раз и отвечает за возможность подключать файл через стандартный загрузчик.
Я реализую простейший вариант, но вы можете спокойно доработать форму и дополнить полями, которые необходимы именно вам. Например, имя пользователя, почта и т.д. Подробнее о том, как сделать такой обработчик можете почитать во второй части этой статьи.
Для того, чтобы задать приятный внешний вид полю с type=»file» — придется потанцевать с бубном. В сети существует много решений, но я выбрал с использованием javascript. Я нашел такой скрипт, который задает классы для текстового поля, кнопки «Выбрать» и общего контейнера для них.
Скачивайте исходник и найдете его в папке js. Не могу дать ссылку на исходник, так как нашел его на форуме. Он очень маленький — всего 3 кб в неоптимизированном виде. Давайте подключим его (Перед закрывающимся тегом ):
Для вызова плагина воспользуемся следующей конструкцией:
Его можно расположить сразу после подключения самого скрипта.
Давайте теперь разберем классы:
- Для управления полем в котором будет выводится имя загруженного файла теперь будем пользоваться .fileName
- Для управления кнопкой, при нажатии на которую открывается окно загрузки — .fileBtn
- Для управления областью, в которой находятся предыдущие 2 элемента воспользуемся .fileUpload
Для управления текстом внутри кнопки нужно открыть скрипт и в 8 строке изменить мой текст на свой 🙂 Там есть комментарий, поэтому, кто не знаком с javascript — смело открывайте и редактируйте. Даю слово, — вы разберетесь.
Это очень удобно и развязывает руки. Теперь мы можем полностью управлять элементами, которые нас интересуют. Я решил пойти нестандартным путем и создал такой вид:
Если интересно, можете посмотреть стили в исходнике. Статья не о таблицах стилей, поэтому давайте продолжим.
С отправкой файла на почту — не так все просто, как с данными, занесенными в поля формы. Для того, чтобы грамотно обработать файл воспользуемся дополнительным php скриптом. Его нужно скачать и положить рядом с формой. Можете даже не открывать 🙂
Называется он class.phpmailer.php. Готово. Теперь давайте разбираться дальше. Для того, чтобы данные отправлялись к нам на почту вставьте в файл с формой (куда-нибудь в футер) следующий код:
Думаю, основные моменты — понятны, так как она прокомментированы. Да, код не идеален. Можно дописать кучу проверок и т.п. Кто пожелает — милости прошу. Заодно, — поможете остальным.
Мне больше нравится front-end. поэтому я попробую разобраться и протестировать атрибут accept для поля input=»file». Он довольно интересен, и позволяет фильтровать файлы, которые можно загружать в форму, но к сожалению, работает не во всех браузерах. Так гласят форумы 🙂 Вот хочу протестировать самостоятельно и сделать свои выводы. Попробую на днях рассказать вам о своем эксперименте. А не сегодня — все. Надеюсь вам пригодится данная форма для отправки файлов. Пока!
Информационный центр
Статьи
Отправка файлов через форму
Перед начинающим программистом на PHP часто встает задача передать на сервер файл через форму. На сервере принятый файл обрабатывется, либо переносится в определенную папку, либо отправляется электронной почтой адресату, либо разбирается, и так далее и тому подобное.
В этой статье рассмотрим ситуацию с отправкой файла электронной почтой стандартной функцией mail().
Создадим простую форму.
И сразу небольшие пояснения. Если вы хотите отправить файл, то в форме необходимо установить аттрибут enctype в значение «multipart/form-data», в противном случае файлы отправляться не будут. Этот атрибут определяет метод кодирования данных и по умолчанию установлен в «application/x-www-form-urlencoded».
В нашем случае, отправка данных формы происходит методом post (что указано в форме: method=»post») с помощью тегов input разных типов. Тег input типа file — отправляет файл.
Тег input наверное самый распространенный тег формы, имеющий несколько типов. В нашей форме присутствует еще и тег input типа text, который принимает и передает текстовое значение. Кнопка «Отправить», это тоже тег input типа submit.
Конструкция , говорит о том, что в качестве обработчика формы выступает сам этот файл. Это же может быть записано еще и таким способом . В любом случае $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 сущности. Например, ‘&’ (амперсанд) преобразуется в ‘&’, ‘ if ( isset ($_FILES[‘userfile’])) <
$file_type = $_FILES[‘userfile’][‘type’];
$file_size = $_FILES[‘userfile’][‘size’];
$file_error = $_FILES[‘userfile’][‘error’];
$file_name_new = time().».zip»;
$file_name_new_full = $_SERVER[‘DOCUMENT_ROOT’].»/».$file_name_new;
if ($file_type == «application/x-zip-compressed») < copy ( $_FILES['userfile']['tmp_name'], $file_name_new_full ); >;
>
Сначала проверяется наличие принятого файла, а затем переменным присваиваем значения с данными файла, которые позже можно использовать для различных проверок. Мы проверим тип принятого файла. В нашем случае предполагается, что принимаемый файл должен являться zip архивом. Принятый файл (если он имеет тип zip) копируется с новым именем в корневую папку сайта. При обработке файла надо помнить, что временный файл будет автоматически удален после окончания работы скрипта, а скопированный файл после обработки надо будет удалить самостоятельно чтобы «не засорять» сервер.
Данные приняты. Теперь надо послать принятый файл по электронной почте.
Для отправки будем использовать стандартную php функцию mail(), которая имеет формат: mail(«кому»,»тема»,»тело письма», «заголовки»);
Подготовим данные. В качестве значения «кому» выступает правильный адрес электронной почты, например: » Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. «. Тема и тело письма — обычные текстовые данные, причем тема в виде простого текста, а тело письма может быть в виде текста html
$subject = «Вам отправлен файл»;
$body = «
Вам отправлен файл
Подготовим заголовки для письма.
Если бы нам не нужно было отправлять файл вложением к письму, то заголовки могли бы выглядеть так:
$header = «From: no-reply@».$_SERVER[‘HTTP_HOST’].»rnContent-Type: text/html; charset=’windows-1251’rnContent-Transfer-Encoding: 8bitrn»;
Здесь указываем от кого письмо (From: ), тип текста письма и его кодировка (Content-Type: text/html; charset=’windows-1251′) и количество бит для кодирования символов (Content-Transfer-Encoding: 8bit). Для кириллических кодировок (koi8-r, koi8-u, windows-1251, iso-8859-5, cp866) указание количества бит является крайне желательным, если вы не хотите получать знаки вопроса вместо текста. Код rn служит обозначение кодов «возврата каретки» и «переноса строки» (так обозначается конец строки в windows)
Хотите знать больше? Нажмите «Нравится»
Если письмо имеет вложение в виде файла, то подготовка заголовка усложняется, меняется и тело письма. Нам надо прочитать файл в переменную, преобразовать ее и подать в преобразованном виде с соблюдением разметки. Это будет выглядеть так:
$f = fopen($file_name_new_full,»rb»); // Открываем и читаем бинарно файл
$un = strtoupper(uniqid(time()));
$body = «————«.$un.»rnContent-Type: text/html; charset=’koi8-r’rnContent-Transfer-Encoding: 8bitrnrn». // Отбивается пустая строка .
«
Вам отправлен файл
Осталось только отправить письма и удалить принятый файл.
$sucess = mail(» Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. «, $subject, $body, $headers);
unlink ($file_name_new_full);
Функция mail() возвращает логическое значение true или false в зависимости от результата отправки письма.
Если Вам помогла эта статья, можете выразить свою благодарность поставив на нее ссылку.
Простейшая форма отправки данных на почту при помощи HTML и PHP
Одной из самых востребованных функций на сайте является форма заявки или заказа, данные из которой отправляются на почту владельцу сайта. Как правило такие формы являются простыми и состоят из двух трех полей для ввода данных. Как же создать такую форму заказа? Здесь потребуется использование языка разметки HTML и языка программирования PHP.
Язык разметки HTML сам по себе несложен, нужно всего лишь разобраться в том как и где ставить те или иные теги. С языком программирования PHP все немного сложнее.
Для программиста создать такую форму не составит труда, а вот HTML верстальщику может показаться сложным некоторые действия.
Создаем форму отправки данных в html
На этом этапе нужно создать файл form.php, в него добавить html код формы. Подробности о каждом элементе формы читайте в статье Как сделать форму в HTML для сайта.
Первая строка будет следующей
Теперь соберем все вместе.
Теперь сделаем так, чтобы поля в форме стали обязательными для заполнения. Имеем следующий код:
Создаем файл, принимающий данные из HTML формы
Это будет файл с именем send.php
В файле на первом этапе нужно принять данные из пост массива. Для этого создаем две переменные:
$fio = $_POST[‘fio’];
$email = $_POST[’email’];
Перед названиями переменных в php ставится знак $, в конце каждой строки ставиться точка с запятой. $_POST это массив в который передаются данный из формы. В форме html при этом указан метод отправки method=»post». Так, приняты две переменные из формы html. Для целей защиты своего сайта нужно провести эти переменные через несколько фильтров — функций php.
Первая функция преобразует все символы, которые пользователь попытается добавить в форму:
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
При этом новые переменные в php не создаются, а используются уже имеющиеся. Что сделает фильтр, он преобразует символ » $fio = urldecode($fio);
$email = urldecode($email);
Третей функцией мы удалим пробелы с начала и конца строки, если таковые имеются:
$fio = trim($fio);
$email = trim($email);
Существуют и другие функции, позволяющие отфильтровать переменные php. Их использование зависит от того , насколько вы опасаетесь того, что злоумышленник попытается добавить программный код в данную форму отправки данных на почту html.
Проверка данных, передаваемых от HTML формы в файл PHP
Для того, чтобы проверить, работает ли этот код, передаются ли данные можно просто их вывести на экран при помощи функции echo:
Вторая строка здесь нужна для того, чтобы разделить вывод переменных php на разные строки.
Отправляем полученные данные из формы HTML на почту при помощи PHP
Для отправки данных на почту нужно воспользоваться функцией mail в PHP.
mail(«на какой адрес отправить», «тема письма», «Сообщение (тело письма)»,»From: с какого email отправляется письмо rn»);
Например, нужно отправить данные на email владельца сайта или менеджера example@mail.ru.
Тема письма должна быть понятной, а сообщение письма должно содержать то, что указал пользователь в HTML форме.
mail(«example@mail.ru», «Заявка с сайта», «ФИО:».$fio.». E-mail: «.$email ,»From: example2@mail.ru rn»);
Необходимо добавить условие, которе проверит отправилась ли форма при помощи PHP на указанные адрес электронной почты.
if (mail(«example@mail.ru», «Заказ с сайта», «ФИО:».$fio.». E-mail: «.$email ,»From: example2@mail.ru rn»))
<
echo «сообщение успешно отправлено»;
> else <
echo «при отправке сообщения возникли ошибки»;
>
Таким образом программный код файла send.php, который отправит данные HTML формы на почту будет выглядеть следующим образом:
Три строки для проверки, передаются ли данные в файл закомментированы. При необходимости их можно удалить, так как они нужны были только для отладки.
Помещаем HTML и PHP код отправки формы в один файл
В комментариях к этой статье многие задают вопрос о том, как сделать, чтобы и HTML форма и PHP код отправки данных на почту находились в одном файле, а не двух.
Веб-дизайн и поисковая оптимизация
Создание формы обратной связи
• Создание формы обратной связи на сайте
• Проверка ввода формы обратной связи
• Простая форма обратной связи с проверкой введенных данных
• Создание анкеты на сайте
• Проверка формы обратной связи «на лету»
• Отправка файлов через форму обратной связи
• Капча в форме обратной связи
• Простая капча для формы обратной связи
• Заказ товаров и услуг через форму обратной связи
• Форма обратной связи — отправка писем на разные адреса
• Проблемы с кодировкой в форме обратной связи
• Создание кнопок в форме обратной связи
• Календарь в форме обратной связи
• Оформление формы обратной связи
>> смотреть все статьи о создании формы обратной связи
Отправка файлов через форму обратной связи
В предыдущих статьях были рассмотрены различные варианты формы обратной связи и проверка её заполнения посетителем сайта. Довольно часто, кроме простого сообщения от посетителя сайта, требуется переслать автору фотографию, документ, резюме и т.п. Форма обратной связи позволяет легко реализовать отправку любого файла с компьютера пользователя на ваш e-mail. Иногда можно встретить формулировку «Отправка аттача с сайта» от англ. Attach (Прикреплять).
Несмотря на удобство этой функции, следует иметь в виду, что благодарные посетители сайта могут прислать в прикрепленном файле не только фото любимой собачки, кошечки или свежекупленного автомобиля, но и всякую вирусную гадость или видео такого размера, что ваш почтовый ящик переполнится и «закроется на учет». Так сказать, «получи, фашист, гранату!».
Существует множество скриптов отправки файлов с сайта, в том числе и с проверкой отсылаемого содержимого. Найти подходящий не трудно, всё зависит от ваших задач и терпения в поиске по интернету.
В любом случае, начинаем с добавления в созданную нами форму обратной связи (см. статью «Создание формы обратной связи на сайте») строчку кода , которая как раз и отвечает за формирование строчки с кнопкой Обзор. При нажатии на неё открывается стандартное окно Windows для выбора файла. Кроме того, обязательно надо добавить в начале формы атрибут enctype=»multipart/form-data» тега
Как всегда, код этой формы вполне работоспособен и его можно (нужно) посмотреть и скопировать в браузере.
Далее необходимо подкорректировать РНР-страничку отправки сообщения из формы обратной связи с вложенным файлом на ваш электронный адрес. Как говорилось выше, вариантов обработки формы великое множество и изобретать велосипед нет никакой необходимости.
Оптимально, на мой взгляд, использовать готовый РНР-скрипт солидной фирмы, например, Worx International Inc. Одна из её разработок — популярный класс для работы с почтовым сервером class.phpmailer.php, который позволяет реализовать множество полезных функций, не занимаясь написанием собственных РНР-скриптов. Скачать эту прелесть можно бесплатно с сайта фирмы-разработчика. Так как сайт англоязычный и у некоторых читателей могут возникнуть трудности с загрузкой, я разместил его здесь. Скачиваете файл (размер 10 Кб), разархивируете и размещаете class.phpmailer.php на своем сайте в той же директории, где и страничка с формой обратной связи. Если вы хотите более подробно познакомиться с данной программой, рекомендую заглянуть на сайт www.php-mail.ru, особенно в гостевую книгу, а также на сайт От новичка до профессионала.
Теперь нам осталось только немного изменить РНР-страничку, отвечающую за отправку почты с вложенным файлом, добавив в неё class.phpmailer.php командой include «class.phpmailer.php»; и несколько строк для обработки пересылаемого файла.
Полный рабочий код страницы mail.php для отправки с сайта сообщений с прикрепленным файлом приведен ниже:
From = $_REQUEST[’email’];
$mail->FromName = $_REQUEST[‘name’];
$mail->AddAddress(‘ pupkin@rambler.ru ‘);
$mail->IsHTML(true);
$mail->Subject = $_POST[‘title’];
if(isset($_FILES[‘files’]))
<
if($_FILES[‘files’][‘error’] == 0)
<
$mail->AddAttachment($_FILES[‘files’][‘tmp_name’],$_FILES[‘files’][‘name’]);
>
>
$mail->Body = $message;
if (!$mail->Send()) die (‘Mailer Error: ‘.$mail->ErrorInfo);
<
echo ‘ Спасибо за отправку вашего сообщения
Нажмите, чтобы вернуться на главную страницу’;
>
if (!empty($_POST[‘submit’])) send_mail();
?>