Php не загружаются большие файлы

Обновлено: 06.07.2024

Содержание

Кто может ограничивать объём загружаемых файлов?

Как может быть ограничен объём загружаемых файлов?

Например, если Вы увеличите объём загружаемых данных до 100 МБ и в каком-то поле в одной из форм Вашего сайта, не связанной с загрузкой файлов, а, к примеру, связанной с модификацией данных о пользователе, Вы передаёте какой-нибудь числовой идентификатор (к примеру, номер месяца дня рождения этого пользователя, который, по идее дожен быть числом от 1 до 12), который подставляете в SQL-запрос, то Вам следует приготовиться, что злой хакер передаст в этом поле не число от 1 до 12, а загрузит туда все 100 МБ. Если Вы не настроили Ваш сервер баз данных на обработку очень больших запросов (по умолчанию в My SQL это порядка 16 МБ), то такой запрос приведёт к ошибке, которую и будет эксплуатировать хакер.

  • значительное увеличение времени выполнения Ваших скриптов может снизить защищённость Вашего сервера. Например, это может упростить выполнение DoS-атаки, основанной на том, что большое количество скриптов запускаются и выполняют какие-нибудь длинные бесполезные, на занимающие процессорное время задачи. Если время выполнения скриптов маленькое, то для эффективной DoS-атаки следует постоянно перезапускать скрипты (для защиты в таком случае часто используются блокировки, учитывающие количество обращений с заданного IP-адреса). Если же скрипты выполняются долго, то запустив скрипт однажды, о перезапуске скриптов можно долго не беспокоиться и простой подсчёт количества обращений становится бесполезным.

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

В связи с чем появилась проблема?

Этот протокол, однако, позволяет передавать данные от пользователю серверу. Это сделано для того, чтобы сервер мог динамически генерировать страницы, в зависимости от пришедших данных. К примеру, сам Apache поддерживает возможность вывода списка файлов, позволяя пользователям пересортировывать этот список разными способами. Способ сортировки задаётся в переменной, которая передаётся методом GET.

Но передача методом GET обладает некоторыми недостатками. Например, с его помощью нельзя передавать важную, конфиденциальную информацию, так как адрес страницы (вместе со всеми переменными, которые переданы этим методом), показывается в адресной строке браузера и записывается в журналы прокси-серверов.

Когда Вы программируете под Интернет, Вам следует всегда помнить, что

Это всё потому, что:

  • FTP предназначен для передачи любых файлов в любом направлении
  • FTP НЕ предназначен для передачи гипертекстовых страниц

Как добиться загрузки больших файлов?

Однозначного алгоритма, позволившего бы Вам увеличить объём загружаемых файлов нет, поскольку эти объёмы ограничиваются неопределённым набором используемых Вами программ неопределённым набором способов. Некоторые из этих программ и некоторые используемые ими способы ограничения объёмов файлов перечислены выше.

В первую очередь попробуйте увеличить значения настроек, ссылки на описание которых есть в разделе «Как может быть ограничен объём загружаемых файлов?».

Не забывайте, что настройки используемых Вами программ могут быть прописаны в большом количестве разных мест, при этом могут учитываться все настройки, с учётом приоритета мест.

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

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

Если не поможет изменение настроек – следуйте рекомендациям раздела «Кто может ограничивать объём загружаемых файлов?», то есть изучите все настройки (а не только описанные в этой статье) во всех используемых Вами программах. Можете начать с поиска всех настроек, в которых встречается слово upload или limit. Потом посмотрите все остальные.

Если и это Вам не поможет, значит, скорее всего где-то Вы допустили ошибку: либо неправильно прописали настройки, либо Ваши настройки переопределяются в каком-то другом месте, либо их изменение запрещено другими настройками, либо о каких-то настройках не прочитали.

Не надейтесь, что здесь перечислены все настройки и все программы, которые могут ограничивать размер загружаемых файлов. Количество деталей в этом вопросе такое, что можно сказать, что

