Wie lässt sich die Zip-Erweiterung in PHP unter MacOS 10.15.1 zum Laufen bringen?

Wie lässt sich die Zip-Erweiterung in PHP unter MacOS 10.15.1 zum Laufen bringen?

Ich habe das folgende Verfahren aus ein paar verschiedenen Fragen hier und in den Apple-Supportforen zusammengeschustert. Keine davon hat für sich allein funktioniert, aber dies scheint nahe dran zu sein. Das Problem ist, dass ich mit einer nicht signierten Erweiterung lande, die MacOS nicht laden will. Kann mir jemand helfen, dieses letzte (hoffentlich) Problem zu lösen?

1. Installieren Sie 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. Installieren Sie 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. Installieren Sie 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. Installieren Sie CMake

Laden Sie das Disk-Image herunter von:https://github.com/Kitware/CMake/releases/download/v3.16.0-rc3/cmake-3.16.0-rc3-Darwin-x86_64.dmg

Mounten Sie das Image und ziehen Sie die Anwendung in Ihren Anwendungsordner.

Bearbeiten Sie Ihre .zshrc-Datei (oder erstellen Sie eine in Ihrem Home-Verzeichnis, falls Sie keine haben).

Fügen Sie die Zeile hinzu:

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

Speichern Sie die Datei und geben Sie den Befehl ein:

source ~/.zshrc

5. Installieren Sie 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. Erstellen Sie eine temporäre Kopie von phpize, die die Bibliotheken von Xcode verwendet

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

Bearbeiten Sie die Kopie von phpize, die sich jetzt auf Ihrem Desktop befindet, und ändern Sie diese Zeile:

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

...Zu:

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

Speichern Sie die geänderte PHPize-Datei.

7. Laden Sie den Quellcode für die richtige Version von PHP herunter – 7.3.9 ab MacOS 10.15.1

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. Erstellen Sie die Erweiterung

~/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/

HINWEIS: Ich gehe davon aus, dass make install aufgrund von Berechtigungsfehlern fehlschlägt, aber in einer der anderen Diskussionen, die ich gefunden habe, wurde darauf hingewiesen, dass dieser Schritt erforderlich sei, um den Code zu signieren. Diesen Effekt scheint er jedoch nicht zu haben.

9. Bearbeiten Sie die Datei /etc/php.ini

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

10. Testen Sie mit dem Befehl:

php --version

Ergebnis

PHP-Warnung: PHP-Start: Dynamische Bibliothek „zip“ kann nicht geladen werden (versucht: /usr/local/lib/php/extensions/zip (dlopen(/usr/local/lib/php/extensions/zip, 0x0009): dlopen(): Datei nicht gefunden: /usr/local/lib/php/extensions/zip), /usr/local/lib/php/extensions/zip.so (dlopen(/usr/local/lib/php/extensions/zip.so, 0x0009): Codesignatur in (/usr/local/lib/php/extensions/zip.so) ungültig zur Verwendung im Prozess: zugeordnete Datei hat kein CDHASH, komplett unsigniert? Code muss zumindest Ad-hoc signiert sein.)) in Unbekannt in Zeile 0

Antwort1

Gute Zusammenfassung. 2 und 3 habe ich nicht gebraucht.

Dann zur Unterschrift

11. Sie müssen XCode starten und ein Konto hinzufügen.

Hinzufügen eines Kontos zu XCode

Herunterladen eines Zertifikats

12. Suchen Sie im Terminal certtool ynach Ihrem neuen Signaturschlüssel. Er heißt:

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

Signiere die Datei noch mit deinem Benutzer im Terminal (verschiebe sie zurück, wenn sie nicht mehr im Build-Ordner ist, sonst endet es mit einem Berechtigungsfehler)

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

Verschieben Sie es in den Zielordner, führen Sie es aus php --versionund Sie erhalten am Ende:

PHP-Warnung: PHP-Start: Dynamische Bibliothek „zip“ kann nicht geladen werden (versucht: /usr/local/lib/php/extensions/zip (dlopen(/usr/local/lib/php/extensions/zip, 0x0009): dlopen(): Datei nicht gefunden: /usr/local/lib/php/extensions/zip), /usr/local/lib/php/extensions/zip.so (dlopen(/usr/local/lib/php/extensions/zip.so, 0x0009): Codesignatur in (/usr/local/lib/php/extensions/zip.so) ungültig zur Verwendung im Prozess:Mapping-Prozess ist eine Plattform-Binärdatei, aber die zugeordnete Datei ist nicht)) in Unbekannt in Zeile 0 PHP 7.3.11 (cli) (erstellt: 29. Feb. 2020 02:50:36) (NTS)

Ok, ich habe im Internet nachgesehen (aufschlussreiche Quelle), und die Teile, die ich gefunden habe, zeichnen ein düsteres Bild. Kurz gesagt:Mit Mac OS Catalina ist dies nicht mehr möglich.

Die Fehlermeldung sagt es auch. Die PHP-Umgebung ist als Systemkomponente (Plattformbinärdatei) signiert und wird standardmäßig installiert. Mac OS Catalina erzwingt, dass Plattformbinärdateien nur Code laden, der auch eine Plattformbinärdatei ist. Was man nicht tun kann, weil Sie nicht Apple sind.

Es bleiben zwei mögliche Optionen. Das gesamte Signaturerzwingungssystem zu deaktivieren, was keine gute Idee ist. Oder ein komplett selbst erstelltes oder mit Homebrew erstelltes Ersatz-PHP einzurichten.

verwandte Informationen