Html формы с полем отправки файла на Email

Html формы с полем отправки файла представлен ниже. При клике по кнопке »

browse

» пользователь получает возможность выбрать файл на своей локальной машине.

HTML


<span class="hljs-tag">&lt;<span class="hljs-title">form</span> <span class="hljs-attribute">method</span>=<span class="hljs-value">"POST"</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"email_form_with_php"</span>
     <span class="hljs-attribute">action</span>=<span class="hljs-value">"php-form-action.php"</span> <span class="hljs-attribute">enctype</span>=<span class="hljs-value">"multipart/form-data"</span>&gt;</span>

  <span class="hljs-tag">&lt;<span class="hljs-title">label</span> <span class="hljs-attribute">for</span>=<span class="hljs-value">'name'</span>&gt;</span>Имя: <span class="hljs-tag">&lt;/<span class="hljs-title">label</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-title">input</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"text"</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"name"</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"name"</span> &gt;</span>

  <span class="hljs-tag">&lt;<span class="hljs-title">label</span> <span class="hljs-attribute">for</span>=<span class="hljs-value">'email'</span>&gt;</span>Email: <span class="hljs-tag">&lt;/<span class="hljs-title">label</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-title">input</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"text"</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"email"</span>  <span class="hljs-attribute">id</span>=<span class="hljs-value">"email"</span> &gt;</span>
 
  <span class="hljs-tag">&lt;<span class="hljs-title">label</span> <span class="hljs-attribute">for</span>=<span class="hljs-value">'message'</span>&gt;</span>Message:<span class="hljs-tag">&lt;/<span class="hljs-title">label</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-title">textarea</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"message"</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"message"</span> &gt;</span><span class="hljs-tag">&lt;/<span class="hljs-title">textarea</span>&gt;</span>

  <span class="hljs-tag">&lt;<span class="hljs-title">label</span> <span class="hljs-attribute">for</span>=<span class="hljs-value">'uploaded_file'</span>&gt;</span>Выберите файл для загрузки :<span class="hljs-tag">&lt;/<span class="hljs-title">label</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-title">input</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"file"</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"uploaded_file"</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"uploaded_file"</span> &gt;</span>
 
  <span class="hljs-tag">&lt;<span class="hljs-title">input</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"submit"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"Submit"</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">'submit'</span>&gt;</span>

<span class="hljs-tag">&lt;/<span class="hljs-title">form</span>&gt;</span>

Форма будет выглядеть следующим образом:

Обратите внимание, что в атрибутах формы мы указали

enctype="multipart/form-data"

. Это скажет браузеру, что форма может быть использована для отправки файлов. Также мы добавили поля »

name

» и »

email

» с целью собрать как можно больше информации о пользователе. Затем идет поле отправки файла.

HTML


&lt;label <span class="hljs-keyword">for</span>=<span class="hljs-string">'uploaded_file'</span>&gt;Выберите файл для загрузки <span class="hljs-symbol">:&lt;/label&gt;</span>

При клике по кнопке

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

Получаем имя, тип и размер загруженного файла:

PHP


   <span class="hljs-comment">//Получаем последний компонеет имени загруженного файла</span>
<span class="hljs-variable">$name_of_uploaded_file</span> =
    basename(<span class="hljs-variable">$_FILES</span>[<span class="hljs-string">'uploaded_file'</span>][<span class="hljs-string">'name'</span>]);
    <span class="hljs-comment">// например, index.php</span>
   
<span class="hljs-comment">//получаем расширение файла (без точки)</span>
<span class="hljs-variable">$type_of_uploaded_file</span> =
     substr(<span class="hljs-variable">$name_of_uploaded_file</span>,
   <span class="hljs-comment">// позиция вхождения точки + 1</span>
    strrpos(<span class="hljs-variable">$name_of_uploaded_file</span>, <span class="hljs-string">'.'</span>) + <span class="hljs-number">1</span>);
