- Как загрузить больше картинок через этот php код?
- Установка лимитов PHP на обработку данных из форм
- Описание директив
- post_max_size
- Пример в htaccess:
- upload_max_filesize
- Пример:
- max_input_vars
- Пример:
- max_execution_time
- Пример:
- max_input_time
- Пример:
- memory_limit
- Пример:
- Установка директив в .htaccess
- Установка директив в PHP-скрипте
- Получение значений в PHP-скрипте
- Получение значения upload_max_filesize в PHP:
- Результат:
- Возможные ошибки
- Загрузка файлов больших размеров в PHP
- Комментарии ( 9 ):
Как загрузить больше картинок через этот php код?
Привет всем , может вопрос туповат но простите сразу я ещё учусь.
не допускаются"; > else < // Проверка размера файла if(filesize($TempName) >$MaxFileSizeInBytes) < $errors= "Размер загружаемого файла превышает 5МБ"; >else < // Проверяем права доступа на папку if(!is_writable($UploadDir)) < $errors= "Папка ".$UploadDir." не имеет прав на запись"; >else < // Копируем содержимое временного файла $TempName и создаем нового в папке сервера $CopyFile = copy($TempName, $NewFilePatch); if(!$CopyFile) < $errors= "Возникла ошибка, файл не удалось загрузить!"; >else < $good = "Файл успешно загружен!
Ссылка на файл: '> "; > > > > > ?>
Для начала нужно инпуту с типом файл прописать атрибут multiple:
чтобы появилась возможность выбирать два файла.
А потом, если я не ошибаюсь (давно не писал на PHP), в $_FILES[‘uploaded_file’][‘name’] будет приходить уже массив файлов, который нужно будет записывать через for.
Я использую этот код
Тут еще пример как в базу-данных пути сохранять
$id — например id товара или галлереи
if($_FILES['photos']['name'][0])< for($i = 0; $i < count($_FILES['photos']['name']); $i++)< $error = ""; if($_FILES['photos']['name'][$i])< // если есть файл $galleryimgExt = strtolower(preg_replace("#.+\.([a-z]+)$#i", "$1", $_FILES['photos']['name'][$i])); // расширение картинки $galleryimgName = "_."; // новое имя картинки $galleryimgTmpName = $_FILES['photos']['tmp_name'][$i]; // временное имя файла $galleryimgSize = $_FILES['photos']['size'][$i]; // вес файла $galleryimgType = $_FILES['photos']['type'][$i]; // тип файла $galleryimgError = $_FILES['photos']['error'][$i]; // 0 - OK, иначе - ошибка if(!in_array($galleryimgType, $types))< $error .= "Допустимые расширения - .gif, .jpg, .png
"; $_SESSION['answer'] .= "Ошибка при загрузке картинки
"; continue; > if($galleryimgSize > SIZE)< $error .= "Максимальный вес файла - 1 Мб"; $_SESSION['answer'] .= "Ошибка при загрузке картинки
"; continue; > if($galleryimgError)< $error .= "Ошибка при загрузке файла. Возможно, файл слишком большой"; $_SESSION['answer'] .= "Ошибка при загрузке картинки
"; continue; > // если нет ошибок if(empty($error))< if(@move_uploaded_file($galleryimgTmpName, "userfiles/gal/img/$galleryimgName"))< resize("userfiles/gal/img/$galleryimgName", "userfiles/gal/mini_img/$galleryimgName", 150, 150, $galleryimgExt); resize("userfiles/gal/img/$galleryimgName", "userfiles/gal/tmp/$galleryimgName", 1000, 1000, $galleryimgExt); @unlink("userfiles/gal/img/$galleryimgExt"); if(!isset($galleryfiles))< $galleryfiles = $galleryimgName; >else< $galleryfiles .= "|"; > >else< $_SESSION['answer'] .= "Не удалось переместить загруженную картинку. Проверьте права на папки в каталоге /userfiles/product_img/"; > > > >//конец цикла if(isset($galleryfiles)) < mysql_query("UPDATE otziv SET img = '$galleryfiles' WHERE otziv_id = $id"); >> еще добавляю resize картинок
/* ===Ресайз картинок=== */ function resize($target, $dest, $wmax, $hmax, $ext)< /* $target - путь к оригинальному файлу $dest - путь сохранения обработанного файла $wmax - максимальная ширина $hmax - максимальная высота $ext - расширение файла */ list($w_orig, $h_orig) = getimagesize($target); $ratio = $w_orig / $h_orig; // =1 - квадрат, 1 - книжная if(($wmax / $hmax) > $ratio)< $wmax = $hmax * $ratio; >else < $hmax = $wmax / $ratio; >$img = ""; // imagecreatefromjpeg | imagecreatefromgif | imagecreatefrompng switch($ext) < case("gif"): $img = imagecreatefromgif($target); break; case("png"): $img = imagecreatefrompng($target); break; default: $img = imagecreatefromjpeg($target); >$newImg = imagecreatetruecolor($wmax, $hmax); // создаем оболочку для новой картинки if($ext == "png") < imagesavealpha($newImg, true); // сохранение альфа канала $transPng = imagecolorallocatealpha($newImg,0,0,0,127); // добавляем прозрачность imagefill($newImg, 0, 0, $transPng); // заливка >imagecopyresampled($newImg, $img, 0, 0, 0, 0, $wmax, $hmax, $w_orig, $h_orig); // копируем и ресайзим изображение switch($ext) < case("gif"): imagegif($newImg, $dest); break; case("png"): imagepng($newImg, $dest); break; default: imagejpeg($newImg, $dest); >imagedestroy($newImg); >
Установка лимитов PHP на обработку данных из форм
Перечень настроек PHP, которые могут ограничить отправку форм и файлов через POST-запрос.
Описание директив
post_max_size
Устанавливает максимальный размер данных, отправленных методом POST, включая размер загружаемых файлов, по умолчанию 8Mb .
- Для загрузки больших файлов это значение должно быть больше значения upload_max_filesize.
- Значение можно указать числом в байтах, K (в килобайтах), M (в мегабайтах) и G (в гигабайтах).
- Значение «0» снимает ограничение только в версиях PHP 5.3.2 и 5.2.12.
Пример в htaccess:
php_value post_max_size 100M
upload_max_filesize
Максимальный размер загружаемых файлов на сервер. По умолчанию 2Mb.
Пример:
php_value upload_max_filesize 100M
max_input_vars
Максимальное количество переменных, которое может быть принято в одном запросе. По умолчанию 1000.
Если данный лимит будет превышен, то после отправки формы массив $_GET или $_POST будет пустым.
Пример:
php_value max_input_vars 2000
max_execution_time
Директива задаёт максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. Если этого не происходит, работа скрипта завершается. По умолчанию на загрузку даётся 30 секунд.
Значение «0» снимает ограничение на время выполнения.
Пример:
php_value max_execution_time 600
Также, максимальное время выполнения скрипта задает функция set_time_limit($seconds) .
max_input_time
Задаёт максимальное время в секундах, в течение которого скрипт должен разобрать все входные POST или GET данные. Это время измеряется от момента, когда PHP вызван на сервере до момента, когда скрипт начинает выполняться.
- Значение по умолчанию «-1» – будет использоваться max_execution_time.
- Значение «0» – без ограничений по времени.
Пример:
php_value max_input_time 600
memory_limit
Задаёт максимальный объем памяти в байтах, который разрешается использовать скрипту. По умолчанию 128Mb.
Пример:
php_value memory_limit 200M
Установка директив в .htaccess
# Максимальный размер данных php_value post_max_size 110M # Максимальный размер файлов php_value upload_max_filesize 100M # Максимальное количество переменных php_value max_input_vars 2000 # Максимальное время выполнения скрипта php_value max_execution_time 600 # Максимальное время обработки данных php_value max_input_time 600 # Память для скрипта php_value memory_limit 200M
Установка директив в PHP-скрипте
ini_set('post_max_size', '110M'); // Максимальный размер данных ini_set('upload_max_filesize', '100M'); // Максимальный размер файлов ini_set('max_input_vars', '2000'); // Максимальное количество переменных ini_set('max_execution_time', '600'); // Максимальное время выполнения скрипта ini_set('max_input_time', '600'); // Максимальное время обработки данных ini_set('memory_limit', '200M'); // Память для скрипта
Получение значений в PHP-скрипте
Действующие значения настроек PHP можно посмотреть с помощью функции phpinfo() или получить значение параметра настройки с помощью функции ini_get($option) .
Получение значения upload_max_filesize в PHP:
'; echo 'Максимальный размер файлов: ' . ini_get('upload_max_filesize') . '
'; echo 'Максимальное количество переменных: ' . ini_get('max_input_vars') . '
'; echo 'Максимальное время выполнения скрипта: ' . ini_get('max_execution_time') . '
'; echo 'Максимальное время обработки данных: ' . ini_get('max_input_time') . '
'; echo 'Память для скрипта: ' . ini_get('memory_limit') . '
';
Результат:
Максимальный размер данных: 128M Максимальный размер файлов: 128M Максимальное количество переменных: 10000 Максимальное время выполнения скрипта: 300 Максимальное время обработки данных: -1 Память для скрипта: 1024M
Возможные ошибки
После отправки формы с множеством полей, массив $_POST пустой.
– В форме количество полей превышает значение max_input_vars.
Ошибка «Fatal error: Allowed memory size»
– Скрипт превысил значение параметра PHP memory_limit.
Ошибка «504 Gateway Time Out»
– Скрипт выполняется слишком долго, нужно увеличить значение max_execution_time. Как правило после вывода этой ошибки в браузере, скрипт будет еще какое-то время работать.
Загрузка файлов больших размеров в PHP
Те, кто уже пытался загружать файлы, вполне вероятно, обратили внимание на то, что загрузить файл через PHP даже среднего размера (15-20 МБ) не представляется возможным. А ведь это не такой уж и большой размер файла, и в этой статье я расскажу, как загружать файлы больших размеров в PHP.
Для того, чтобы загружать файлы больших размеров в PHP, надо исправить настройки интерпритатора PHP. Существуют 4 настройки, влияющие на максимальный допустимый размер загружаемого файла:
- max_execution_time — максимальное время, которое может выполняться скрипт. Как правило, стоит 30-60 секунд.
- max_input_time — максимальное время, в течение которого могут приниматься данные на сервер. Здесь также стоит порядка 30-60 секунд.
- upload_max_filesize — максимальный размер файла, который допускается для загрузки на сервер. Ключевая настройка, однако, вопреки общему заблуждению, далеко не единственная необходимая для загрузки больших файлов в РHP.
- post_max_size — максимальный размер отправляемых данных.
Фактически, чтобы загружать большие файлы в PHP, нужно исправить все 4 настройки. Делается это с помощью файла .htaccess, в который нужно добавить следующие строки (безусловно, значения можно менять на свои):
php_value max_execution_time 500
php_value max_input_time 500
php_value upload_max_filesize 30M
php_value post_max_size 30M
Почему все 4 опции так важны:
- max_execution_time — здесь нужно поставить время, за которое должен успеть загрузиться файл. Очевидно, что файл размеров 30 МБ вряд ли загрузится за 30-60 секунд, поэтому безусловно, это время надо увеличивать.
- max_input_time — аналогично с max_execution_time. Ведь если первые 60 секунд будут приниматься данные, а потом перестанут, то вновь файл не успеет загрузиться.
- upload_max_filesize — эту опцию меняют все и без проблем, однако, когда ничего не меняется — удивляются, а ведь она хоть и является ключевой, но, тем не менее, другие три так же очень важны.
- post_max_size — максимальный размер отправляемых данных так же очевиден, ведь если файл большого размера, то он не сможет полностью отправиться из-за этого ограничения.
Создано 19.03.2011 14:25:11
Михаил Русаков Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 9 ):
У меня сайт на CMS Joomla. Добавил изменения в файл .htaccess в корне сайта, но желаемого результата не получил. Возмоджно, есть еще какие-то настройки или я неправильно записал php_value в .htaccess. Подскажите, плиз, какая может быть причина? Спасибо
Причина может быть в самой Joomla. В настройках Joomla есть параметр «Максимальный размер загружаемых файлов». Измените его. Также проблема может быть в Вашем хостинге, который не позволяет менять параметры через .htaccess.
Спасибо, Михаил. Буду пробовать.
Михаил, а вы можете написать статью про обрезку изображений?
Михаил, здравствуйте! Создавал хостинг изображений по бонусу из вашего курса PHP и MySQL с Нуля до Гуру, но возникла проблема: на странице вывода изображений выводится такая ошибка — «Fatal error: Call to private method Image::loadImage() from context » in V:\home\localhost\www\myproject\show_image.php on line 3″. 3 ряд совпадет с Вашим в обучающем видео. Как решить эту проблему?
Написал скрипт, который запускается кроном. Скрипт отправляет мне на почту бэкапы всех имеющихся на сервере баз данных. Проблема в том, что функция mail() не может отправить письмо с файлами, отдаёт false. На почту приходит уведомление: Mail failure — message too big A message that you sent was longer than the maximum size allowed on this system. It was not delivered to any recipients. Размер аттача в отправляемом письме не более 30 мегабайт В настройках php поставил максимальный размер файлов 300мб, не помогло. Может для отправляемых c сервера писем есть какие-то настройки?
Данный вопрос вы можете задать своему хостеру. Но в целом да,скорее всего так и есть.Обычно размер аттача одного файла не может превышать 30-50 мегабайт
Есть еще один удобный сервис который позволяет отправлять большие файлы. С его помощью можно отправлять больших файлы по электронной почте. Попробуйте www.jumbomail.me/ru/ вы сможете отправлять по электронной почте большие файлы до 5 ГБ бесплатно. Достаточно ввести адрес электронной почты получателя и загрузить их. Тут еще есть крутая фишка что можно просматривать фотки и слушать музыку не скачивая к себе в компьютер. Сама пользуюсь, рекомендую.
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.