Простое решение проблемы

Для загрузки больших файлов на сервер используйте FTP.

Решение, предложенное Кром.

На локальном компьютере ставится простейший ftp. На сервере прописываешь ip, логин и пароль. Если крона нет, то просто по обращению к странице на сервере проверяешь локальный ftp, закачиваешь файлы на серер, автоматически делаешь ссылки и т.д. Т.е. вообще без всякого вмешательства все работает.

Если понадобится описание файлов и какая-то дополнительная информация, то заходишь в админку и добавляешь необходимые данные. При этом на странице тебе выдается весь список закачанных файлов или тех, которые еще находятся на локальном ftp. Под ними поля для дополнительной информации, чекбоксы и т.д. Заполнил всё, нажал ОК и пошёл курить. Программа сама докачает необходимые файлы и выложит их в публичный доступ. Смотрите также

Полезные статьи по загрузке файлов на сервер

Upload файлов, и все с этим связанное

Программы, которые могут Вам помочь

File Upload Applet

Mega Upload Progress Bar

Благодарности

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

Загрузка файлов больших размеров в PHP

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

  • max_execution_time - максимальное время, которое может выполняться скрипт. Как правило, стоит 30-60 секунд.
  • max_input_time - максимальное время, в течение которого могут приниматься данные на сервер. Здесь также стоит порядка 30-60 секунд.
  • upload_max_filesize - максимальный размер файла, который допускается для загрузки на сервер. Ключевая настройка, однако, вопреки общему заблуждению, далеко не единственная необходимая для загрузки больших файлов в РHP.
  • post_max_size - максимальный размер отправляемых данных.

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 опции так важны:

Однако, будьте внимательны! До бесконечности увеличивать эти параметры нельзя! Все эти настройки ограничены оперативной памятью, выделяемой Вам сервером. Запомните следующее неравенство, которое всегда должно соблюдаться: "upload_max_filesize < post_max_size < memory_limit". Вот поэтому нельзя поставить размер файла больше оперативной памяти. Возможно, Вы спросите почему? Здесь всё очень просто: прежде чем файл появится на сервере, он целиком помещается в оперативную память. И поэтому нельзя загрузить файл размера большего, чем оперативная память, выделяемая сервером. Надеюсь, понятно объяснил. А размер оперативной памяти составляет, в среднем, 64 - 128 МБ. И из этого размера Вы можете уже окончательно понять, насколько большие файлы Вы вправе загружать через PHP. Безусловно, если у Вас будет выделенный сервер, то Вы можете поставить хоть 16 ГБ оперативной памяти, если, конечно, на компьютере имеется столько памяти вообще. А на обычным хостинге, таких размеров не бывает, поэтому там всегда есть большие ограничения на размер загружаемых файлов через PHP. И всегда помните: предел на размер загружаемых файлов существует абсолютно всегда и на любом сервере!


Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

Комментарии ( 9 ):

У меня сайт на CMS Joomla. Добавил изменения в файл .htaccess в корне сайта, но желаемого результата не получил. Возмоджно, есть еще какие-то настройки или я неправильно записал php_value в .htaccess. Подскажите, плиз, какая может быть причина? Спасибо

Причина может быть в самой Joomla. В настройках Joomla есть параметр "Максимальный размер загружаемых файлов". Измените его. Также проблема может быть в Вашем хостинге, который не позволяет менять параметры через .htaccess.

Спасибо, Михаил. Буду пробовать.

Михаил, а вы можете написать статью про обрезку изображений?

Хорошо, напишу эту статью.

Данный вопрос вы можете задать своему хостеру. Но в целом да,скорее всего так и есть.Обычно размер аттача одного файла не может превышать 30-50 мегабайт

Опция MAX_FILE_SIZE не должна позволять передачу файлов, размер которых превышает лимит, установленный конфигурационной директивой upload_max_filesize в php.ini . Ограничение по умолчанию составляет 2 мегабайта.

