Установите расширение YAML Pecl PHP на MAMP

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

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

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

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

"[16-июл-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/php 5.3/lib/php/extensions/no-debug-non-zts-20090626/yaml.so: mach-o, но неправильная архитектура в Unknown в строке 0"

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

"file yaml.so": yaml.so: 64-разрядный пакет Mach-O x86_64

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

xdebug.so: универсальный двоичный файл Mach-O с двумя архитектурами
xdebug.so(для архитектуры ppc): пакет Mach-O ppc
xdebug.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./configure --disable-dependancy-tracking --disable-shared -enable-static"

  • сделать

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

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

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

Мой журнал ошибок теперь сообщает об этом:

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

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

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

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

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

  • Вместо этого используйте класс разбора PHP YAML и избегайте этого расширения в будущем

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

Приветствуются любые советы или решения.

Приветствия

Ответ 1

Если у вас установлен 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

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


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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

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

Ответ 4

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

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

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

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