Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с загрузкой файла на сервер
 
 автор: shkarbatov   (11.08.2011 в 20:09)   письмо автору
 
 

Специалисты, подскажите пожалуйста в рещении проблемы.

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

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

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

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

upload_max_filesize => 32M => 32M

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

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

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

<form id="form1" action="send_email.php" method="post" enctype="multipart/form-data">
    <input type="file" name="filename">
    <input type="button" value="Загрузить" onClick="tr();">
</form>    

--------------------------------------------------------
Серверная часть:

// Проверка файла на размер
  if($_FILES["filename"]["size"] > 1024*20*1024)
{
    echo ("Размер файла превышает 20 мегабайт");
    $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось, так как он превышает допустимый размер - 20 МБ.";    
      mail($to, $subject, $message, $headers);
    echo "<meta http-equiv='refresh'; content='5; url=/index.php?option=com_content&view=article&id=198&Itemid=232'>";      

// Проверяем загружен ли файл
if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
{
    // Если файл загружен успешно, перемещаем его из временной директории в конечную 
    if (copy($_FILES['filename']['tmp_name'], $uploadfile))
    {
    echo "<p>Файл успешно загружен на сервер</p>"; 
    $message .= "\r\n\r\n\r\nФайл успешно загружен на сервер.";
    mail($to, $subject, $message, $headers);
    echo "<meta http-equiv='refresh'; content='5; url=/index.php'> "; 
    }
else  
    {
    echo("<p>Ошибка! Не удалось загрузить файл на сервер, попробуйте повторить попытку позже!</p>");
    $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось.";                        
    mail($to, $subject, $message, $headers);
    echo "<meta http-equiv='refresh'; content='5; url=/index.php?option=com_content&view=article&id=198&Itemid=232'>";             
    }
}

// Проверка на несоответсвие типа
elseif ($type !== "jpg")
{    
    echo ("Файл не соответствует разрешенному формату");
    $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось, так как он не соответствует разрешенному формату.";
    mail($to, $subject, $message, $headers);
    echo "<meta http-equiv='refresh'; content='5; url=/index.php?option=com_content&view=article&id=198&Itemid=232'> ";     
}

}
else
{
    $asd = mail($to, $subject, $message, $headers);
}

  Ответить  
 
 автор: Гавриленко Дмитрий   (11.08.2011 в 20:43)   письмо автору
 
   для: shkarbatov   (11.08.2011 в 20:09)
 

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

по моему чистыми средствами php это реальзовать не возможно. На Js и As делабт подобное.



elseif ($type !== "jpg") стоит поменять на
elseif ($type != "jpg") потому что переменная может и будет содержать значение jpg, но ни когда не будет этого же типа.

  Ответить  
 
 автор: cheops   (11.08.2011 в 20:43)   письмо автору
 
   для: shkarbatov   (11.08.2011 в 20:09)
 

Попробуйте добавить скрытое поле
<input type="hidden" name="MAX_FILE_SIZE" value="20971520" />

  Ответить  
 
 автор: Гавриленко Дмитрий   (11.08.2011 в 20:58)   письмо автору
 
   для: cheops   (11.08.2011 в 20:43)
 

Подскажите, что это дает?

  Ответить  
 
 автор: shkarbatov   (12.08.2011 в 00:01)   письмо автору
 
   для: Гавриленко Дмитрий   (11.08.2011 в 20:58)
 

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

Я так делал, вот только оно почему-то не на что не повлияло =(

  Ответить  
 
 автор: Valick   (12.08.2011 в 00:07)   письмо автору
 
   для: shkarbatov   (12.08.2011 в 00:01)
 

кто сказал что оно должно что-то рубить?
скрытое поле это просто "пассивная констана" которая отправляется из формы выбранным методом вместе с осталными данными введенными пользователем, не более того

  Ответить  
 
 автор: shkarbatov   (12.08.2011 в 00:12)   письмо автору
 
   для: Valick   (12.08.2011 в 00:07)
 

Я имел ввиду смысл, зачем она вообще используется. Сама по себе она понятное дело ничего не делает, абсолютно с вами согласен.

  Ответить  
 
 автор: bab-nike   (12.08.2011 в 00:46)   письмо автору
 
   для: shkarbatov   (11.08.2011 в 20:09)
 

исходя из того, что файл 20Мб, вы загружаете видеоролик.... кажется я что то нашел
http://www.cookieslovers.com/content/videokhosting-kak-razmestit-video-na-svoem-saite-chast-2

  Ответить  
 
 автор: shkarbatov   (14.08.2011 в 15:57)   письмо автору
 
   для: bab-nike   (12.08.2011 в 00:46)
 

Спасибо конечно, но это не совсем то, что мне надо. И видео файлы на сервер будет запрещено загружать =)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования