
我根據此處和 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 並新增一個帳戶。
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。