Ger*_*ong 12 php apache xdebug macos-high-sierra
所以macOS High Sierra 10.13现在配备了PHP 7.1.配置Apache时我也/etc/php.ini从/etc/php.ini.default文件中创建了一个新的,确保在重新启动Apache后检查是否由PHP加载,但是当你运行时,macOS 10.13附带的Xdebug扩展版本似乎没有加载或显示phpinfo();
我的php.ini肯定被加载:
$ php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
Run Code Online (Sandbox Code Playgroud)
这是我的/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
Run Code Online (Sandbox Code Playgroud)
[更新,修复了这里的拼写错误...]
但是,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
Run Code Online (Sandbox Code Playgroud)
是的,文件的路径是正确的:
$ ls /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so*
Run Code Online (Sandbox Code Playgroud)
这曾经用于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
Run Code Online (Sandbox Code Playgroud)
我在找出如何解决此错误方面没有取得进展:
Symbol not found: _xdebug_monitored_function_dtor
Run Code Online (Sandbox Code Playgroud)
Ger*_*ong 20
好的,所以我终于让它自己运行它完美的工作!我假设macOS High Sierra附带的xdebug二进制文件(在下面找到/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so:)与PHP7的新Zend引擎不兼容.
所以我从xdebug网站下载了最新的源代码并执行了以下操作:
phpize以配置新Zend引擎的构建;./configuremake现在新的二进制文件正在 modules/xdebug.so
但是,macOS系统完整性保护(SIP)将阻止您覆盖xdebug.sounder /usr/lib/php/extensions/.我不想禁用它,所以我创建了一个新的目录路径,/usr/local/lib/php/extensions/并将新二进制文件复制到此位置.我不确定这个目录是否是放置它的最佳位置,或者这是不好的做法,但它对我有用.
最后我重新配置我的php.ini以使用新的二进制文件,一切都运行完美!
小智 7
要安装它,您必须拥有xcode命令行工具.
所以你需要运行:
xcode-select --install
Run Code Online (Sandbox Code Playgroud)
然后你需要安装autoconf:
brew install autoconf
Run Code Online (Sandbox Code Playgroud)
然后你必须从这里下载代码. 之后你必须在源代码的文件夹中运行:
phpize./configuremakesudo cp modules/xdebug.so /usr/local/php/extensions (如果目录不存在则去创建它)最后在php.ini里面添加
zend_extension=/usr/local/php/extensions/xdebug.so
Run Code Online (Sandbox Code Playgroud)
之后,您可以在php.ini中启用xdebug并重启apache
sudo apachectl restart
Run Code Online (Sandbox Code Playgroud)