Вызов 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) это:

  1. скопируйте строку компиляции, которая отображается в вашем phpinfo()
  2. добавить необходимый новый флаг
  3. бежать
    • ./configure ... все вещи из вашего phpinfo плюс новый флаг
    • очистить
    • делать
    • сделать установку
  4. посмотрите на свой 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.

Так что есть несколько вариантов, чтобы это исправить.

Вот обходной путь для вашей проблемы Просто скачайте rpm, извлеките отсюда gd-bundled.so и замените оригинальный gd.so им.

Эта функция является частью библиотеки GD. Библиотека не может быть установлена ​​в вашей среде PHP.

Подробности о том, как включить GD можно найти здесь: http://www.php.net/manual/en/image.installation.php

Это означает, что вы либо написали imageantialias() функционировать неправильно, или вы не определили эту функцию в своем коде или коде третьей стороны, которому она принадлежит, не были включены в ваш текущий документ.

ОБНОВЛЕНИЕ: GD установлен. Это загадка

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