2017-10-05 124 views
3

因此,macOS High Sierra 10.13现在支持PHP 7.1。在配置Apache时,我还从/etc/php.ini.default文件中创建了一个新的/etc/php.ini,确保在重新启动Apache后检查PHP是否正在加载,但是随MacOS 10.13提供的Xdebug扩展版本似乎不会在加载或显示时显示您运行phpinfo();xdebug on macOS 10.13 with PHP 7

我的php.ini绝对加载:

$ php -i | grep php.ini 
Configuration File (php.ini) Path => /etc 
Loaded Configuration File => /etc/php.ini 

这里是我的/etc/php.ini中的样子,我配置XDebug的:

[xdebug]  
zend_extension = "/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so" 
xdebug.remote_enable=on 
xdebug.remote_log="/var/log/xdebug.log" 
xdebug.remote_host=localhost 
xdebug.remote_handler=dbgp 
xdebug.remote_port=9000 

[更新,固定的错字这里...]

然而,Xdebug的不加载,并检查php -i没有给出结果:

$php -i | grep xdebug 
PHP Warning: Method xdebug_start_function_monitor() cannot be a NULL 
    function in Unknown on line 0 
    PHP Warning: xdebug: Unable to register functions, unable to load in Unknown on line 0 
    Segmentation fault: 11 

是的,该文件路径是正确的:

$ ls /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so 
/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so* 

这用于处理PHP 5,所以我希望有人可以帮助我和其他任何人在未来努力解决这个问题。

当我检查我的Apache日志我得到以下错误:

Failed loading /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so: dlopen(/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so, 9): Symbol not found: _xdebug_monitored_function_dtor 
    Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so 
    Expected in: flat namespace 
in /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so 

我不是在寻找我怎样才能解决这个错误方面取得进展:

Symbol not found: _xdebug_monitored_function_dtor 
+0

请注意,Apache *可能*使用不同的php.ini(一个php.ini用于CLI /终端,另一个用于Apache/web服务器)。因此,最好检查在实际浏览器中捕获的'phpinfo()'输出,看看使用了什么php.ini,以及是否加载了xdebug。当然,如果他们都使用相同的ini文件,那么这种检查可以在终端中执行。是的 - 完全路径(安全)的'zend_extension' – LazyOne

+0

谢谢,我检查了CLI和浏览器,他们都加载相同的php.ini文件。 –

回答

7

好了,所以我终于得到它运行它自己完美的作品!我假设macOS High Sierra附带的xdebug二进制文件(位于:/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so)与PHP7的新Zend引擎不兼容。

所以我从xdebug website下载最新的源代码,并做了以下内容:

  1. 安装的autoconf与酿造;
  2. 运行phpize为新的Zend引擎配置构建;
  3. 运行./configure
  4. 运行make

现在新的二进制正在modules/xdebug.so

然而MACOS系统完整性保护(SIP)会阻止您/usr/lib/php/extensions/下覆盖xdebug.so。我不想禁用此功能,因此我在/usr/local/lib/php/extensions/下创建了一个新的目录路径,并将新的二进制文件复制到此位置。我不知道这个目录是否是最好的地方,或者这是不好的做法,但它对我有用。

最后我重新配置我的PHP。ini使用新的二进制文件,一切正常!

+0

我克隆了git仓库,并试图重现您的步骤1-4。但我确实收到了一条错误消息: 致命错误:'php.h'文件未找到 – Mondy

+0

我刚开始时就有这个问题。我无法确切地记得是什么解决了这个问题,我认为它是安装autoconf或升级到Xcode 9.0。我认为它一定是autoconf,因为这允许我的编译器看到我认为包含在最新的PHP安装中的php.h头文件。 –

2

你做“zend_extention”中的错字。这应该是zend_extension。 ,我想的完整路径是不必要的 的zend_extension = xdebug.so 应该足够

+0

谢谢,这导致了我能够修复的一个新问题。更新了问题。 –

3

为了安装它,你必须有xcode命令行工具。

所以,你需要运行:

xcode-select --install 

然后,你需要安装的autoconf:

brew install autoconf 

然后,你必须下载code from here. 之后,你要的文件夹中运行源代码:

  1. phpize
  2. ./configure
  3. make
  4. sudo cp modules/xdebug.so /usr/local/php/extensions(如果该目录不存在,去创造吧)

最后在php.ini中添加

zend_extension=/usr/local/php/extensions/xdebug.so 

之后,你可以启用在php.ini中的xdebug并重新启动apache

sudo apachectl restart