В случае, если установлены ограничения памяти, вам может понадобиться увеличить значение опции memory_limit. Убедитесь в том, что значение memory_limit достаточно велико.

В случае, если опция max_execution_time установлена слишком маленьким значением, необходимое время работы скрипта может превышать это значение. Убедитесь в том, что значение max_execution_time достаточно велико.

Замечание: Директива max_execution_time касается исключительно времени, используемого непосредственно самим скриптом. Время, потраченное на внешние действия, такие как системные вызовы при помощи функции system() или sleep() , обращения к базе данных, а также время, потраченное на загрузку файла и другие действия, происходящие вне скрипта, не учитываются при определении максимально допустимого промежутка времени, отведённого для выполнения скрипта.

Директива max_input_time указывает максимально допустимое время в секундах для получения входящих данных, в том числе и загружаемых файлов. В случае, если вы имеете дело с несколькими или большими файлами, либо удалённые пользователи используют медленный канал, ограничение по умолчанию в 60 секунд может быть превышено.

Если директива post_max_size слишком мала, большие файлы не смогут быть загружены на сервер. Убедитесь, что значение директивы post_max_size достаточно велико.

Опция max_file_uploads контролирует максимальное количество загружаемых файлов в течение одного запроса. Если загружается большее количество файлов, чем указано в этом ограничении, то массив $_FILES прекратит дальнейшую обработку файлов по достижении этого ограничения. Например, если max_file_uploads установлено в 10 , то $_FILES никогда не будет содержать больше 10 элементов.

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

Поскольку разные системы по-разному работают с файловой структурой, нет никаких гарантий того, что файлы с экзотическими именами (например, которые содержат пробельные символы) будут обработаны корректно.

Разработчики не должны использовать одинаковые имена для обычных полей ввода (тег input ) и полей выбора файла в пределах одной и той же формы (например, используя имя для тега input наподобие foo[] ).

Каждый запуск PHP скрипта требует использования системных ресурсов: оперативной памяти и времени центрального процессора. Если запущено слишком много PHP скриптов, то в операционной системе, в которой работает веб-сервер, может закончиться память, и система зависнет. Такое может произойти, если накопиться слишком много запущенных PHP скриптов. Некоторые скрипты написаны плохо (содержат логические ошибки приводящие к бесконечным циклам и бесконечной работе) и поэтому со временем даже на малопосещаемом сервере может накопиться слишком много запущенных процессов, которые израсходовали все ресурсы.

Именно по этой причине в PHP установлены лимиты на максимальное время выполнение скриптов и на максимальное потребление ими памяти — лучше закрыть несколько дочерних процессов веб-сервера (которые, возможно, просто зависли), чем допустить полное зависание всего сервера.

Но бывают и обратные ситуации — по своим задачам PHP скрипт может требовать длительного времени выполнения и (или) большого объёма оперативной памяти. По этой причине возникает необходимость увеличить лимиты.

Для увеличения лимитов нужно изменить значение директив в главном конфигурационном файле PHP у которого имя php.ini и если вы устанавливали веб-сервер по этой инструкции, то путь до данного файла c:\Server\bin\PHP\php.ini.

Итак, откройте данный файл текстовым редактором:


Для увеличения максимального времени выполнения скрипта измените значение (цифра означает секунды):

Для установки максимального количество памяти, которое может использовать скрипт (цифра без буквы означает размер в байтах, также можно использовать буквы: K (для килобайт), M (для мегабайт) и G (для гигабайт)):

Директива для установки максимального размера загружаемого на сервер файла. Изначально установлен очень маленький размер – только два мегабайта. Например, при загрузке базы данных в phpMyAdmin, не получится загрузить файл больше 2 мегабайт до тех пор, пока не будет изменён этот пункт настройки:

Следующая опция устанавливает максимальное количество данных, которые будут приняты при отправке методом POST:

