xdebug on macOS 10.13 with PHP 7
因此,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
好了,所以我终于得到它运行它自己完美的作品!我假设macOS High Sierra附带的xdebug二进制文件(位于:/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
)与PHP7的新Zend引擎不兼容。
所以我从xdebug website下载最新的源代码,并做了以下内容:
- 安装的autoconf与酿造;
- 运行
phpize
为新的Zend引擎配置构建; - 运行
./configure
- 运行
make
现在新的二进制正在modules/xdebug.so
然而MACOS系统完整性保护(SIP)会阻止您/usr/lib/php/extensions/
下覆盖xdebug.so
。我不想禁用此功能,因此我在/usr/local/lib/php/extensions/
下创建了一个新的目录路径,并将新的二进制文件复制到此位置。我不知道这个目录是否是最好的地方,或者这是不好的做法,但它对我有用。
最后我重新配置我的PHP。ini使用新的二进制文件,一切正常!
我克隆了git仓库,并试图重现您的步骤1-4。但我确实收到了一条错误消息: 致命错误:'php.h'文件未找到 – Mondy
我刚开始时就有这个问题。我无法确切地记得是什么解决了这个问题,我认为它是安装autoconf或升级到Xcode 9.0。我认为它一定是autoconf,因为这允许我的编译器看到我认为包含在最新的PHP安装中的php.h头文件。 –
你做“zend_extention”中的错字。这应该是zend_extension。 ,我想的完整路径是不必要的 的zend_extension = xdebug.so 应该足够
谢谢,这导致了我能够修复的一个新问题。更新了问题。 –
为了安装它,你必须有xcode命令行工具。
所以,你需要运行:
xcode-select --install
然后,你需要安装的autoconf:
brew install autoconf
然后,你必须下载code from here. 之后,你要的文件夹中运行源代码:
phpize
./configure
make
-
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
请注意,Apache *可能*使用不同的php.ini(一个php.ini用于CLI /终端,另一个用于Apache/web服务器)。因此,最好检查在实际浏览器中捕获的'phpinfo()'输出,看看使用了什么php.ini,以及是否加载了xdebug。当然,如果他们都使用相同的ini文件,那么这种检查可以在终端中执行。是的 - 完全路径(安全)的'zend_extension' – LazyOne
谢谢,我检查了CLI和浏览器,他们都加载相同的php.ini文件。 –