Gmp PHP 扩展 - MAMP PRO

2024-03-27

我查看了其他几个问题,例如this one https://stackoverflow.com/questions/50435455/how-to-install-gmp-extension-for-php-7-2-using-mamp-on-osx, 引导如this http://mycodde.blogspot.com/2020/01/install-php-gmp-extension-in-mamp-2020.html or this https://gist.github.com/aurelioluiz/63813b6af780725a67ba4fb535b3bed5但我还是没有运气。

这是我到目前为止所做的:

  1. 使用brew下载gmpbrew install autoconf gmp
  2. 从源代码下载 PHP(我使用的是 7.3.24 版本)
  3. 将 Gmp 目录复制到/Applications/MAMP/bin/php/php7.3.24/include/php/ext
  4. 输入该目录并启动phpize
  5. 推出./configure --with-php-config=/Applications/MAMP/bin/php/php7.3.24/bin/php-config
  6. 推出make
  7. 推出make install

到目前为止,一切都很好。没有错误,一切看起来都很好,但是如果我在我的 cli 中查看这一点php -m (or php -i)没有加载 gmp 扩展。所以我去了我的cliphp.ini文件和我的网站php.ini文件并手动添加extension=gmp.so(该文件存在于该路径中/Applications/MAMP/bin/php/php7.3.24/include/php/ext/gmp/modules/gmp.so).

我什至尝试指定完整路径,但仍然没有成功。我的 cli 或我的phpinfo();显示 GMP 已启用。我有点困惑,无法思考其他事情。

我缺少什么?显然,我重新启动了 MAMP PRO 十几次,甚至是我的 Mac 本身。

  • MacOs 版本:iMac 24' M1 上的 11.4 Big Sur
  • MAMP PRO 版本:6.3.1
  • 使用的 PHP 版本:7.3.24

更新 08/07/21

我更新了 MAMP PRO,它安装了 PHP 版本 7.3.27,所以我再次检查一遍,从源代码下载 phphttps://github.com/php/php-src/releases?after=php-8.0.4RC1 https://github.com/php/php-src/releases?after=php-8.0.4RC1,将 ext/gmp 复制到/Applications/MAMP/bin/php/php7.3.27/include/php/ext,推出/Applications/MAMP/bin/php/php7.3.27/bin/phpize, ./configure --with-php-config=/Applications/MAMP/bin/php/php7.3.27/bin/php-config, make and make install。没有错误。

输出make install is:

Installing shared extensions:     /Applications/MAMP/bin/php/php7.3.27/lib/php/extensions/no-debug-non-zts-20180731/
Installing header files:          /Applications/MAMP/bin/php/php7.3.27/include/php/
shtool:install:Warning: source and destination are the same - skipped

I added extension=gmp.so to php.ini通过MAMP界面,文件,编辑模板->php->php7.3.27。重新启动 MAMP,phpinfo() 上没有任何新内容;

更新日期 12/07/21

根据 Hakre 的请求,我在 cli 中运行了以下命令,结果如下:

[~]$ php -n -d extension=gmp.so -i
PHP Warning:  PHP Startup: Unable to load dynamic library 'gmp.so' (tried: /Applications/MAMP/bin/php/php7.3.27/lib/php/extensions/no-debug-non-zts-20180731/gmp.so (dlopen(/Applications/MAMP/bin/php/php7.3.27/lib/php/extensions/no-debug-non-zts-20180731/gmp.so, 9): no suitable image found.  Did find:
    /Applications/MAMP/bin/php/php7.3.27/lib/php/extensions/no-debug-non-zts-20180731/gmp.so: mach-o, but wrong architecture
    /Applications/MAMP/bin/php/php7.3.27/lib/php/extensions/no-debug-non-zts-20180731/gmp.so: mach-o, but wrong architecture), /Applications/MAMP/bin/php/php7.3.27/lib/php/extensions/no-debug-non-zts-20180731/gmp.so.so (dlopen(/Applications/MAMP/bin/php/php7.3.27/lib/php/extensions/no-debug-non-zts-20180731/gmp.so.so, 9): image not found)) in Unknown on line 0
phpinfo()
PHP Version => 7.3.27

which is quite interesting if you look at this img The extension actually exists

对于猛禽:

这是您所要求的命令的输出。

[~]$ which php                    
/Applications/MAMP/bin/php/php7.3.27/bin/php
[~]$ php --ini | grep "Loaded Configuration File"
Loaded Configuration File:         /Applications/MAMP/bin/php/php7.3.27/conf/php.ini
[~]$ php --version
PHP 7.3.27 (cli) (built: Mar 16 2021 12:04:51) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.27, Copyright (c) 1998-2018 Zend Technologies
[~]$ 

Ofc 安装了多个 php,因为 MAMP 单独填充了 4-5 版本 + 有来自 MacOSx 的默认版本,我已经用 .zshrc bash 配置文件覆盖了它

export PATH=/Applications/MAMP/bin/php/php7.3.27/bin:$PATH

该行来自我的 .zshrc

该问题是否与新的 M1 芯片有关?我使用的是 2021 年 6 月底刚购买的新 iMac。 或许is this https://stackoverflow.com/questions/38333775/failed-loading-xdebug-did-found-mach-o-but-wrong-architecture-for-php7有关的?

对于哈里达山:

让我开始说,我尝试使用 .configure 而不使用其他参数,然后我尝试使用 CC="gcc -arch i386" CXX="g++ -arch i386" 甚至使用 CC="gcc -arch arm64" CXX=" g++ -arch arm64”(我在configure.log中找到了arm64)。如果我没有错过命令行中的任何其他信息,它们都不会生成有效的 .so 。 关于你要求我做的测试,结果如下:

[~]$ file /Applications/MAMP/bin/php/php7.3.27/bin/php
/Applications/MAMP/bin/php/php7.3.27/bin/php: Mach-O 64-bit executable x86_64

PHP 扩展未加载的原因可能有很多,但直接指出原因(和修复)并不总是那么容易,因为从源代码编译到显示之间存在差距phpinfo()然后最后错过了扩展很大。


首先获取真正的错误信息

减少故障排除距离的一种方法是查看 PHP 是否可以加载扩展and如果没有,则显示错误消息。

A common test for that is to use the CLI SAPI (PHP on the commandlineDocs https://www.php.net/manual/en/features.commandline.php) as it allows to reduce and easier control the PHP runtime environment while being compatible with the extension.

要启动 PHP,请使用default配置(无.ini文件),仅加载单个扩展二进制文件来测试并显示配置信息,运行:

$ php -n -d extension=gmp.so -i

Excerpt from OptionsDocs https://www.php.net/manual/en/features.commandline.options.php, also there is php --help:

-n               No php.ini file will be used
-d foo[=bar]     Define INI entry foo with value 'bar'
-i               PHP information

这应该会引发错误(在标准错误的终端中显示)或显示在 PHP 信息输出中加载的扩展(在标准输出上)。

或者,要减少输出并仅检查错误,请使用以下命令执行空 PHP 语句-r命令行开关:

-r <code>        Run PHP <code> without using script tags <?..?>

具有相关 GMP 扩展的示例:

$ php -n -d extension=gmp.so -r ';'

这将退出非零(退出状态) 如果加载扩展时出现问题,并且标准错误上显示错误消息and如果可以加载扩展,将以零状态退出:

$ php -n -d extension=gmp.so -r ';'
PHP Warning:  PHP Startup: Unable to load dynamic library 'gmp.so' (tried: /Applications/MAMP/bin/php/php7.3.27/lib/php/extensions/no-debug-non-zts-20180731/gmp.so (dlopen(/Applications/MAMP/bin/php/php7.3.27/lib/php/extensions/no-debug-non-zts-20180731/gmp.so, 9): no suitable image found.  Did find:
    /Applications/MAMP/bin/php/php7.3.27/lib/php/extensions/no-debug-non-zts-20180731/gmp.so: mach-o, but wrong architecture
    /Applications/MAMP/bin/php/php7.3.27/lib/php/extensions/no-debug-non-zts-20180731/gmp.so: mach-o, but wrong architecture), /Applications/MAMP/bin/php/php7.3.27/lib/php/extensions/no-debug-non-zts-20180731/gmp.so.so (dlopen(/Applications/MAMP/bin/php/php7.3.27/lib/php/extensions/no-debug-non-zts-20180731/gmp.so.so, 9): image not found)) in Unknown on line 0
$ echo $?
254

如示例所示,错误已经出现在“PHP 启动”中,这是 PHP 发出诊断消息加载扩展的典型阶段。


Dlopen 9:找不到合适的图像:mach-o,但架构错误

上面的错误消息表明 a) PHP 首先无法加载扩展(作为动态库, .so文件,一个共享对象文件,即编译后的扩展名)和 b)它无法加载,因为没有合适的图像被找到:

PHP 警告:PHP 启动:无法加载动态库“gmp.so”(尝试过:<path>(dlopen(<path>, 9): 没有找到合适的图像。是否发现:<path>:mach-o,但是错误的架构...),<path>(dlopen(<path>.so, 9): 未找到图像)) 在第 0 行未知中

这意味着该文件在磁盘上可用(可以打开),但图像不合适,这意味着它与体系结构不匹配。


(尝试中有一些噪音gmp.so.so这是由 php 完成的,所以可以通过-d extension=gmp无需扩展即可直接工作,例如在 php-.ini在 *nix (.so)或窗口(.dll)。这部分可以忽略,即“找不到图像”,因为文件不存在,这是预期的)


它必须与 PHP 本身具有相同的架构,因为 PHP 已经在运行并且想要加载二进制扩展 - 它们需要适合。

要获取 PHP 的体系结构,请找到 PHP 命令:

$ which php
/Applications/MAMP/bin/php/php7.3.27/bin/php

这是 php 二进制文件的绝对路径。有了它,现在可以file(1)实用程序来获取有关它的更多信息:

$ file /Applications/MAMP/bin/php/php7.3.27/bin/php
/Applications/MAMP/bin/php/php7.3.27/bin/php: Mach-O 64-bit executable x86_64

(或致电$ file "$(which php)"用于同时运行)

它显示了 php 二进制文件信息,包括。这x86_64最后的架构:

Mach-O 64 位可执行文件 x86_64

作为共享对象图像来加载(编译后的php扩展gmp.sofile)也需要匹配一下,同理file(1)实用程序可用于已编译的扩展.so以同样的方式归档。

然后比较应该显示出差异。

有了这些信息,最终就可以使用适当的架构来编译扩展。


结束语:

关于 Apple Silicon M1,我对编译并不是特别深入,它的架构和其他人可以更好地说明这一点。据我所知,你通过运行brew来管理它arch(1)实用程序设置架构arch -x86_64 <command> to x86_64。在 Apple Silicon 上,这可能需要更多工具,即Rosetta.

