webentwicklung-frage-antwort-db.com.de

Installation der PECL-Erweiterungen schlägt nach Aktualisierung von MacOS auf Mojave (10.14) fehl

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?

5
Isaac Bosca

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 /
4
donatJ

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.

0
Eyo Okon Eyo