@PersonPlay

Форма обратной связи с вложением?

Приветствую!

Помогите пожалуйста решить ряд вопросов, т.к. в PHP не разбираюсь, хотя кое что понимаю, как должно работать.

<?php
$my_email = "пояпочта@почта.ру"; //ваша почта, на которую придет письмо
$theme = "Тема письма"; //тема вашего письма
$message = "Сообщение письма"; //сообщение вашего письма
$from_name = "Имя отправителя"; //имя отправителя
$from_email = "<откогопочта@почта.ру>"; //почта отправителя
$file_name = $_FILES['user_file']['name']; // имя файла пользователя
$file_type = $_FILES['user_file']['type']; //тип MIME файла пользователя
$file_size = $_FILES['user_file']['size']; //размер файла в байтах файла пользователя
$file_error = $_FILES['user_file']['error']; //ошибки, которые могут возникнуть при отправке файлов на сервер
$file_tmp = $_FILES['user_file']['tmp_name']; //временный файл на сервере, который при выполнении скрипта, удаляется
print_r($_FILES); // служебная функция для проверки отправленных файлов на сервер

if (move_uploaded_file($file_tmp, $file_name)) //перемещаем временный файл с сервера и имя файла пользователя в корневую папку сервера
{
    echo "Файл успешно загружен"; // если все нормально, выводим сообщение
}
else {
    echo "Произошла ошибка при загрузке файла"; // если плохо, выводим сообщение
    $filename = $file_name; //создаем переменную с именем файла пользователя
    $fd = fopen($filename, "rb"); //открываем исходное имя файла пользователя
    $size = filesize($filename); //считываем размер файла пользователя
    $data = fread($fd, $size); //читаем имя и размер файла пользователя
    fclose($fd); //закрываем исходное имя файла пользователя
    $boundary = md5(uniqid(time())); //создаем переменную для генерации символов
    $header = "\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=$boundary\n"; //указываем версию MIME и тип всего содержания письма + генерация символов
    $multipart.= "--$boundary\n"; //означает начало письма в виде --(произвольные символы)
    $multipart.= "Content-Type: text/plain; charset=utf-8\nContent-Transfer-Encoding: quoted-printable\n\n"; //тип письма текстовое, кодировка текста utf-8, кодировка самого письма quoted-printable
    $multipart.= "$message\n"; //Ваше сообщение
    $multipart.= "--$boundary\n"; //означает начало письма в виде --(произвольные символы) это уже вложение
    $multipart.= "Content-Type: application/octet-stream\n"; //так как мы не знаем какие файлы будут переданы пользователем, указываем этот MIME
    $multipart.= "Content-Disposition: attachment; filename=\"$filename\"\n"; //прикрепляем наши файлы к письму
    $multipart.= "Content-Transfer-Encoding: base64\n\n"; //кодировка вложения
    $multipart.= chunk_split(base64_encode($data)); //делим файл на несколько частей
    $multipart.= "--$boundary--\n"; //означает конец письма в виде --(произвольные символы)--
    $send = mail($my_email, $theme, $multipart, "From:" . "$from_name $from_email" . $header); //функция отправки письма
    if ($send == 'true') {
        echo "Ваше сообщение успешно получено"; // если все нормально, выводим сообщение
    }
    else {
        echo "Ваше сообщение не получено"; // если плохо, выводим сообщение
    }

?>


Поправьте меня если не правильно пояснил для себя принцип работы.

Первое: Так вот, проблема в том, что когда указываю папку куда приходят вложения, то на почте переименуется присланный файл. Например: пользователь прислал файл.dat, а на почту приходит uploads-файл.dat Какую переменную пишу if(move_uploaded_file($file_tmp, "uploads/" . $file_name)) и во вложении через переменную $filename = "uploads/" . $file_name;
Далее если не укажу файл, то все равно приходит вложение, но в виде файл.bin

Второе: Как прикрепить несколько вложений вот форма -

<form method="POST" action="uploads.php" enctype="multipart/form-data">

     <input type="file" name="user_file">

</form>


Можно в инпуте, где имя указать так name="user_file[]" или указать атрибут multiple (html5)

print_r($_FILES); - если посмотреть тут, то можно увидеть, что глобальной переменной например $_FILES[name] указывается еще [] вот эти квадратные скобки, которые мы указали в name, т.е. $_FILES[name][] . В эти скобки автоматом прописываются значения [0] [1] [2] [3] [4] и так далее, по мере добавления файлов или их можно так же прописать вручную. Так вот как обработать полученные файлы пользователя, запихать их в аттачмент и если пользователь ничего не передал, то аттачмента не должно быть, как я описал в первом вопросе. Сразу скажу php не изучал. Выше пример это что было в инете, это я уже потом вкурял, что да как. Касательно первого вопроса, скорей всего указываю не верно путь uploads в переменной к атачменту, но без него вообще не придет, т.к. не указываю путь до файла. По второму надо как-то обработать квадратные скобки, которые в конце глобальной переменной, но как не знаю. Заранее благодарю, кто даст дельный совет, желательно разжеванный.
  • Вопрос задан
  • 1886 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы