6

我使用我的 Mac 开发了三个项目:一个 Android 应用程序、一个 iPhone 应用程序和一个 Symfony 项目。

我的 Symfony 项目使用 Redis 和 APCu 扩展。这是通过 PECL 安装的(6 个月前),使用:

sudo pecl install redis

sudo pecl install apcu

昨天,在将我的 mac 更新到 Mojave 并尝试像往常一样启动我的 PHP 的内置 Web 服务器后,我收到以下错误:

尝试从全局命名空间加载类“Redis”。您是否忘记了“使用”声明?

我还注意到php.ini在安装过程中已将其删除,因此我使用再次php.ini-previous生成php.ini

还重新安装了命令行工具(在安装过程中被删除):

xcode-select --install

最后,我再次尝试通过 PECL 安装 redis 扩展:

sudo pecl install redis

这次PECL抛出错误:

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

如何解决这个问题?

4

2 回答 2

5

运行以下命令将重新安装开发者工具头文件并修复问题。

$ sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
于 2018-10-02T15:25:22.733 回答
1

你会想做

$ locate php.h

结果应该是这样的:

/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

接下来,您需要禁用 SIP,以便您可以在其中创建一个文件夹/usr/include并将 php dev 依赖项符号链接到该文件夹​​,您必须启动恢复才能执行此操作;重新启动机器,然后在重新启动时按住cmd + R,从实用程序菜单中选择终端。

# csrutil disable && shutdown -r now

这将禁用 SIP 并重新启动您的机器。

启动后,您将要创建我们讨论过的那个文件夹sudo mkdir /usr/include

接下来我们创建一个指向 php dev 文件所在位置的符号链接

$ ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php /usr/include

您仍然需要重新启用 SIP,因此这次重新启动到恢复模式,您将运行

# csrutil enable && shutdown -r now,就是这样。

于 2018-10-24T13:07:41.737 回答