<span class="hljs-variable">$size_of_uploaded_file</span> =
    <span class="hljs-variable">$_FILES</span>[<span class="hljs-string">"uploaded_file"</span>][<span class="hljs-string">"size"</span>]/<span class="hljs-number">1024</span>;
    <span class="hljs-comment">//размер в KBs </span>

Как видите, информация о загруженном файле доступна через массив

$_FILES

.

Проверяем размер и тип расширения загруженного файла

Предположим, что получаемый файл должен быть изображением (»

jpg

«, »

jpeg

«, »

gif

«, »

bmp

«) и не должен превышать 100 Kb. Тогда наш код будет выглядеть так:

PHP


<span class="hljs-comment">//Настройки</span>
<span class="hljs-variable">$max_allowed_file_size</span> = <span class="hljs-number">100</span>; <span class="hljs-comment">// размер в  KB</span>
<span class="hljs-variable">$allowed_extensions</span> = <span class="hljs-keyword">array</span>(<span class="hljs-string">"jpg"</span>, <span class="hljs-string">"jpeg"</span>, <span class="hljs-string">"gif"</span>, <span class="hljs-string">"bmp"</span>);
<span class="hljs-comment">//Проверки</span>
<span class="hljs-keyword">if</span>(<span class="hljs-variable">$size_of_uploaded_file</span> &gt; <span class="hljs-variable">$max_allowed_file_size</span> )
{
<span class="hljs-variable">$errors</span> .= <span class="hljs-string">"\n Размер файла должен быть меньше $max_allowed_file_size"</span>;
}
<span class="hljs-comment">//------ Проверяем расширение файла -----</span>
<span class="hljs-variable">$allowed_ext</span> = <span class="hljs-keyword">false</span>;
<span class="hljs-keyword">for</span>(<span class="hljs-variable">$i</span>=<span class="hljs-number">0</span>; <span class="hljs-variable">$i</span>&lt;sizeof(<span class="hljs-variable">$allowed_extensions</span>); <span class="hljs-variable">$i</span>++)
{
<span class="hljs-comment">// сравниваем строки, если = 0, то строки идентичны (без учета регистра)</span>
  <span class="hljs-keyword">if</span>(strcasecmp(<span class="hljs-variable">$allowed_extensions</span>[<span class="hljs-variable">$i</span>],<span class="hljs-variable">$type_of_uploaded_file</span>) == <span class="hljs-number">0</span>)
  {
    <span class="hljs-variable">$allowed_ext</span> = <span class="hljs-keyword">true</span>;
  }
}
<span class="hljs-keyword">if</span>(!<span class="hljs-variable">$allowed_ext</span>)
{
<span class="hljs-variable">$errors</span> .= <span class="hljs-string">"\n Расширение файла не соответствует требуемому. "</span>.
<span class="hljs-string">"Поддерживаются следующие расширения: "</span>.implode(<span class="hljs-string">','</span>,<span class="hljs-variable">$allowed_extensions</span>);
}

В вышеприведенном коде мы проверяем размер и тип файла. Максимально допустимый размер файла равен 100 KB (

$max_allowed_file_size

). Массив

$allowed_extensions

содержит названия всех допустимых расширений файла. Таким образом, расширение файла проходит проверку на соответствие значениям массива

$allowed_extensions

. При обнаружении ошибок переменной

$error

присваивается соответствующая запись.

Копируем загруженный файл

Пришло время отправить загруженный файл на почту администратора.

PHP


<span class="hljs-comment">//копируем  временный файл в папку  uploads </span>

<span class="hljs-variable">$path_of_uploaded_file</span> = <span class="hljs-variable">$upload_folder</span> . <span class="hljs-variable">$name_of_uploaded_file</span>;


<span class="hljs-variable">$tmp_path</span> = <span class="hljs-variable">$_FILES</span>[<span class="hljs-string">"uploaded_file"</span>][<span class="hljs-string">"tmp_name"</span>];