这似乎是 M1 用户博客中常见的内容(via 奥斯汀·卡梅伦 2020 年 11 月 https://austencam.com/posts/setting-up-an-m1-mac-for-laravel-development-with-homebrew-php-mysql-valet-and-redis)但这完全不是我的系统。

根据我自己的理解,应该可以使用编译器标志或在配置行上设置架构,通常就是这样。

由于brew具有如何在系统上编译扩展的信息(酿造配方,此处为 gmp https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/gmp.rb)也许最直接的方法是使用它并在正确的架构下运行安装。

需要注意的是,您需要在(?)正确的体系结构中使用arch(1)实用程序以及(和brew安装)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gmp PHP 扩展 - MAMP PRO 的相关文章

  • PHP - 从图像创建一张图像

    我有 n 张图像 想用 php 代码创建一张 我使用 imagecopymerge 但无法成功 请举一些例子 Code numberOfImages 3 x 940 y 420 background imagecreatetruecolor
  • 如何在codeigniter中引用数据库连接?

    如何在 CodeIgniter 数据库处理程序对象中手动调用 PHP 数据库函数 如何检索连接 dbc 或者调用类似的函数mysql real escape string dbc variable 您可以调用任何 mysql 本机函数并访问
  • 从 PHP 执行 SQL Server 存储过程

    我尝试从 PHP 调用 SQL Server 存储过程 这是我的存储过程 CREATE procedure dbo tester id NVARCHAR MAX AS BEGIN DECLARE tab TABLE myxml XML IN
  • 使用 href 和 php 从 sql 数据库对 html 表进行排序

    我有一个 html 表 其中包含来自 php 吐出的 sql 表的产品数据 我想通过单击表列的标题对数据进行排序 我像这样输出我的表 php product list sql mysql query SELECT FROM products
  • 使用 PHP 将 mysql 值转储到 JSON 文件中

    我正在尝试使用 PHP 从 mysql 数据库生成 JSON 文件 到目前为止 我有
  • 在composer.json中运行命令行命令

    我正在尝试编写一个composer json 文件 该文件将连续运行多个命令行命令 作为一个示例 如下所示 scripts test createDir createDir mkdir testing 当我在终端中运行作曲家文件时使用com
  • php简单xml如何读取具有不同子节点级别的多个节点

    我有一个 xml 文件 其中包含不同的命名节点和多级子节点 每个节点之间都不同 我应该如何访问数据 需要很多嵌套的for循环吗 以下是 xml 代码示例
  • 如何在 laravel/php 中访问该集合的内容

    我是 Laravel 的新手 正在做一个构建迷你社交网络应用程序的项目 我有一个与用户模型有关系的帖子模型 我有一个帖子页面 其中仅显示经过身份验证的用户及其朋友的帖子 在我的 PostController 中 我像这样查询经过身份验证的用
  • Laravel 5 Eloquent 关系:无法修改/覆盖关系表属性

    我正在使用 Laravel 5belongsToMany使用中间数据透视表定义相关表的方法 我的应用程序正在使用雄辩的模型Tour and 旅游类别 在游览模型中我有 namespace App use Illuminate Databas
  • CodeIgniter Active Record - 组 OR 语句

    这是我的问题 MySQL 或 条件 https stackoverflow com questions 8604380 mysql or condition 解决方案是将 OR 语句分组 但我正在使用 CodeIgniters Active
  • 将 PHP 变量保存到文本文件

    我想知道如何将 PHP 变量保存到 txt 文件 然后 再次检索它们 Example 有一个输入框 提交后写的东西 输入框将被保存到文本文件中 稍后需要结果 作为变量带回 假设变量是 text I 需要将其保存到文本文件并能够将其检索回来
  • 如何在xampp中启用curl

    我面临下面给出的错误 致命错误 在第 11 行调用 E xampp htdocs new functions php 中未定义的函数curl init 我已经做出了改变php ini 我把前面的分号去掉了 extension php cra
  • 禁用将应用程序窗口置于前面。关闭另一个窗口后

    我有包含 2 个 NSWindowController 的 OSX 应用程序 我的问题可以通过以下几个步骤来描述 使用 2 个窗口启动应用程序 选择另一个应用程序的窗口 将其中一个窗口放在另一个应用程序窗口前面 第二个窗口将保留在底部 关闭
  • PHP json_encode 将多个数组编码为一个对象

    我试图在一个 JSON 对象中返回多个数组 但在语法上遇到一些困难 一款 Android 应用程序从多个表接收更新 我希望在一个响应中返回这些更新 目前 这就是我对各种结果集进行编码的方式 json json encode array ta
  • 如何使用来自数据库的值来定义 Twig 模板的全局变量?

    我想为 twig 定义一个全局变量 可以从任何模板访问它 我可以在 symfony 中创建一个全局变量config packages twig yaml 但我需要它是从数据库获取的值 在 twig 的文档中 它说使用此代码 twig new
  • PHP 和 ASP.Net 可以在 IIS 7.5 中的同一网站中一起运行吗?

    我们网站的一部分是用 PHP 完成的 而我们网站的一部分是用 ASP Net 完成的 我们刚刚使用 Windows Server 2008 R2 设置了一个新的 Web 服务器 其中安装了 IIS 7 5 我知道 IIS 7 支持 PHP
  • 密码验证 PHP 正则表达式

    我是正则表达式的新手 我需要使用 php 验证密码 并使用正则表达式执行以下密码策略 密码 必须至少有 8 个字符 必须有2个号码 允许的符号有 我已经尝试过以下方法 d A Za z 0 9A Za z 以下完全符合您的要求 d d 0
  • PHP 是否有与 Java 的 RequestDispatcher.forward 等效的功能?

    在 Java 中我可以编写一个非常基本的 JSPindex jsp像这样 这样做的效果是用户请求index jsp 或者只是包含目录 假设index jsp是目录的默认文档 将会看到home action没有浏览器重定向 即 forward
  • 如何使 WordPress 中的自定义模板充当受密码保护的页面?

    我正在使用自定义模板构建一个页面 问题是 我需要此页面受密码保护 或者至少可供登录用户访问 但即使我在 WordPress 管理的新页面部分中将其设置为此类 私人 密码保护 它也不会显示菜单项和内容 如果是私有的 或者它会立即显示页面内容
  • 如何在 MySQL 中使用 INET_ATON 进行通配符搜索 IP 地址?

    我发现这个方法可以使用 INET ATON 将 IP 地址作为整数存储在 MySQL 数据库中 https stackoverflow com a 5133610 4491952 https stackoverflow com a 5133

随机推荐

  • 如何将异步操作与 .NET 4 中的任务并行库链接起来?

    我正在尝试以编程方式链接 C 4 中的异步操作 例如写入给定的 Stream 对象 我最初是 手动 完成此操作 将回调从一个操作挂钩到下一个操作 但我想我应该尝试使用 NET 4 任务并行库来省去重新发明并发轮的麻烦 首先 我将异步调用包装
  • 使用正则表达式分割不同长度的字符串

    我不知道使用正则表达式是否可以实现这一点 我只是问一下是否有人知道答案 我有一个string hellohowareyou 我需要像这样分割它 h el loh owar eyou 分割完成后 第一个字符串的长度为 1 第二个字符串的长度为
  • ios6 uilabel 文本未居中对齐

    我正在开发一个最低版本为 ios 5 的 ios 应用程序 我刚刚遇到了 uilabels 的一个奇怪问题 或者也许我错过了一些明显的东西 不管怎样 我遇到的问题是我有一个 uilabel 它的文本要居中对齐 在 ios 5 上一切正常 但
  • 使用 Cloudformation 的 AWS Api Gateway 代理资源?

    我正在尝试从 API 网关端点代理配置为网站的 S3 存储桶 我使用控制台成功配置了端点 但无法使用 Cloudformation 重新创建配置 经过大量的试验 错误和猜测 我想出了以下 CF 堆栈模板 它让我非常接近 Resources
  • PHP / PDO:SQl 查找包含字符串值的行[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我尝试发出请求来查找包含特定字符串值的行 这是我的代码的摘录 Getting motscles value motscles PO
  • 替换 DataFrame 索引中的 NaN

    我有一个数据框 如下所示 one two a 2 5 b 3 6 NaN 0 0 如何用字符串替换索引中的 NaN 例如 无标签 I tried df df replace np NaN No label and df index df i
  • 从嵌套 javascript 对象中删除属性的最佳方法是什么?

    我有一个树对象 如下所示 我尝试删除 items 数组属性 如果它为空 我不确定执行此操作的最佳方法是什么 我正在考虑循环遍历密钥 检查属性 然后删除使用delete myJSONObject prop 欢迎任何想法 想法吗 text Tr
  • 使用.Net MVC,如何列出播放不同文件的多个html音频播放器?

    我和我的朋友正在使用 Net 开发一个大学项目 我们正在尝试建立一个网站 允许用户以类似于 Soundcloud 等网站的方式收听音频剪辑 目前 我们有一个基本的 MVC 站点 允许用户将音频上传到服务器文件系统 并在数据库表中记录有关该文
  • 通过 bash 过滤 json - 不区分大小写

    我有 json 代码 需要通过属性的值对其进行过滤DNSName 过滤器必须不区分大小写 我怎样才能做到这一点 有没有可能解决它jq 这就是我创建 json 代码的方式 aws elbv2 describe load balancers r
  • 当生成的存在类型过于复杂时,无形状 HList 上的 toList 会失败

    给出以下定义 class R T class A class B class C 这有效 val s1 new R A new R B HNil val r1 s1 toList r1 of type List R gt A with B
  • Flutter firebase 未初始化

    我收到这个错误 未处理的异常 PlatformException null error 主机平台为非空返回值返回空值 null null 我已经更新了 yaml 中的所有 firebase 包 但仍然有此错误 E flutter 11230
  • Angular2 单选按钮在生产中不起作用

    我最近使用 Visual Studio 2015 和 MVC 构建了一个 angular2 应用程序 该项目还托管 WEBAPI 和 Angular 代码 我使用此处显示的说明将 MS Build 与 Angular build 集成htt
  • 无法解析在 iPhone 中获取数据的 Web 服务

    我是电话编程新手 使用下面的代码我得到网络服务的响应 NSString soapMessage NSString stringWithFormat n
  • 可定制的夏令时规则

    任务是什么 根据项目规范 我需要计算特定时区偏移的 DST 规则 规则cannot通过标准仪器应用 例如date default timezone set 因为我们不能依赖软件配置 并且如果某些 DST 规则发生更改 也无法更新它 我拥有的
  • Java:LinkedBlockingQueue是否考虑消费者的顺序?

    我有 3 个线程 2 个消费者 ConsumerA and ConsumerB and a Producer 我也有一个LinkedBlockingQueue queue At t 1 ConsumerA调用queue take At t
  • 我如何从 JMapViewer 世界地图中获取鼠标单击位置

    我正在使用地图浏览器 http wiki openstreetmap org wiki JMapViewerjar 在 JPanel 上显示世界地图 在地图上我添加MapMarkerDot s这是 GPS 点 问题是当我单击MapMarke
  • ASP.NET Web App 和 C# 应用程序之间的双向通信

    我需要构建一个可以双向通信的网站和应用程序 我将使用 ASP NET 构建网站 并使用 C 构建应用程序 我将自己托管该网站 它将与应用程序在同一台计算机上运行 我不知道在两者之间发送数据的最佳技术是什么 C 应用程序需要一直运行 我应该构
  • firebase多位置更新用户身份验证和数据库

    我有一个用于注册新用户的表格 其中包含电子邮件 密码 全名和电话号码 我可以用firebase auth createUserWithEmailAndPassword如果成功则创建新用户 然后我用firebase database ref
  • python 2和3中的UTF-8字符串

    以下代码适用于 Python 3 people u Nicholas Gyeney u Andr xe9 writers join people print writers print Writers format writers 并产生以
  • Gmp PHP 扩展 - MAMP PRO

    我查看了其他几个问题 例如this one https stackoverflow com questions 50435455 how to install gmp extension for php 7 2 using mamp on