За последние 24 часа нас посетили 60254 программиста и 1809 роботов. Сейчас ищут 2286 программистов ...

Проблема с загрузкой файла на сервер

Тема в разделе "JavaScript и AJAX", создана пользователем Shkarbatov, 11 авг 2011.

  1. Shkarbatov

    Shkarbatov Активный пользователь

    С нами с:
    23 июл 2011
    Сообщения:
    19
    Симпатии:
    0
    Специалисты, подскажите пожалуйста в рещении проблемы.

    Задача:
    - необходимо загружать на сервер файлы только определенного типа;
    - размер загружаемых файлов не должен превышать 20 Мб;
    - если файл меньше 20 Мб и соответствует разрешенному типу формируется письмо с текстом и отправляется на почту
    - если файл больше 20 Мб или не соответствует разрешенному типу формируется письмо с текстом об ошибке и отправляется на почту
    - если файл больше 20 Мб, тогда не надо ждать пока он загрузится на сервер (этого пока нет, пробывал с полем hidden, но что-то не получается)

    В принципе все реализовано, вот только есть одно НО!

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

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

    upload_max_filesize => 32M => 32M

    Текст письма содержится в переменной $message.

    Заранее благодарен!

    --------------------------------------------------------
    Есть html-форма:

    HTML:
    1. <form id="form1" action="send_email.php" method="post" enctype="multipart/form-data">
    2.     <input type="file" name="filename">
    3.     <input type="button" value="Загрузить" onClick="tr();">
    4. </form>
    --------------------------------------------------------
    Серверная часть:

    PHP:
    1. // Проверка файла на размер
    2.   if($_FILES["filename"]["size"] > 1024*20*1024)
    3. {
    4.     echo ("Размер файла превышает 20 мегабайт");
    5.     $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось, так как он превышает допустимый размер - 20 МБ.";   
    6.     mail($to, $subject, $message, $headers);
    7.     echo "<meta http-equiv='refresh'; content='5; url=/index.php?option=com_content&view=article&id=198&Itemid=232'>";  
    8.  
    9. // Проверяем загружен ли файл
    10. if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
    11. {
    12.     // Если файл загружен успешно, перемещаем его из временной директории в конечную
    13.     if (copy($_FILES['filename']['tmp_name'], $uploadfile))
    14.     {
    15.     echo "<p>Файл успешно загружен на сервер</p>";
    16.     $message .= "\r\n\r\n\r\nФайл успешно загружен на сервер.";
    17.     mail($to, $subject, $message, $headers);
    18.     echo "<meta http-equiv='refresh'; content='5; url=/index.php'> ";
    19.     }
    20. else  
    21.     {
    22.     echo("<p>Ошибка! Не удалось загрузить файл на сервер, попробуйте повторить попытку позже!</p>");
    23.     $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось.";                      
    24.     mail($to, $subject, $message, $headers);
    25.     echo "<meta http-equiv='refresh'; content='5; url=/index.php?option=com_content&view=article&id=198&Itemid=232'>";         
    26.     }
    27. }
    28.  
    29. // Проверка на несоответсвие типа
    30. elseif ($type !== "jpg")
    31. {  
    32.     echo ("Файл не соответствует разрешенному формату");
    33.     $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось, так как он не соответствует разрешенному формату.";
    34.     mail($to, $subject, $message, $headers);
    35.     echo "<meta http-equiv='refresh'; content='5; url=/index.php?option=com_content&view=article&id=198&Itemid=232'> ";    
    36. }
    37.  
    38. }
    39. else
    40. {
    41.     $asd = mail($to, $subject, $message, $headers);
    42. }
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    через swfupload попробуй. но тебе будет сложно =)
     
  3. Shkarbatov

    Shkarbatov Активный пользователь

    С нами с:
    23 июл 2011
    Сообщения:
    19
    Симпатии:
    0
    Переписал код на нормальный =)

    А чего будет сложно?

    Переписал код на нормальный =)

    PHP:
    1. if(isset($_FILES["filename"]["tmp_name"]) && is_uploaded_file($_FILES["filename"]["tmp_name"]))
    2. {
    3.     if ($_FILES["filename"]["size"] < 1024*20*1024)
    4.     {
    5.         if($type == "jpg")
    6.         {
    7.             if (copy($_FILES['filename']['tmp_name'], $uploadfile))
    8.             {
    9.                 echo "<p>Файл успешно загружен на сервер</p>";
    10.                 $message .= "Файл успешно загружен на сервер.";
    11.                 mail($to, $subject, $message, $headers);
    12.             }
    13.             else  
    14.             {
    15.                 echo("<p>Ошибка! Не удалось загрузить файл на сервер, попробуйте повторить попытку позже!</p>");
    16.                 $message .= "Файл загрузить на сервер не удалось.";                      
    17.                 mail($to, $subject, $message, $headers);
    18.             }
    19.         }
    20.         else
    21.         {
    22.             echo ("Файл не соответствует разрешенному формату");
    23.             $message .= "Файл загрузить на сервер не удалось, так как он не соответствует разрешенному формату.";
    24.             mail($to, $subject, $message, $headers);
    25.         }
    26.     }
    27.     else
    28.     {
    29.         echo ("Размер файла превышает 20 мегабайт");
    30.         $message .= "Файл загрузить на сервер не удалось, так как он превышает допустимый размер - 20 МБ.";   
    31.         mail($to, $subject, $message, $headers);
    32.     }
    33. }
    34. else
    35. {
    36.     $message .= "Файл не был выбран.";
    37.     mail($to, $subject, $message, $headers);
    38. }