<span class="hljs-comment">// был ли загружен файл при помощи HTTP POST</span>
<span class="hljs-keyword">if</span>(is_uploaded_file(<span class="hljs-variable">$tmp_path</span>))
{
<span class="hljs-comment">// если файл не скопирован, создаем ошибку</span>
  <span class="hljs-keyword">if</span>(!copy(<span class="hljs-variable">$tmp_path</span>,<span class="hljs-variable">$path_of_uploaded_file</span>))
  {
    <span class="hljs-variable">$errors</span> .= <span class="hljs-string">'\n error while copying the uploaded file'</span>;
  }
}

Сперва мы должны скопировать файл в папку на сервере. (По окончанию работы скрипта, в случае, если принятый файл не был переименован или скопирован в новую папку, он будет автоматически удален из временной папки.)

Копируем загруженный файл в папку ‘

uploads

‘. Если вы хотите переименовать папку (

uploads

), обновите переменную

$upload_folder

.

Убедитесь, что папка ‘

uploads

‘ имеет права доступа 777. Файл сохранен на вашем сервере, и вы можете обратиться к нему в любой момент.

Отправляем письмо

Составим и отправим письмо на электронную почту администратора сайта (или кому хотите). Для отправки и компоновки письма будем использовать pear library (инструкцию по установке смотрите ниже). Pear классы

PEAR::Mail

и

PEAR::Mail_Mime

используются для отправки электронной почты с прикрепленными файлами.

Для начала мы должны подключить файлы pear library для этих классов:

PHP


<span class="hljs-keyword">include_once</span>(<span class="hljs-string">'Mail.php'</span>);
<span class="hljs-keyword">include_once</span>(<span class="hljs-string">'Mail_Mime/mime.php'</span>);

Ниже приведен код компоновки и отправки письма:

PHP


<span class="hljs-variable">$message</span> = <span class="hljs-keyword">new</span> Mail_mime();
<span class="hljs-variable">$message</span>-&gt;setTXTBody(<span class="hljs-variable">$text</span>);
<span class="hljs-variable">$message</span>-&gt;addAttachment(<span class="hljs-variable">$path_of_uploaded_file</span>);
<span class="hljs-variable">$body</span> = <span class="hljs-variable">$message</span>-&gt;get();
<span class="hljs-variable">$extraheaders</span> = <span class="hljs-keyword">array</span>(<span class="hljs-string">"From"</span>=&gt;<span class="hljs-variable">$from</span>,
     <span class="hljs-string">"Subject"</span>=&gt;<span class="hljs-variable">$subject</span>,<span class="hljs-string">"Reply-To"</span>=&gt;<span class="hljs-variable">$visitor_email</span>);
<span class="hljs-variable">$headers</span> = <span class="hljs-variable">$message</span>-&gt;headers(<span class="hljs-variable">$extraheaders</span>);
<span class="hljs-variable">$mail</span> = Mail::factory(<span class="hljs-string">"mail"</span>);
<span class="hljs-variable">$mail</span>-&gt;send(<span class="hljs-variable">$to</span>, <span class="hljs-variable">$headers</span>, <span class="hljs-variable">$body</span>);

Класс

Mail_mime()

поможет в создании MIME послания. В приведенном выше коде мы создали объект

Mail_mime

, обновили тело письма (

$message-&gt;setTXTBody($text);

) и добавили прикрепленный файл (

$message-&gt;addAttachment(file)

).

Прежде чем использовать классы PEAR необходимо установить PEAR на вашем сервере. Вот быстрый способ установить PEAR:
Скачайте инсталлятор PEAR

http://pear.php.net/go-pear

Сохраните файл как »

pear-installer.php

«. Загрузите этот файл на ваш сервер в любой каталог. Затем пропишите путь к файлу в вашем браузере:
http://www.yourdomain.com/pear-installer.php
Появится веб-интерфейс для установки PEAR на вашем сайте. Следуйте инструкции по установке. После установки Pear, найдите и установите пакеты »

mail

» и »

mail_mime

«.

ORIGINAL http://dnzl.ru/view_post.php?id=198

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *