在MAMP上安装YAML Pecl PHP扩展

时间:2011-07-16 11:03:35

标签: php yaml mamp configure pecl

我正在与Git上的许多开发人员合作开发一个项目,而现有的代码库使用PECL YAML PHP扩展(v1.0.1)。

我已经尝试了很多步骤在我的MAMP服务器上安装PECL YAML扩展,并且没有任何乐趣!

我假设其他开发人员都在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:math-o,但在第0行的Unknown中错误的架构“

经过大量的时间谷歌搜索后,我意识到我并不孤单,这是因为我使用“./pecl i yaml”编译的扩展名是64位版本

“file yaml.so”: yaml.so:Mach-O 64位包x86_64

但是,将其与我的MAMP设置上的工作扩展名进行比较,即“file xdebug.so”:

  

xdebug.so:具有2个架构的Mach-O通用二进制文件   xdebug.so(用于架构ppc):Mach-O bundle ppc
  xdebug.so(对于架构i386):Mach-O包i386

所以我发现了一些帮助我确定确切问题的博客。

无法在32位MAMP服务器上运行64位扩展 - 这是有道理的。

我的安装过程是:

  • 下载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“

  • 将创建的模块从modules / yaml.so复制到MAMP:
      

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

  •   

除了我,上述解决方案似乎对所有人都有效。

我的错误日志现在报告:

  

[16-Jul-2011 11:09:25] PHP警告:PHP启动:无效的库(可能不是PHP库)'yaml.so'在第0行的Unknown中

我现在花了好几个小时就需要你的帮助。

我实际上要做的就是用PHP解析YAML。

我有两个选择:

  1. 修复它并呼出一种缓解的迹象

  2. 使用PHP YAML解析类,并在将来避免使用此扩展

  3. 选项2的问题是由于我无法安装扩展程序,代码库会发生变化。

    非常感谢任何建议或解决方案。

    干杯

4 个答案:

答案 0 :(得分:17)

如果您安装了Homebrew,则可以执行以下操作:

brew install libyaml --universal

否则请安装最新的libyaml

你可以为32&通过将CFFLAGSLDFLAGS设置为-arch i386 -arch x86_64来支持64位英特尔。

然后,安装PEAR / PECL(您也可以按照here

的说明进行操作
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文件。


nice article将演示如何手动安装MAMP堆栈。

答案 1 :(得分:3)

嗯,这不是解决问题的真正办法。但是如果你只想解析YAML我会建议使用Symfony YAML class,这是一个非常容易使用的类来解析YAML。速度还可以,错误信息非常清楚。

是的,它会改变代码库,但这不是一件坏事。我认为这是一个优点,你可以避免使用这样的PECL扩展,因为你现在遇到的问题,如果你需要切换到另一台服务器,你会很高兴你不必检查/安装25个PECL扩展(和他们正确的版本。)

所以我的建议,切换到YAML课程。它会让生活更轻松! :)

答案 2 :(得分:1)

并非所有C代码都是可移植的。 pecl扩展可能存在可移植性问题,因为它可能是在linux上运行的。

如果你感觉很大胆,你可以找出错误是什么,修复它并将修复程序提交给扩展作者。

如果没有,那么使用纯PHP解决方案可能就好了。

此外,如果您只是将Mac上的代码作为开发环境运行,那么在以下情况下您可能不需要它:1)生产是linux或2)该功能不是功能的核心

但是,根据我的经验,我发现最好将您的开发环境与生产箱相同的操作系统和发行版。我使用VirtualBox在VM中运行linux,然后通过SAMBA或NFS映射文件。

希望有帮助...

答案 3 :(得分:0)

基于成功克服围绕MAMP和其他.so模块的问题:[相同类型的错误]

第1步:确保您的MAMP is Version 2版本,因为它包含通用二进制安装程序(32位和64位)

第2步:Modify your Make file并删除其他编译器版本,类似于:

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