【问题标题】:Install YAML Pecl PHP Extension on MAMP在 MAMP 上安装 YAML Pecl PHP 扩展
【发布时间】:2021-11-01 14:47:16
【问题描述】:

我正在与许多开发人员通过 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:mach-o,但在第 0 行的 Unknown 中有错误的架构”

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

"文件 yaml.so": yaml.so:Mach-O 64 位捆绑 x86_64

但是,将此与我的 MAMP 设置中的工作扩展(即“文件 xdebug.so”)进行比较:

xdebug.so:具有 2 种架构的 Mach-O 通用二进制文件
xdebug.so(用于架构 ppc):Mach-O 捆绑 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/.”

上述解决方案似乎对除我以外的所有人都有效。

我的错误日志现在报告:

[2011 年 7 月 16 日 11:09:25] PHP 警告:PHP 启动:第 0 行未知中的无效库(可能不是 PHP 库)“yaml.so”

我现在已经为此花费了好几个小时,需要您的帮助。

我真正想做的就是在 PHP 中解析 YAML。

我有两个选择:

  1. 修好它,松一口气

  2. 改用 PHP YAML 解析类,以后避免使用此扩展

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

任何建议或解决方案将不胜感激。

干杯

【问题讨论】:

  • 编辑问题使其更具可读性。
  • 这个运气好吗?我在尝试在 MAMP 环境中安装 yaml.so 时遇到了同样的问题。
  • 我知道这可能不是您想听到的答案,但我建议使用 PHP 和 Apache 的 MacPorts 版本。
  • 我在 Mamp 和 Xampp(mac 版)上安装扩展时总是遇到麻烦。我最终运行了一个 linux vm 来解决这个问题(Turnkey Linux - Lamp Stack 效果很好)

标签: php yaml mamp configure pecl


【解决方案1】:

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

brew install libyaml --universal

否则安装最新的libyaml

您可以通过将CFFLAGSLDFLAGS 设置为-arch i386 -arch x86_64 来为32 位和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 堆栈。

【讨论】:

  • 感谢您的回复,但您概述的步骤本质上是@Mindblip,几乎所有其他面临为 MAMP 编译 yaml 扩展的问题的人都尝试过——但没有成功。关键是,MAMP 附带的 PHP 设置无法将编译后的模块识别为有效模块。我已经尝试了所有可能的编译器标志,但是构建的 so 总是无效的(由 php 报告)。 :(
  • @kishkash,实际上我没有遵循任何指南就做到了。所以我不使用 MAMP,对不起,错误的解决方案。
【解决方案2】:

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

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

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

【讨论】:

  • 为什么这被否决了? +1 可行(且明智)的解决方法。并非所有 C 代码都是可移植的。 pecl 扩展可能存在可移植性问题,因为它可能打算在 linux 上运行。
  • @Homer6 可移植性问题——我猜你正中了他的头。我尝试了一切以使 php-yaml 在 MacOS 上工作,但没有运气。所以我在我的开发机器上使用 sfYaml。
  • 酷...我会添加一个答案。
【解决方案3】:

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

如果您觉得大胆,您可以找出错误所在,修复它并将修复提交给扩展作者。

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

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

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

希望对您有所帮助...

【讨论】:

  • 我确信这是一个可移植性问题。我通过简单地设置一些 arch 编译器标志构建了几个 php 扩展(不,这次 yaml 不是其中之一;)——它们都可以与 MAMP 1.9 附带的 PHP 5.3 版本完美配合。
【解决方案4】:

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

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

第二步:Modify your Make file 并去掉其他编译器版本,类似:

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

【讨论】:

    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 2023-04-08
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2013-12-15
    • 2010-10-08
    相关资源
    最近更新 更多