Вызов imageantialias для неопределенной ошибки функции с установленным GD
Мне нужна помощь с PHP-скриптом. Это CMS, которая была внедрена в веб-сайт. При попытке добавить новый продукт ИЗОБРАЖЕНИЕ или при редактировании текущих изображений я получаю следующую ошибку:
Неустранимая ошибка: вызов неопределенной функции imageantialias() в /home/mounts/home/m/mclh/web/admin/library/functions.php в строке 233
Это мой код для этой области:
if ($tmpDest['extension'] == "gif" || $tmpDest['extension'] == "jpg")
{
$destFile = substr_replace($destFile, 'jpg', -3);
$dest = imagecreatetruecolor($w, $h);
imageantialias($dest, TRUE);
} elseif ($tmpDest['extension'] == "png") {
$dest = imagecreatetruecolor($w, $h);
imageantialias($dest, TRUE);
} else {
return false;
}
Линия 233 является 5-й линией вниз.
6 ответов
ОБНОВЛЕНИЕ: Кажется, функция imageantialias()
доступно только в том случае, если PHP скомпилирован с GD, поэтому недостаточно включить расширение через файл расширения.
Из руководства по PHP:
Примечание. Эта функция доступна только в том случае, если PHP скомпилирован с помощью связанной версии библиотеки GD.
Пожалуйста, проверьте ваш phpinfo()
и посмотрим, найдете ли вы флаг --with-gd=shared
(или похожий флаг, может быть, просто --with-gd
) там. Если вы не можете его найти, ваш PHP должен быть перекомпилирован с этим флагом.
Более подробно: расширения PHP могут быть загружены путем включения файла.dll (Windows) или.so (Unix) через php.ini, или они могут быть скомпилированы с помощью PHP. Компиляция звучит страшно и безумно, но на самом деле это действительно легко. Все что вам нужно сделать (Unix) это:
- скопируйте строку компиляции, которая отображается в вашем phpinfo()
- добавить необходимый новый флаг
- бежать
- ./configure ... все вещи из вашего phpinfo плюс новый флаг
- очистить
- делать
- сделать установку
- посмотрите на свой phpinfo() и улыбнитесь:)
Первый ответ (не оказался правильным):
imageantialias()
является функцией расширения PHP GD. GD установлен и правильно настроен?
Из вашего кода кажется, что GD установлен потому что imagecreatetruecolor()
также является функцией GD и, кажется, работает. Это приводит к выводу, что вы используете версию PHP до 4.3.2, которая не поддерживает imageantialias()
,
Пожалуйста, посмотрите на свой phpinfo(), чтобы убедиться, что мои выводы верны. Там вы увидите, какую версию PHP вы используете, а также увидите, установлен ли GD и работает ли он!
Похоже, что Debian / Ubuntu PHP не связывает библиотеку GD с ней, по какой-то причине безопасности. Вы должны перекомпилировать PHP, следуйте этому полезному пошаговому руководству по Debian / Ubuntu: http://www.maxiwebs.co.uk/gd-bundled/compilation.php
Откройте терминал. Чтобы войти в систему, введите su и введите свой пароль root при появлении запроса.
Загрузите несколько пакетов, которые нам понадобятся для установки. Введите apt-get install build-essential debhelper fakeroot dpkg-dev mysql-server. Когда при установке MySQL запрашивается пароль root, придумайте пароль и сохраните его. Измените ваш текущий каталог на исходный. CD / USR / SRC.
Загрузите исходный код PHP 5, набрав apt-get source php5. Нам также нужны зависимости PHP 5. Чтобы скачать их, введите apt-get build-dep php5.
Зайдите в загруженный каталог PHP. CD php5-XXXX. просто нажмите после того, как вы набрали php5-, чтобы завершить имя папки.
Теперь нам нужно отредактировать файл конфигурации, чтобы превратить его в связанную версию GD. Наберите nano debian/rules.
Найдите строку с надписью --with-gd=shared,/usr --enable-gd-native-ttf \ и измените ее на --with-gd=shared --enable-gd-native-ttf \, удалив, / USR. (Нажмите Ctrl+ W, чтобы найти что-то, если вы ищете GD, это рядом со вторым появлением). Чтобы сохранить файл, нам нужно нажать ctrl+x, затем нажать y, а затем ввести.
Теперь нам нужно отредактировать установочный файл MySQL. Введите nano debian/setup-mysql.sh. Примечание: если этот файл не существует, не беспокойтесь, вы можете пропустить шаги 10 и 11.
Найдите строку $mysqld > $datadir/run.log 2>&1 & и измените ее на $mysqld --user=root > $datadir/run.log 2>&1 &, добавив к ней --user = root. Чтобы сохранить файл, нам нужно нажать ctrl+x, затем нажать y, а затем ввести.
Теперь мы завершили настройку, теперь нам нужно скомпилировать ее. Введите dpkg-buildpackage -rfakeroot или, если вы используете Ubuntu 11.10, введите dpkg-buildpackage -d, это займет некоторое время.
Когда это будет сделано, вы должны загрузить файлы.deb в родительский каталог. Найдите тот, который начинается с php5-gd.
Установите его, дважды щелкнув по нему, или из терминала введите dpkg -i php5-gdXXXXXXX, просто нажмите после ввода php5-gd, чтобы ввести имя файла.
Теперь нам нужно помешать обновлениям заменить вашу новую блестящую библиотеку GD обычной не связанной версией, удерживая пакет. Запустите следующую команду: apt-get install wajig. Скажи да, чтобы установить.
После установки введите следующее: wajig hold php5-gd.
Поздравляем! Теперь у вас есть установленная версия библиотеки GD, иди и будь креативен с ней!
Согласно журналу изменений PHP Manual для PHP версии 7.2.0:
imageantialias () теперь общедоступен. Раньше он был доступен только в том случае, если PHP был скомпилирован с помощью связанной версии библиотеки GD.
Так что есть несколько вариантов, чтобы это исправить.
- Если у вас PHP ниже версии 7.2.0, обновите его до версии PHP выше 7.2.0.
- Если вы не можете или не можете обновить php, то скомпилируйте php с
./configure
сценарий с--with-gd
флаг. - Или вы можете установить расширение php-gd без перекомпиляции PHP
Вот обходной путь для вашей проблемы Просто скачайте rpm, извлеките отсюда gd-bundled.so и замените оригинальный gd.so им.
Эта функция является частью библиотеки GD. Библиотека не может быть установлена в вашей среде PHP.
Подробности о том, как включить GD можно найти здесь: http://www.php.net/manual/en/image.installation.php
Это означает, что вы либо написали imageantialias()
функционировать неправильно, или вы не определили эту функцию в своем коде или коде третьей стороны, которому она принадлежит, не были включены в ваш текущий документ.
ОБНОВЛЕНИЕ: GD установлен. Это загадка