如何使 zip 扩展在 MacOS 10.15.1 中的 PHP 中运行?

如何使 zip 扩展在 MacOS 10.15.1 中的 PHP 中运行?

我从这里和 Apple 支持论坛上的几个不同问题中拼凑出了以下步骤。这些步骤单独使用都没有奏效,但这个似乎很接近。问题是我最终得到了一个 MacOS 拒绝加载的未签名扩展;有人能帮我解决最后一个问题吗(我希望如此)?

1.安装 autoconf。

cd ~/Downloads
curl -O -L http://ftpmirror.gnu.org/autoconf/autoconf-2.69.tar.gz
tar -xzf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure
make
sudo make install

2. 安装 automake

cd ~/Downloads
curl -O -L http://ftpmirror.gnu.org/automake/automake-1.15.tar.gz
tar -xzf automake-1.15.tar.gz
cd automake-1.15
./configure
make
sudo make install

3. 安装 libtool

cd ~/Downloads
curl -OL http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz
tar -xzf libtool-2.4.6.tar.gz
cd libtool-2.4.6
./configure
make
sudo make install

4. 安装 CMake

从以下位置下载磁盘映像:https://github.com/Kitware/CMake/releases/download/v3.16.0-rc3/cmake-3.16.0-rc3-Darwin-x86_64.dmg

挂载图像并将应用程序拖到“应用程序”文件夹中。

编辑您的 .zshrc 文件(如果您没有,请在主目录中创建一个)。

添加以下行:

export PATH="$PATH:/Applications/CMake.app/Contents/bin"

保存文件并输入命令:

source ~/.zshrc

5. 安装 libzip

cd ~/Downloads
curl -OL https://libzip.org/download/libzip-1.5.2.tar.gz
tar -xzf libzip-1.5.2.tar.gz
cd libzip-1.5.2
mkdir build
cd build
cmake ..
make
sudo make install

6.创建使用 Xcode 库的 phpize 临时副本

cd ~
cp /usr/bin/phpize ~/Desktop/

编辑现在桌面上的 phpize 副本,并更改​​此行:

includedir="`eval echo ${prefix}/include`/php"

...到:

includedir="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php"

保存修改后的phpize文件。

7. 下载正确版本的 PHP 源代码——MacOS 10.15.1 上的版本为 7.3.9

cd ~/Downloads
curl -O -L https://www.php.net/distributions/php-7.3.9.tar.bz2
tar -yxf php-7.3.9.tar.bz2
cd php-7.3.9/ext/zip

8. 构建扩展

~/Desktop/phpize
CFLAGS="-I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php/main -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php/Zend -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php/TSRM -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php" ./configure --with-zlib-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr --with-php-config=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/bin/php-config
make
make install
sudo mkdir /usr/local/lib/php/extensions
sudo mv modules/zip.so /usr/local/lib/php/extensions/

注意:我预计 make install 会因权限错误而失败,但我发现的另一个讨论建议此步骤对于签署代码是必要的。然而,它似乎没有起到这样的效果。

9.编辑 /etc/php.ini 文件

extension_dir="/usr/local/lib/php/extensions"
extension=zip

10.使用命令测试:

php --version

结果

PHP 警告:PHP 启动:无法加载动态库“zip”(已尝试:/usr/local/lib/php/extensions/zip(dlopen(/usr/local/lib/php/extensions/zip,0x0009):dlopen():未找到文件:/usr/local/lib/php/extensions/zip),/usr/local/lib/php/extensions/zip.so(dlopen(/usr/local/lib/php/extensions/zip.so,0x0009):(/usr/local/lib/php/extensions/zip.so)中的代码签名在进程中使用无效:映射文件没有 cdhash,完全未签名?代码必须至少是临时签名的。))在第 0 行的未知中

答案1

总结得很好。我不需要 2 和 3。

然后签名

11. 您需要启动XCode并添加一个帐户。

向 XCode 添加帐户

下载证书

12. 在终端中检查certtool y您的新签名密钥。它的名称如下:

Common Name     : Apple Development:
[email protected] (xxxxxxxx)

仍然以您的用户身份在终端中对文件进行签名(如果构建文件夹中不再有该文件,则将其移回,否则您将以权限错误结束)

codesign -f -s "Apple Development: [email protected]" /usr/local/lib/php/extensions/zip.so

将其移动到目标文件夹,运行php --version,最后得到:

PHP 警告:PHP 启动:无法加载动态库“zip”(已尝试:/usr/local/lib/php/extensions/zip(dlopen(/usr/local/lib/php/extensions/zip,0x0009):dlopen():未找到文件:/usr/local/lib/php/extensions/zip),/usr/local/lib/php/extensions/zip.so(dlopen(/usr/local/lib/php/extensions/zip.so,0x0009):(/usr/local/lib/php/extensions/zip.so)中的代码签名在进程中使用无效:映射过程是平台二进制文件,但映射文件是 不是)) 位于 Unknown 的第 0 行 PHP 7.3.11 (cli) (构建于:2020 年 2 月 29 日 02:50:36) ( NTS )

好的,我在网上查了一下(深刻的资源),而我发现的片段描绘了一幅黑暗的画面。简而言之:在 Mac Os Catalina 中,这种情况已不再可能。

错误消息也说明了这一点。Php 环境已签名为系统组件(平台二进制文件),并默认安装。Mac Os Catalina 强制平台二进制文件仅加载也是平台二进制文件的代码。这是无法做到的,因为你不是 Apple。

剩下两个可能的选择。禁用整个签名执行系统,这是一个坏主意。或者完全自行构建或使用自制软件设置替代 Php。

相关内容