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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как узнать размер загружаемого файла?

Сообщения:  [1-4] 

 
 автор: shkarbatov   (14.08.2011 в 17:09)   письмо автору
 
   для: shkarbatov   (14.08.2011 в 15:58)
 

Решил проблему путем добавления hidden поля в html форму, а далее анализирую $_FILES["filename"]["error"]
Может пригодиться кому-то еще.

Спасибо всем за помощь и консультирование!

<input type="hidden" name="MAX_FILE_SIZE" value="15728640" /> 
<input type="file" name="filename">
<input type="button" value="Загрузить">


if(isset($_FILES["filename"]["tmp_name"]) && is_uploaded_file($_FILES["filename"]["tmp_name"])) 
{
    if ($_FILES["filename"]["error"] == 0) 
    {
        if($type == "jpg")
        {
            if (copy($_FILES['filename']['tmp_name'], $uploadfile))
            {
                echo "<p>Файл успешно загружен на сервер</p>"; 
                $message .= "Файл успешно загружен на сервер.";
                $asd = mail($to, $subject, $message, $headers);
            }
            else  
            {
                echo("<p>Ошибка! Не удалось загрузить файл на сервер, попробуйте повторить попытку позже!</p>");
                $message .= "Файл загрузить на сервер не удалось.";                        
                mail($to, $subject, $message, $headers);
            }
        }
        else
        {
            echo ("Файл не соответствует разрешенному формату");
            $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось, так как он не соответствует разрешенному формату.";
            mail($to, $subject, $message, $headers);
        }
    }
    elseif ($_FILES["filename"]["error"] == 1 || 2)
    {
        echo ("Размер файла превышает 15 мегабайт");
        $message .= "Файл загрузить на сервер не удалось, так как он превышает допустимый размер - 15 МБ.";    
        mail($to, $subject, $message, $headers);
    }
    elseif ($_FILES["filename"]["error"] == 3)
    {
        $message .= "\r\n\r\n\r\nФайл загружен на сервер частично.";    
        mail($to, $subject, $message, $headers);
    }    
    else
    {
        $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось.";        
        mail($to, $subject, $message, $headers);
    }
}
else
{
    mail($to, $subject, $message, $headers);
}

  Ответить  
 
 автор: shkarbatov   (14.08.2011 в 17:09)   письмо автору
 
   для: shkarbatov   (14.08.2011 в 15:58)
 

.

  Ответить  
 
 автор: julpierto   (14.08.2011 в 17:08)   письмо автору
 
   для: shkarbatov   (14.08.2011 в 15:58)
 

Максимальный размер загружаемого файла задается в директиве upload_max_filesize файла php.ini
В массиве $_FILE значение переменной error может быть следующим:
upload_err_ok: нет ошибки, файл закачался;
upload_err_no_file: пользователь не выбрал файл в браузере;
uploaderrinisize: превышен максимальный размер файла, задаваемый в
директиве upioad_max_fiiesize файла php.ini;
upload_err_form_size: превышен размер, задаваемый в необязательном поле
формы с именем upload_err_form_size;
upload_err_partial: в результате обрыва соединения файл не был докачан до
конца.

  Ответить  
 
 автор: shkarbatov   (14.08.2011 в 15:58)   письмо автору
 
 

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

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

<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(isset($_FILES["filename"]["tmp_name"]) && is_uploaded_file($_FILES["filename"]["tmp_name"]))
 {
     if ($_FILES["filename"]["size"] < 1024*20*1024)
     {
         if($type == "jpg")
         {
             if (copy($_FILES['filename']['tmp_name'], $uploadfile))
             {
                 echo "<p>Файл успешно загружен на сервер</p>";
                 $message .= "Файл успешно загружен на сервер.";
                 mail($to, $subject, $message, $headers);
             }
             else 
             {
                 echo("<p>Ошибка! Не удалось загрузить файл на сервер, попробуйте повторить попытку позже!</p>");
                 $message .= "Файл загрузить на сервер не удалось.";                       
                 mail($to, $subject, $message, $headers);
             }
         }
         else
         {
             echo ("Файл не соответствует разрешенному формату");
             $message .= "Файл загрузить на сервер не удалось, так как он не соответствует разрешенному формату.";
             mail($to, $subject, $message, $headers);
         }
     }
     else
     {
         echo ("Размер файла превышает 20 мегабайт");
         $message .= "Файл загрузить на сервер не удалось, так как он превышает допустимый размер - 20 МБ.";   
         mail($to, $subject, $message, $headers);
     }
 }
 else
 {
     $message .= "Файл не был выбран.";
     mail($to, $subject, $message, $headers);
 }

-----------------------------------------------

1) до 2 Мб - работает правильно
post_max_size = 2M

2) до 8 Мб - загружает файлы, но работает не правильно
upload_max_filesize = 8M

3) больше 8 Мб - не работает вообще

------------------------------------------------
1) Если я пробую загрузить файлы < 2 Мб, тогда все работает корректно (печатаю содержимое массива $_FILES):

Array
(
[filename] => Array
(
[name] => AIPort.dll
[type] => application/x-msdownload
[tmp_name] => Z:\tmp\php17C.tmp
[error] => 0
[size] => 258048
)
)
------------------------------------------------
2) Если я пробую загрузить файлы от 2 Мб до 8 Мб, тогда я получаю вот такое вот (печатаю содержимое массива $_FILES), понятно что появляются ошибка из-за того, что post_max_size = 2M, в принципе можно в таком случае сравнивать с кодом ошибки, и если код ошибки равен 1, тогда писать письмо, что не удалось загрузить файл, так как он слишком большой, с этим понятно, но вот с 3 пунктом:

Array
(
[filename] => Array
(
[name] => EAGLES - hotel california.mp3
[type] =>
[tmp_name] =>
[error] => 1
[size] => 0
)
)
------------------------------------------------
3) Если же я пробую загружать файлы больше 8 Мб, тогда я получаю следующее (печатаю содержимое массива $_FILES), из-за того, что upload_max_filesize = 8M, это тоже понятно, но как в таком случае мне узнать размер файла, ведь даже кода ошибки не выводится, и письмо с текстом, мол файл сшиком большой тоже не сформировать:

Array
(
)

  Ответить  

Сообщения:  [1-4] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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