Установите расширение 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 - имеет смысл.
Мой процесс установки:
Вышеупомянутое решение, похоже, сработало для всех, кроме меня.
Мой журнал ошибок теперь сообщает об этом:
[16-июл-2011 11:09:25] PHP Предупреждение: запуск PHP: недопустимая библиотека (возможно, не библиотека PHP) 'yaml.so' в Unknown on line 0
Я потратил пару часов на это сейчас и нуждаюсь в вашей помощи.
Все, что я на самом деле пытаюсь сделать, это разобрать YAML в PHP.
У меня есть 2 варианта:
Проблема с вариантом 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 .....