Сегодня мой маленький друг задал такой вопрос в группе:
Это происходит из-за нехватки памяти. PHP
Программа завершает работу напрямую, и отчет об ошибке выглядит следующим образом:
Изображение выше означает, что максимальная память, которую мы можем использовать, составляет 8 М, но для обработки этого изображения требуется дополнительный 41 байт, что приведет к нехватке памяти. Это серьезная ошибка. Перед началом работы с изображением вся информация с изображения должна быть считана в память. В то же время использование другой части памяти совпадает с обработкой вычислений и кэшированием выходных данных, поэтому использование объема памяти по-прежнему связано с размером изображения.
PHP
Используется обработка китайских картинок. GD
Библиотека, эта библиотека предоставляет множество способов PHP
для более удобного управления изображениями. Форматы поддерживаемых изображений следующие:
Возвращаясь к первоначальной проблеме, этот маленький партнер должен иметь дело с изображениями с высоким разрешением. Размер изображений обязательно будет большим, поэтому памяти будет недостаточно. Есть еще много решений.
1. Установите максимальный загружаемый размер изображения
Интерфейс может определить размер перед загрузкой. Если он превышает максимальное значение, он не будет запрашивать интерфейс напрямую. В то же время, в целях безопасности серверная часть также должна определить размер после получения запроса, чтобы предотвратить аварийный выход программы.
2. Сжатые изображения
3. Закрытие memory_limit
Мелкие партнеры в группе наконец-то воспользовались одним из них. Простой и грубый способ Решить эту проблему и отключить ее непосредственно в PHP memory_limit
:
set_time_limit(0); @ini_set('memory_limit','-1');
Это решает проблему, но это не элегантно и не безопасно. Это одно и то же. php
.ini
В файле конфигурации memory_limit
Установка большого значения также может решить проблему ____________
memory_limit = 256M
Это также может быть задано в PHP-коде:
ini_set('memory_limit', '256M');
Выше мы будем memory_limit
Фиксированные параметры, что приносит недостаток, потому что в большинстве случаев не требуется такой большой объем памяти, небольшая трата ресурсов, лучший способ-установить в соответствии с потребностями. memory_limit
Я написал следующий метод для справки:
public function setMemoryLimit($filename){ // Control execution time set_time_limit(50); $maxMemoryUsage = 256M; $width = 0; $height = 0; $size = ini_get('memory_limit'); // Get picture size list($width, $height) = getimagesize($filename); // Calculate the required memory and convert it into'M'units // 4 because a PNG picture has 4 bytes per pixel // 1.5 is an adjustment factor because memory_limit is not so precise // Details can be found at http://php.net/image creation from jpeg#76968 $size = $size + floor(($width * $height * 4 * 1.5 + 1048576) / 1048576); if ($size > $maxMemoryUsage){ $size = $maxMemoryUsage; } // Update ini_set('memory_limit',$size.'M'); }
Наконец, скажите это онлайн. GD
Библиотеки требуют много памяти, но я не тестировал их здесь. Есть один на Github. C
Проект называется libvips/libvips
:
Это может повысить скорость обработки изображений, не занимая много памяти. Часть 2: https://github.com/libvips/li… у него есть время, чтобы учиться.