Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Нужна помощь в PHP-форме отправки файлов

Нужна помощь в PHP-форме отправки файлов


     22.05.2013    Все вопросы » Общие вопросы по PHP    4007

вопрос
Доброго времени суток!
Есть кусок кода из формы обратной связи с возможностью отправки файла


if (!empty($_FILES['mail_file']['tmp_name']))
        {
          $path = $_FILES['mail_file']['name'];
          if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path;
        }
       if(empty($picture))
       {
             $headers .= "Content-Type: ".$content." charset=".$charset."\r\n";
          if (mail($mailto,$subject,$sendmessage,$headers))
          {
             $status = "<div id='error'>Ваше объявление отправлено и будет рассмотрено/опубликовано в ближайшее время!</div>
                        <script>setTimeout('location.replace(\"/\")', 3000);</script>";
          }
          else
          {
             $status = "<div id='error'>По техническим причинам сообщение не было отправлено. Попробуйте снова, а если не получится, обратитесь к разработчикам</div>";
          }
       }
       //отправка сообщения с вложением
       else
       {
          $fp = fopen($path,"r");
          if (!$fp)
          {
              print "Файл ".$path." не может быть прочитан";
              exit();
          }
          $file = fread($fp, filesize($path));
          fclose($fp);
            
          $boundary = "--".md5(uniqid(time())); // генерируем разделитель
    
          $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n";
          $multipart .= "--".$boundary."\n";
            
          $multipart .= "Content-Type: text/html; charset=$charset\n";
          $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
          $multipart .= "$sendmessage\n\n";
            
          $message_part = "--".$boundary."\n";
          $message_part .= "Content-Type: application/octet-stream\n";
          $message_part .= "Content-Transfer-Encoding: base64\n";
          $message_part .= "Content-Disposition: attachment; filename = \"".$picture."\"\n\n";
          $message_part .= chunk_split(base64_encode($file))."\n";
          $multipart .= $message_part."--".$boundary."--\n";
            
          if(!mail($mailto, $subject, $multipart, $headers)) $status = "<div id='error'>По техническим причинам сообщение не было отправлено. Попробуйте снова, а если не получится, обратитесь к разработчикам</div>";
          else $status = "
            <div id='error'>Ваше объявление отправлено и будет рассмотрено/опубликовано в ближайшее время!</div>
            <script>setTimeout('location.replace(\"/\")', 3000);</script>";
       }


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

Ответил: ravchik


Решение:

          $path = $_FILES['mail_file']['name'];
          if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path;

заменено на

          $upldir = "./files/"; //путь для загрузки файла
          $name = $_FILES['mail_file']['name'];
          $path = $upldir.basename($_FILES['mail_file']['name']);
          if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $name;

Может несколько коряво... поправьте, если что не так. Главное все работает, файлы загружаются в папку /files/
Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх