вызов imageantialias для неопределенной ошибки функции с установленным GD - PullRequest
17 голосов
/ 22 апреля 2011

Мне нужна помощь с 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 ]

17 голосов
/ 22 апреля 2011

ОБНОВЛЕНИЕ : Кажется, что функция 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!

2 голосов
/ 12 августа 2013

Похоже, что 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, иди и будь креативен с ней!

2 голосов
/ 07 января 2013

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

1 голос
/ 07 ноября 2017

Согласно журналу изменений PHP Manual для PHP версии 7.2.0 :

imageantialias () теперь общедоступно.Раньше он был доступен только в том случае, если PHP был скомпилирован с помощью связанной версии библиотеки GD.

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

0 голосов
/ 22 апреля 2011

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

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

0 голосов
/ 22 апреля 2011

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

UPDATE: GD установлен. Это загадка.

...