PHP не может загружать изображения больше ~ 6500 пикселей (размер файла не имеет значения)

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

Попробовав его несколько раз, я пришел к выводу, что изображения с более высоким разрешением, чем что-то около 6500 пикселей в ширину, не загружаются.

Я также обнаружил, что размер файла, похоже, не имеет значения, поскольку изображение размером 1,4 МБ с разрешением более 6500 пикселей не загружается, а другое изображение с 4,8 МБ, но с небольшим разрешением загружается без каких-либо проблем.

Почему-то причина, по которой изображение не загружается, связана с разрешением, а не с размером файла.

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

PHP код:

move_uploaded_file($imageUploadFile, $taget_original)

php.ini

post_max_size=10000M
upload_max_filesize=10000M

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

Это действительно важно, так как я хочу иметь возможность загружать изображения размером от 8k до 16k. На данный момент это не работает, даже если размер файла должен быть достаточно маленьким, по какой-то причине изображение не будет загружено.

4 ответа

Решение

Я бы смотрел не в отдел размера загрузки, а в отдел (разрешенный) размер памяти (например, memory_limit. Держу пари, вы используете ImageMagick или что-то еще, чтобы что-то сделать с изображением.

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

Я бы попробовал что-то вроде:

$limit = 2 * (1024 * 1024 * 1024); // 2Gb

// set memory limit
ini_set(‘memory_limit’, $limit);  // For testing purposes you could try -1 (for unlimited) instead of $limit
// pixel cache max size
IMagick::setResourceLimit(imagick::RESOURCETYPE_MEMORY, $limit);
// maximum amount of memory map to allocate for the pixel cache
IMagick::setResourceLimit(imagick::RESOURCETYPE_MAP, $limit);

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

Некоторые обновления:

Я немного изучил свое программирование на javascript и нашел несколько интересных неработающих реализаций.

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

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

В любом случае я обновлю этот вопрос, как только попытаюсь все исправить.

У меня был похожий случай в будущем. Довольно странное решение, но у меня оно сработало.

Попробуйте указать размер с помощью MB, а не M

upload_max_filesize = 256MB
post_max_size = 256MB

Он должен работать. Если нет, попробуйте увеличитьmemory_limit

Я надеюсь, что это помогает

Есть несколько мест, где это может потерпеть неудачу:

  • размер POST разрешенный веб - сервер (это основывают 64 кодируется, следовательно, больше, чем размер файла)
  • срок позволил вебсервером для клиента, чтобы сделать запрос
  • максимальный размер загружаемого файла допускается PHP
  • память, доступная в PHP для загрузки и обработки изображения (при условии, что вы делаете что-то кроме move_uplaoded_file()

За исключением последнего, это не имеет ничего общего с размерами изображения.

Другие вопросы по тегам