Невозможно загрузить файлы размером более 500 МБ, пока для upload_max_filesize установлено значение 1G

#php #nginx #file-upload #large-files

#php #nginx #загрузка файла #большие файлы

Вопрос:

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

Я могу загрузить файл размером 490 МБ абсолютно нормально. Я не могу загрузить файл размером 562,8 МБ.

Я использую php 7.0.11 с fpm, nginx 1.11.3, ubuntu 16 и использую Laravel 5.1

Мои настройки php ini:

upload_max_filesize 1 ГБ

post_max_size 1 ГБ

memory_limit 1 ГБ (на самом деле это не нужно, но я все равно пробовал)

Мои настройки nginx:

client_max_body_size 1G

Я не нашел никаких ссылок на какие-либо другие переменные, которые необходимо изменить или которые могут помешать.

Когда я загружаю $_FILES , выглядит так:

 ["file"]=>
  array(5) {
    ["name"]=> string(36) "CSBgGvDIAaZtbC4lmliLevHf0bAnWiKM.rar"
    ["type"]=> string(0) ""
    ["tmp_name"]=> string(0) ""
    ["error"]=> int(1)
    ["size"]=> int(0)
  }
  

В моих журналах ошибок nginx или php ничего нет.

$_SERVER['content_length'] равно 652844444, что является правильной длиной файла.

Значение 'error' указано как 1. Я не знаю, равно ли это 1, как в true, или 1, как в соответствующем сообщении об ошибке. В документах php указано сообщение об ошибке для 1 в документах как:

Загруженный файл превышает директиву upload_max_filesize в php.ini.

Но оба:

 echo phpinfo();
echo ini_get('upload_max_filesize');
  

Покажите 1 ГБ, чтобы файл не превышал его, потому что он составляет 562,8 МБ.

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

Я также использую Cloudflare, но он отключен для этого поддомена, а ограничения для Cloudflare составляют 100 МБ, а не 500 МБ, поэтому я не думаю, что это как-то связано с этим.

Есть ли какой-либо способ дальнейшей отладки этого? На данный момент я в полной растерянности.

Комментарии:

1. php.net/manual/en/features.file-upload.errors.php в соответствии с этим что-то в вашей конфигурации PHP INI не сработало. Если вы используете PHP-FPM, вам может потребоваться убедиться, что вы меняете правильные конфигурации. Это странно, когда дело доходит до того, что он читает.

2. Это то, что я процитировал? Можете ли вы объяснить, что вы имеете в виду? Если я делаю ini_get('upload_max_filesize') на той же странице, что и форма, наверняка используются настройки php.ini.

3. Может быть, это что-то с таймаутом? Вы тестируете загрузку на локальном хосте или на внешнем сервере? Вы можете попробовать это: easyengine.io/tutorials/php/increase-script-execution-time

4. Я думаю, вопрос больше похож на то, выполняется ini_get ли запуск в том же скрипте, где обрабатывается загрузка?

5. Если время ожидания истекло, я бы не смог добраться до файла php и смог var_dump($_FILES) бы, не так ли? Из того, что я могу сказать, нет тайм-аута для файлов, которые все равно будут обрабатывать php

Ответ №1:

Итак, я решил это. Действительно очень досадно. Проблема заключалась в том, что я ввел 1GB вместо 1G в php.ini. Сообщений об ошибках не выдавалось, и вообще не было ясно, что он не использует 1 Гигабайт. Но php.ini не распознает такие вещи, как 1 КБ, 1 МБ или 1 ГБ, которые вы должны использовать без B.

Урок усвоен, много времени потрачено впустую.

Ответ №2:

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

Комментарии:

1. Это дроплет digitalocean с Ubuntu 16. Я не верю, что существуют какие-либо такие ограничения. Google ничего не выдал

Ответ №3:

если вы используете плагин для сайта wp, рассмотрите возможность изменения обеих констант в php.in (после wp-config.php обновление не сработало. так много разработчиков предлагают в StackOverflow) после того, как это сработало.ubuntu 20
Расположение

sudo nano /etc/php/7.4/apache2/php.ini

Константа

 post_max_size = 1G

upload_max_filesize = 1G