Нет ошибок при загрузке действительно большого файла в PHP? - PullRequest
3 голосов
/ 05 марта 2009

У меня есть форма PHP для загрузки файлов, и она отлично работает и отображает сообщение об ошибке, если что-то пошло не так. Это все хорошо.

Проблема в том, что когда я тестирую действительно большой файл, он просто обновляет страницу, как будто я вообще не отправлял файл, и ни одна из переменных $ _POST из формы даже не отправляется на сервер. 1003 *

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

Кто-нибудь знает, что происходит?

Ответы [ 6 ]

13 голосов
/ 05 марта 2009

Проверьте ваш PHP ini-файл, который определяет размер файла, который PHP разрешает загружать. Эти переменные важны:

  • максимальный размер загружаемого файла (upload_max_filesize)
  • максимальный размер данных поста (post_max_size)
  • ограничение памяти (memory_limit)

Все загрузки вне этих границ будут игнорироваться или ошибаться в зависимости от ваших настроек.

Этот раздел в документации имеет лучшее резюме: http://ca3.php.net/manual/en/features.file-upload.common-pitfalls.php

РЕДАКТИРОВАТЬ: также обратите внимание, что большинство браузеров не будут отправлять загрузки размером более 2 ГБ. Эта ссылка устарела, но дает представление: http://www.motobit.com/help/scptutl/pa98.htm. У кого-нибудь есть лучший источник информации по этому вопросу?

Есть также ограничения, которые могут быть наложены сервером, например, Apache: http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody

Чтобы действительно увидеть, что происходит, вам, вероятно, следует проверить журналы вашего веб-сервера, проверить лимит загрузки браузера (если вы используете Firefox) и попытаться выяснить, генерирует ли print_r($_FILES) какие-либо полезные номера ошибок. Если ничего не помогает, попробуйте монитор сетевого трафика в firebug. Ключ заключается в том, чтобы определить, идет ли запрос на сервер, и выглядит ли он (включая заголовки) так. Как только вы продвинулись так далеко в цепочке, вы можете вернуться и посмотреть, как PHP обрабатывает загрузку.

6 голосов
/ 05 марта 2009

Ваш $ _POST, скорее всего, пуст, поскольку загрузка превысила директиву post_max_size :

Со страницы директив PHP :

Если размер почтовых данных больше чем post_max_size, $ _POST и суперглобалы $ _FILES пусты . Это можно отслеживать различными способами, например передав переменную $ _GET скрипт, обрабатывающий данные, т.е. <form action="edit.php?processed=1"> и затем проверяем, является ли $ _GET ['обработано'] установлен.

1 голос
/ 05 марта 2009

вы не можете знать размер загружаемого файла, пока он не будет загружен полностью. поэтому, если вы хотите определить размер файла, а затем показать ошибку для больших файлов, сначала вы должны загрузить файл, а затем проверить размер файла. Для загрузки большого файла вы должны установить 2 параметра в вашем файле конфигурации php, php.ini. откройте его и найдите «upload_max_filesize» и установите максимальное значение, которое вы хотите. затем вы должны установить максимальное значение для параметров POST, потому что загруженные файлы принимаются через метод HTTP POST. найдите "post_max_size" и установите для него большое значение.

0 голосов
/ 25 ноября 2016

отдельно от вариантов, как ответили предыдущие пользователи:

max upload filesize (upload_max_filesize)
max post data size (post_max_size)
memory limit (memory_limit)

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

max_execution_time
0 голосов
/ 28 марта 2009

максимальный размер загружаемого файла (upload_max_filesize) максимальный размер данных поста (post_max_size) директивы, которые вам нужно установить. Я протестировал его с несколькими ОС, браузерами и т. Д., И это единственное, о чем вам нужно беспокоиться.

0 голосов
/ 05 марта 2009

Я бы реализовал простой скрипт, который выполняет обычные ajax-вызовы, чтобы узнать, сколько было выполнено загрузки. Затем вы можете реализовать какой-то индикатор выполнения. В сети есть пара примеров:

http://martinjansen.com/2007/04/28/file-upload-progress-bars-with-php/

...