xampp — Apache / PHP не может выполнить преобразование даже при вызове с абсолютным путем

Я столкнулся с действительно странной проблемой, для которой у меня нет никаких объяснений.

После настройки OS X Yosemite и моей локальной среды разработки с использованием XAMPP я установил ImageMagick через MacPorts. Все хорошо, все отлично работает в командной строке.

Тем не менее, когда выполняется через Apache и вызывается через PHP, я не получаю никакого вывода от него вообще.

Я провел обширные исследования и нашел множество подходов:

  • Установка переменной среды пути в Apache (что я пробовал)
  • Используя абсолютный путь к исполняемому файлу (что я делаю)
  • Проверка, если exec() указан как отключенная функция (которой нет)
  • Проверка, если convert даже вызывается, как в исполняемом файле (который это)

Я даже дошел до копирования convert исполняемый файл в корневой каталог локального проекта и пытается exec('./convert'); но безрезультатно. Я всегда не получаю абсолютно никакой информации от этого звонка. Даже не сообщение об ошибке. Само собой разумеется, когда я запускаю ту же самую вещь через Терминал, это работает отлично.

Я также попробовал:

  • призвание exec('ls'); чтобы увидеть, если что-нибудь подходит (да, это работает, это нормально)
  • призвание exec('which convert');где я ничего не получаю — звонок ничего не возвращает
  • призвание exec('which ls'); перепроверить, была ли проблема с which — но который работает нормально и дает мне /bin/ls в ответ.
  • обеспечение chmod 0777 в исполняемый файл — безрезультатно

Независимо от того, что я пытаюсь или делаю, convert остается полностью неприкосновенным к PHP / Apache.

Может кто-нибудь сказать мне, почему это и как это исправить?

1

Решение

Проверяя журналы ошибок Apache, я обнаружил следующее сообщение:

dyld: Library not loaded: /opt/local/lib/libfreetype.6.dylib
Referenced from: /opt/local/bin/convert
Reason: Incompatible library version: convert requires version 18.0.0 or later, but libfreetype.6.dylib provides version 15.0.0

Исследования показали, что существует общий подход, изменяющий некоторую переменную пути среды, которая применяется к Apache и его вспомогательным процессам во время работы. Однако, так как я не хотел возиться так, я пошел на несколько более грубый подход:

Я открыл терминал и пошел в самый корневой каталог моей системы. Там я побежал:

find . -name "libfreetype.6.dylib"

Это дало мне все libfreetype.6.dylib файлы, которые были доступны в моей системе. Один из них был в XAMPP lib каталог, другой был в /usr/local/lib,

Я делаю резервную копию файла в XAMPP каталог, а затем скопировал один из /usr/local/lib там.

Я тогда проверил convert снова через Apache и получил другое, очень похожее сообщение об ошибке, касающееся libexpat.1.dylib, Для этого я повторил процесс копирования, как указано выше. После этого, convert был выполнен через Apache, и проблема была решена.

1

Другие решения

Когда вы запускаете скрипты и программы через ваш веб-сервер, они запускаются другим пользователем. В Маках это обычно _www, convert приложение не может быть найдено, потому что путь к его исполняемому файлу (вероятно, /usr/local/bin) не входит в $PATH настройка среды для этого пользователя.

Самое простое решение — просто добавить в команду префикс с путем к convertто есть exec('/usr/local/bin/convert ... ');

0

По вопросам рекламы [email protected]