在MAMP上安装YAML perl PHP扩展


Install YAML Pecl PHP Extension on MAMP

我和一些开发人员在Git上做一个项目,现有的代码库使用PECL YAML PHP扩展(v1.0.1)。

我已经尝试了许多步骤来安装PECL YAML扩展在我的MAMP服务器上,没有快乐!

我假设其他开发人员都在Linux上。

第一次尝试安装时,在我的php_error_log中显示了这个错误:

"[16-07-2011 11:29:13] PHP警告:PHP启动:无法加载动态库'/Applications/MAMP/bin/php5.3/lib/PHP/extensions/no-debug-non-zts-20090626/yaml. PHP。/Applications/MAMP/bin/php5.3/lib/php/extensions/no-debug-non-zts-20090626/yaml。所以,9):没有找到合适的图像。确实发现:/应用程序/MAMP/bin/php5.3/lib/php/扩展/不-调试-非zt型- 20090626/yaml。so: mach-o,但是在第0行

经过大量的时间谷歌我意识到我并不孤单,这是因为我的扩展,我编译使用"。

"文件yaml.so":yaml。so: Mach-O 64位bundle x86_64

然而,将此与我的MAMP设置上的工作扩展进行比较,即"文件xdebug.so":

xdebug。so:具有2种架构的Mach-O通用二进制文件
xdebug。so (for architecture ppc): Mach-O bundle ppc
xdebug。so(对于架构i386): Mach-O bundle i386

所以我找到了一些博客来帮助我确定确切的问题。

不能在32位的MAMP服务器上运行64位扩展-这是有意义的。

我的安装过程是:

  • 下载PECL YAML源码
  • 提取tar和cd到模块源
  • phpize inside module directory
  • 使用blog中的命令运行.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- dependencies -tracking——disable-shared -enable-static"

  • 使

  • 从modules/yaml拷贝创建的模块。所以对MAMP来说:

    "sudo cp modules/yaml。所以/应用程序/MAMP/bin/php5.3/lib/php/扩展/不-调试-非zt型- 20090626/。"

上面的解决方案似乎对每个人都有效,除了我。

我的错误日志现在报告如下:

[16-jul 2011 11:09:25] PHP Startup: Invalid library(可能不是一个PHP库)yaml。

我已经花了好几个小时在这上面了,需要你的帮助。

我实际上是在PHP中解析YAML。

我有两个选项:

  1. 修复它并松一口气

  2. 使用PHP的YAML解析类来代替,避免将来使用这个扩展

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

如有任何建议或解决方案,我将不胜感激。

Cheers

如果你安装了Homebrew,那么你可以这样做:

brew install libyaml --universal

否则安装最新的libaml .

你可以为32 &64位Intel,设置CFFLAGSLDFLAGS-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堆栈。

这并不能真正解决你的问题。但是,如果您只想解析YAML,我建议使用Symfony YAML类,它是解析YAML的一个非常容易使用的类。速度还可以,错误信息也很清楚。

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

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

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

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

如果不是,那么使用纯PHP解决方案可能是可行的。

同样,如果你只是在Mac上运行代码作为开发环境,那么你可能不需要它工作,如果:1)生产是linux或2)该特性不是功能的核心

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

希望能帮到你…

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

步骤1:确保您的MAMP版本是版本2,因为它包含一个通用二进制安装程序(32位&64位)

步骤2:修改Make文件并删除其他编译器版本,类似于:

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