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()
За исключением последнего, это не имеет ничего общего с размерами изображения.