Нет ошибок при загрузке действительно большого файла в PHP?

StackOverflow https://stackoverflow.com/questions/615312

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

Проверьте свой ini-файл PHP, который определяет размер файла, который 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 обрабатывает загрузку.

Другие советы

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

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

  

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

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

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

http://martinjansen.com/ 2007/04/28 / файл-загрузка-пРОГРЕСС-бары-с PHP /

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

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

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

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

max_execution_time
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top