Установите расширение YAML Pecl PHP на MAMP - PullRequest
11 голосов
/ 16 июля 2011

Я работаю над проектом с несколькими разработчиками над Git, и существующая кодовая база использует расширение PECL YAML PHP (v1.0.1).

Я попытался выполнить несколько шагов для установки PECL YAMLрасширение на моем сервере MAMP и не радует!

Я предполагаю, что другие разработчики работают на Linux.

Первая пара попыток установки выявила эту ошибку в моем php_error_log:

"[16-Jul-2011 11:29:13] Предупреждение PHP: Запуск PHP: невозможно загрузить динамическую библиотеку '/Applications/MAMP/bin/php5.3/lib/php/extensions/no-debug-non-zts-20090626 / yaml.so '- dlopen (/Applications/MAMP/bin/php5.3/lib/php/extensions/no-debug-non-zts-20090626/yaml.so, 9): нет подходящего изображениянайдено. Не найдено: /Applications/MAMP/bin/php5.3/lib/php/extensions/no-debug-non-zts-20090626/yaml.so: mach-o, но неверная архитектура в Unknown в строке 0 "

После большого количества поисков в Google я понял, что я не один, и это потому, что мое расширение я скомпилировал с помощью "./pecl i yaml "был 64-битной версией

" файл yaml.so ": yaml.so: 64-битный пакет Mach-O x86_64

Однако, сравнивая это с рабочими расширениями на моей установке MAMP, т.е."file xdebug.so":

xdebug.so: универсальный двоичный файл Mach-O с 2 архитектурамиxdebug.so (для архитектуры ppc): пакет Mach-O ppcxdebug.so (для архитектуры i386): пакет Mach-O i386

Итак, я обнаружил несколько блогов, которые помогли мне точно определить проблему.

Невозможно запустить 64-битные расширения на 32-битном сервере MAMP - имеет смысл.

Мой процесс установки:

  • загрузка исходного кода PECL YAML
  • извлечение tar и cd в исходный код модуля
  • phpize внутри директории модуля
  • запустите .configure, используя команду из блогов:

    "CFLAGS = '- O3 -fno-common -arch i386 -arch x86_64 -g -Os' LDFLAGS = '- O3 -arch i386-arch x86_64 ′ CXXFLAGS = '- O3 -fno-common -arch i386 -arch x86_64 -g -Os.

  • make

  • скопировать созданный модуль из модулей / yaml.so в MAMP:

    "sudo cp modules / yaml.so / Applications / MAMP /bin / php5.3 / lib / php / extensions / no-debug-non-zts-20090626 /."

Похоже, что вышеприведенное решение работает для всех, кроме меня.

Моя ошибка вотТеперь g сообщает об этом:

[16-Jul-2011 11:09:25] Предупреждение PHP: Запуск PHP: недопустимая библиотека (возможно, не библиотека PHP), 'yaml.so' в строке Неизвестно в строке0

Я потратил пару часов на это и сейчас нуждаюсь в вашей помощи.

Все, что я на самом деле пытаюсь сделать, - это анализ YAML в PHP.

У меня есть 2 варианта:

  1. Исправить это и выдохнуть признак облегчения

  2. Вместо этого использовать класс синтаксического анализа PHP YAML и избежать этогорасширение в будущем

Проблема с вариантом 2 заключается в том, что кодовая база изменится из-за невозможности установить расширение.

Любой совет или решение будет оченьприветствуется.

Приветствия

Ответы [ 4 ]

17 голосов
/ 30 ноября 2011

Если у вас установлено Homebrew , вы можете сделать:

brew install libyaml --universal

В противном случае установите последнюю версию libyaml .

Вы можете собрать как 32-, так и 64-разрядную версию Intel, задав для CFFLAGS и LDFLAGS значение -arch i386 -arch x86_64.

Затем установите PEAR / PECL (вы также можете следовать инструкциям здесь )

wget http://pear.php.net/go-pear.phar
sudo php -d detect_unicode=0 go-pear.phar

По умолчанию он устанавливается в каталог ~/pear/. Теперь запустите

sudo ~/pear/bin/pecl install yaml

Затем позаботьтесь о файле so.


Эта хорошая статья продемонстрирует, как вы можете установить MAMP-стек вручную.

3 голосов
/ 30 ноября 2011

Ну, это не настоящее решение вашей проблемы. Но если вы хотите только проанализировать YAML, я бы предложил использовать класс Symfony YAML , это очень простой в использовании класс для анализа YAML. Скорость в порядке, а сообщения об ошибках вполне понятны.

Да, это изменит кодовую базу, но это не плохо. Я думаю, что это плюс, когда вы можете избежать использования расширения PECL, подобного этому, из-за проблем, с которыми вы сейчас сталкиваетесь, и если вам когда-нибудь понадобится переключиться на другие серверы, вы будете рады, что вам не нужно проверять / устанавливать 25 расширений PECL ( и их правильные версии).

Итак, мое предложение, переключиться на класс YAML. Это облегчит жизнь! :)

1 голос
/ 02 декабря 2011

Не весь код C является переносимым.Возможно, расширение pecl имеет проблемы с переносимостью, поскольку оно, вероятно, предназначалось для работы в linux.

Если вы чувствуете смелость, вы можете узнать, в чем заключается ошибка, исправить ее и отправить исправление вРасширение авторов.

Если нет, то использование чистого PHP-решения может оказаться подходящим вариантом.

Кроме того, если вы просто запускаете код на своем Mac в качестве среды разработки, то вам может и не потребоватьсяработать, если: 1) производство Linux или 2) функция не является основной для функциональности

Однако, по моему опыту, лучше, чтобы ваши среды разработки были такой же операционной системой и дистрибутивом, что и ваша продукциякоробка.Я бы использовал VirtualBox для запуска linux на виртуальной машине, а затем отобразил файлы через SAMBA или NFS.

Надеюсь, это поможет ...

0 голосов
/ 03 декабря 2011

Основано на успешном преодолении проблем, связанных с MAMP и другими модулями .so: [Тот же тип ошибки]

Шаг 1. Убедитесь, что ваша версия MAMP имеет версию 2 , поскольку она включаетУниверсальный двоичный установщик (32-разрядный и 64-разрядный)

Шаг 2: Измените свой файл Make и удалите другие версии компилятора, подобные:

CFLAGS = -Wc,"-arch i386" -Wc,"-arch x86_64" -Wc ....
LDFLAGS = -arch i386 -arch x86_64 .....
...