Ich verwende meinen Mac, um drei Projekte zu entwickeln: eine Android-App, eine iPhone-App und ein Symfony-Projekt.
Mein Symfony-Projekt verwendet die Erweiterungen von Redis und APCu. Dieses wurde (vor 6 Monaten) über PECL installiert mit:
Sudo pecl install redis
und
Sudo pecl install apcu
Gestern, nachdem Sie meinen Mac auf Mojave aktualisiert haben und versuchen, den integrierten Webserver meines PHP wie üblich zu starten, erhalte ich die folgende Fehlermeldung:
Es wurde versucht, die Klasse "Redis" aus dem globalen Namespace zu laden. Hast du eine "use" -Anweisung vergessen?
Ich habe auch bemerkt, dass php.ini
während der Installation entfernt wurde. Daher habe ich php.ini-previous
verwendet, um den php.ini
erneut zu generieren.
Die Befehlszeilentools wurden ebenfalls neu installiert (wurde während der Installation entfernt):
xcode-select --install
Und schließlich habe ich noch einmal versucht, die Redis-Erweiterung über PECL zu installieren:
Sudo pecl install redis
Diesmal gibt PECL einen Fehler aus:
creating libtool
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h
running: make
/bin/sh /private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/libtool --mode=compile cc -I. -I/private/tmp/pear/temp/redis -DPHP_ATOM_INC -I/private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/include -I/private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/main -I/private/tmp/pear/temp/redis -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /private/tmp/pear/temp/redis/redis.c -o redis.lo
mkdir .libs
cc -I. -I/private/tmp/pear/temp/redis -DPHP_ATOM_INC -I/private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/include -I/private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/main -I/private/tmp/pear/temp/redis -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /private/tmp/pear/temp/redis/redis.c -fno-common -DPIC -o .libs/redis.o
In file included from /private/tmp/pear/temp/redis/redis.c:27:
/private/tmp/pear/temp/redis/common.h:1:10: fatal error: 'php.h' file not found
#include "php.h"
^~~~~~~
1 error generated.
make: *** [redis.lo] Error 1
ERROR: `make' failed
Wie kann dieses Problem gelöst werden?
Wenn Sie den folgenden Befehl ausführen, werden die Header-Dateien der Developer Tools neu installiert und das Problem behoben.
$ Sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
Du wirst es tun wollen
$ locate php.h
ergebnisse sollten so sein:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main/php.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php/main/php.h
Als Nächstes sollten Sie SIP deaktivieren, damit Sie in /usr/include
einen Ordner erstellen und die Abhängigkeiten von PHP Dev mit diesem Ordner verknüpfen können. Dazu müssen Sie in Recovery starten. Starten Sie den Computer neu und halten Sie während des Neustarts cmd + R
gedrückt. Wählen Sie dann im Menü der Dienstprogramme das Terminal aus.
# csrutil disable && shutdown -r now
ausführen
dadurch wird SIP deaktiviert und der Computer neu gestartet.
Nach dem Booten möchten Sie den Ordner erstellen, über den wir wie Sudo mkdir /usr/include
gesprochen haben.
als Nächstes erstellen wir einen Symlink zu dem Ort, an dem sich die PHP-Dev-Dateien befinden
$ ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php /usr/include
Sie müssen SIP immer noch aktivieren, also starten Sie dieses Mal wieder in den Wiederherstellungsmodus
# csrutil enable && shutdown -r now
, und das wars.