Максимальное количество файлов для загрузки за один раз

После внесения изменений в файл php.ini необходимо перезагрузить веб-сервер, чтобы изменения вступили в силу:

Если вас интересуют подробности по данным директивам, а также описание способов, которыми можно поменять время на выполнение скрипта прямо в самом скрипте, то смотрите более подробный материал «Как увеличить память и время для PHP скриптов».

По умолчанию WordPress устанавливает небольшой лимит на размер загружаемых изображений, видеороликов и других файлов. Аналогичная ситуация с PHP memory limit , который сказывается на возможности запускать плагины и скрипты.

Если вы запускаете сайт с большим количеством контента, эти лимиты могут стать проблемой. Можно получить ошибку при загрузке:

Объем загружаемого файла превышает ограничение, заданное директивой upload_max_filesize в файле php.ini Неустранимая ошибка: допустимый размер памяти 12345678 байт исчерпан (вы пытались выделить 2345678 байт) в /home/your-username/public_html/wp-includes/plugin.php в строке 1000

Рассмотрим наиболее эффективные способы увеличения этих лимитов на сервере. Начнем с memory limit php ini .

Обновление файла php.ini

Если вы используете CPanel , перейдите в раздел « Файлы » и нажмите кнопку « Диспетчер файлов ». Убедитесь, что установлен флажок « Показать скрытые файлы », а затем нажмите на кнопку « Перейти ».

Выберите папку wp-admin и найдите файл php.ini или php5.ini . Если такого файла нет, создайте его, нажав на кнопку « Создать файл », расположенную в верхнем левом углу. Назовите файл php.ini и нажмите во всплывающем окне кнопку « Создать файл »:

Обновление файла php.ini

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

Прежде чем проверить, не исчезла ли ошибка, очистите кэш браузера.

Редактирование файла .htaccess

Если редактирование php.ini не помогло, попробуйте изменить файл .htaccess . Добавьте приведенный ниже код в конец файла:

Измените значения php ini set memory limit так, как вам нужно. Не забудьте сохранить файл и очистить кэш браузера.

Изменение файла wp-config.php

Сохраните файл и очистите кэш браузера.

Изменение лимитов в WHM

Если сайт размещен на VPS или выделенном сервере, можно попробовать изменить лимиты в WHM .

После того, как вы вошли в систему, перейдите в раздел Конфигурация сервера> Настройки > PHP .

Изменение лимитов в WHM

Введите нужные вам значения и нажмите кнопку « Сохранить ».

Затем перейдите в раздел Конфигурация служб> Редактор конфигурации PHP . Прокрутите страницу вниз до разделов memory_limit и upload_max_filesize :

Изменение лимитов в WHM - 2

Введите необходимые значения. В разделе « Параметры и информация » найдите memory_limit и задайте то же значение, которое вы установили в memory limit php ini и .htaccess .

Заключение

Мы рассмотрели все способы решения данной проблемы. Наслаждайтесь возможностью загружать большие файлы и продолжайте использовать на своем сайте плагины WordPress . Внесенные в php memory limit htaccess изменения должны вступить в силу через несколько минут, после чего можно будет приступить к работе с новыми параметрами.

Если нужно загрузить большие файлы только один раз, попробуйте сделать это через FTP . Обычно файлы, загруженные через FTP в каталог /wp-content/uploads/ , не отображаются в библиотеке медиа. Но с помощью плагина Media from FTP можно отобразить их всего в несколько кликов.

Если ни один из вариантов не дал результата, свяжитесь со своим хостинг-провайдером.

Пожалуйста, опубликуйте ваши комментарии по текущей теме статьи. За комментарии, подписки, дизлайки, отклики, лайки огромное вам спасибо!

Дайте знать, что вы думаете по этой теме статьи в комментариях. За комментарии, отклики, дизлайки, лайки, подписки огромное вам спасибо!

Читайте также: