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

Форум PHP

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

 

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

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

тема: размер загружаемого изображения
 
 автор: Slo_Nik   (16.08.2009 в 17:56)   письмо автору
 
 

Подскажите, пожалуйста, как правильно сделать.
Есть скрипт загрузки изображения, он же и обработчик.
Обращение к этому файлу происходит через файл index
вот так я это изобразил

<?php
// массив ошибок
$error = array();
// если форма отправлена
if(isset($_POST['submit'])){
// проверяем заполнены ли поля формы
 
if(empty($_POST['name'])) $error[] = "Вы не ввели название фотографии.";
// проверяем размер изображения
 
if($_FILES['image']['error'] == 1$error[] = "Размер фотографии превышает допустимый размер.";
// если попробовать проверить выбрал ли пользователь изображение, то получается, что если изображение больше максимального всёравно выдаёт это предупреждение
if(empty($_FILES['image']['tmp_name'])) $error[] = "Вы не выбрали изображение";
 
// если нет ошибок - продолжается выполнение скрипта
 
if(empty($error)){
.................................................................................................
 }
}
// если есть ошибки - показываем пользователю
if(!empty($error)){
.............
}
// тут includ форма загрузки
?>

Всё это, при соответствующем значении параметра $_GET, инклюдится в файле index.
Меня интересует, как правильно проверить размер загружаемого изображения и если он превышает максимально разрешённый, то вывести сообщение пользователю?
У меня получается так, что если размер больше допустимого, то выводится предупреждение о превышении допустимого размера и "Вы не выбрали изображение", т.к $_FILES['image']['tmp_name'] присваивается значение "0".
Или просто совместить эти две проверки и выводить одно сообщение на двоих?

  Ответить  
 
 автор: neadekvat   (16.08.2009 в 18:01)   письмо автору
 
   для: Slo_Nik   (16.08.2009 в 17:56)
 

Если_максимум_не_превышен {
если изображение присутствует {
..................
} иначе {
ошибка = нужно указать адрес к изображению
}
} иначе {
ошибка = превышен максимум
}

Так понятно?

  Ответить  
 
 автор: Slo_Nik   (16.08.2009 в 18:12)   письмо автору
 
   для: neadekvat   (16.08.2009 в 18:01)
 

не совсем
насчёт адреса не понял, зачем указывать адрес, дастаточно вывести сообщение...

  Ответить  
 
 автор: neadekvat   (16.08.2009 в 18:24)   письмо автору
 
   для: Slo_Nik   (16.08.2009 в 18:12)
 


<?php
if ($_FILES['uploadfile']['size']  > 1024*2*1024) {
$error 'Размер файла больше двух мегабайт';
} else {
 if(empty(
$_FILES['image']['tmp_name'])) $error[] = "Вы не выбрали изображение";
}

Так понятнее? Если размер превышает допустимую норму, то никаких проверок больше проводиться и не будет, так что ошибка будет лишь одна.

  Ответить  
 
 автор: Zend72   (16.08.2009 в 19:09)   письмо автору
 
   для: neadekvat   (16.08.2009 в 18:24)
 

Корректнее было бы анализировать $_FILES['userfile']['error']


UPLOAD_ERR_OK 

Значение: 0; Ошибок не возникало, файл был успешно загружен на сервер. 
UPLOAD_ERR_INI_SIZE 

Значение: 1; Размер принятого файла превысил максимально допустимый размер, который задан директивой upload_max_filesize конфигурационного файла php.ini.
UPLOAD_ERR_FORM_SIZE 

Значение: 2; Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме.
UPLOAD_ERR_PARTIAL 

Значение: 3; Загружаемый файл был получен только частично. 
UPLOAD_ERR_NO_FILE 

Значение: 4; Файл не был загружен.

  Ответить  
 
 автор: Slo_Nik   (16.08.2009 в 22:50)   письмо автору
 
   для: Zend72   (16.08.2009 в 19:09)
 


<?php
if($_FILES['image']['error'] == 1$error[] = "Размер фотографии превышает допустимый размер.";
?>

да так и сделал

  Ответить  
 
 автор: Slo_Nik   (16.08.2009 в 23:04)   письмо автору
 
   для: neadekvat   (16.08.2009 в 18:24)
 

так дело в том, что так не работает.
если посмотреть дамп массива $_FILES, когда изображение больше допустимого, то получим
Array
(
    [file] => Array
        (
            [name] => CB002828.jpg
            [type] => 
            [tmp_name] => 
            [error] => 1
            [size] => 0
        )

)

а так как [size] => 0 , то получается, что размер получить не возможно.
вот заменил $_FILES['file']['tmp_name'] на $_FILES['file']['name'] вроде получил то, что надо.

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

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