
ここでのいくつかの異なる質問と 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 が失敗すると予想されますが、私が見つけた他のディスカッションの 1 つでは、この手順はコードに署名するために必要であると示唆されていました。ただし、その効果はないようです。
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 では、プラットフォーム バイナリはプラットフォーム バイナリであるコードのみをロードするように強制されます。これは Apple ではないため、実行できません。
2 つの選択肢が考えられます。署名の強制システム全体を無効にしてしまうのは良くない考えです。または、完全にセルフビルドまたは homebrew で代替の PHP をセットアップします。