У меня было много проблем с загрузкой изображений пользователями на моем сайте.
Они могут загружать до 6 изображений
Первоначально мне пришлось изменить значения в php.ini, чтобы:
upload_max_filesize = 2000M post_max_size = 2000M max_execution_time = 120 max_file_uploads = 7 memory_limit=128M
Мне пришлось переходить на это, так как возникали всевозможные ошибки, такие как нехватка памяти, превышение максимального количества сообщений и т. Д.
Все шло нормально, пока я не проверил свой журнал ошибок, который содержал:
[11-Jun-2011 04:33:06] PHP Warning: Unknown: POST Content-Length из 113 байт превышает предел -1988100096 байт в Unknown on line 0 [11-Jun-2011 04:33:12] PHP Warning: Unknown: POST Content-Length из 75 байт превышает предел -1988100096 байт в Unknown on line 0 [11-Jun-2011 04:33:27] PHP Warning: Unknown: POST Content-Length из 74 байтов превышает предел -1988100096 байт в Unknown в строке 0 [11-Jun-2011 04:33:34] PHP Warning: Unknown: POST Content-Length из 75 байт превышает предел -1988100096 байт в Unknown в строке 0 [11-Jun-2011 04:33:43] PHP Warning: Unknown: POST Content-Length из 77 байтов превышает предел -1988100096 байт в Unknown в строке 0 [11-Jun-2011 04:33:48] PHP Warning: Unknown: POST Content-Length из 74 байтов превышает предел -1988100096 байт в Unknown on line 0 [11-Jun-2011 04:33:53] PHP Warning: Unknown: POST Content-Length из 75 байт превышает предел -1988100096 байт в Unknown on line 0 [11-Jun-2011 04:34:20] PHP Warning: Unknown: POST Content-Length из 133 байтов превышает предел -1988100096 байтов в Unknown в строке 0 [11-Jun-2011 04:35:29] PHP Warning: Unknown: POST Content-Length из 131 байта превышает предел -1988100096 байтов в Unknown в строке 0 [11-Jun-2011 04:36:00] PHP Warning: Unknown: POST Content-Length из 113 байт превышает предел -1988100096 байтов в Unknown в строке 0 [11-Jun-2011 04:36:06] PHP Warning: Unknown: POST Content-Length из 75 байт превышает предел -1988100096 байт в Unknown в строке 0 [11-Jun-2011 04:36:34] PHP Warning: Unknown: POST Content-Length из 116 байтов превышает предел -1988100096 байт в Unknown в строке 0
если я изменю значение post max назад назад 8M, я получаю сообщение следующим образом:
PHP Warning: POST Content-Length из 11933650 байт превышает предел 8388608 байт в Unknown в строке 0
Любые идеи, в которых я ошибаюсь?
На некоторых 32- 2000M
системах PHP будет использовать параметры памяти, такие как 2000M
или 2G
и преобразовать их в целое число байтов, не выполнив проверку границы. Затем число, начинающееся с 2G
или 2048M
будет равно -2147483648
байт.
Некоторые версии PHP ограничивают это вверху, поэтому он не переходит в отрицательные числа (это 32-разрядное целое число со знаком).
Если вы хотите достичь максимально возможного количества байтов в такой системе, используйте 2147483647
. Это равно двум гигабайтам минус один байт.
Альтернативно, если вам нужно иметь дело с большими данными, рассмотрите 64-битную систему.
Кроме того, вы должны учитывать следующее:
Согласно руководству PHP , параметр memory_limit
является более важным. Если он не обладает достаточной памятью, тогда будет проверяться размер данных после данных, но PHP не будет иметь достаточной памяти для фактического обработки пост-данных. Вы получите еще одну ошибку, чем превышение памяти. Поэтому, когда вы настраиваете свой PHP, обратите внимание, что post_max_size
меньше, чем memory_limit
.
В вашем примере memory_limit
равен 128M
, поэтому он не может обрабатывать пост-данные размером более ~ 128 мегабайт.
( Это сообщение в блоге показывает, что может случиться и как велики настройки памяти на 32-битных и 64-битных системах )
Похоже, ваш «2000M» превышает предел целого числа. Из руководства :
PHP позволяет использовать ярлыки для значений бит, включая K (кило), M (мега) и G (giga). PHP будет делать преобразования автоматически, если вы используете любой из них. Будьте осторожны, чтобы не превышать 32-разрядное целое число со знаком (если вы используете 32-разрядные версии), так как это приведет к сбою вашего сценария.
попробуйте меньшее значение, скажем, 1000M
. В любом случае, 2 гигабайта поступающих данных вряд ли вероятны.