如何在 MacOS 10.15.1 中的 PHP 中使用 zip 副檔名?

如何在 MacOS 10.15.1 中的 PHP 中使用 zip 副檔名?

我根據此處和 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)中的程式碼簽章對於在進程中使用無效:映射過程是平台二進位文件,但映射文件是 不是)) 在未知的第 0 行 PHP 7.3.11 (cli) (建於: 2020 年 2 月 29 日 02:50:36) ( NTS )

好吧,我上網查了一下(富有洞察力的資源),我發現的這些位元描繪了一個黑暗的圖像。簡而言之:對於 Mac Os Catalina,這一切不再可能。

錯誤訊息也說明了這一點。 Php 環境被簽名為系統元件(平台二進位)並預設安裝。 Mac Os Catalina 強制平台二進位檔案僅載入也是平台二進位檔案的程式碼。哪一項都做不到,因為你不是蘋果。

留下兩個可能的選擇。在系統範圍內停用整個簽章強制執行是一個壞主意。或完全自行建立或使用自製程式設定替代 PHP。

相關內容