所以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
这是我的/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 :(得分:15)
好的,所以我终于让它自己运行它完美无缺!我假设macOS High Sierra附带的xdebug二进制文件(在/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
下找到)与PHP7的新Zend引擎不兼容。
所以我从xdebug website下载了最新的来源并执行了以下操作:
phpize
以配置新Zend引擎的构建; ./configure
make
现在新的二进制文件位于modules/xdebug.so
但是,macOS系统完整性保护(SIP)将阻止您覆盖xdebug.so
下的/usr/lib/php/extensions/
。我不想禁用此功能,因此我在/usr/local/lib/php/extensions/
下创建了一个新的目录路径,并将新的二进制文件复制到此位置。我不确定这个目录是否是放置它的最佳位置,或者这是不好的做法,但它对我有用。
最后我重新配置了我的php.ini以使用新的二进制文件,一切运行完美!
答案 1 :(得分:7)
要安装它,您必须拥有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
答案 2 :(得分:4)
你在“zend_extention”中输错了。这应该是zend_extension。 我认为完整的道路是不必要的 的zend_extension = xdebug.so 应该够了
答案 3 :(得分:0)
对于任何迟到该聚会的人,问题的最初尝试似乎在macOS 10.13.6中都可以正常工作
答案 4 :(得分:0)
向在Mac上安装xDebug时出错的所有人致敬。
错误:未知类型名称'uint64_t'
您的本地/ bin / include中有一些文件导致此错误。通过删除它们,您可以摆脱错误。不过,您可能必须重新安装啤酒。
答案 5 :(得分:0)
如果您在Mac OS X mojave上安装了带有多个PHP版本(即7.1、7.2和7.3)的brew,则可以执行以下操作:
使用brew brew install autoconf
安装autoconf。
更改为要使用Xdebug的PHP版本,运行brew unlink php@7.1 && brew link --force --overwrite php
。这将从PHP 7.1切换到PHP 7.3。
从xdebug网站下载最新的Xdebug源。
提取Xdebug tar并导航到提取的目录,您将在其中看到所有文件。
运行phpize
为新的Zend引擎配置内部版本。
运行./configure
。
运行make
。
Xdebug扩展xdebug.so
在modules
目录中进行编译。
在/usr/local/lib/php/7.3.1/extensions/
下创建新的目录路径,并将xdebug.so
复制到该位置。在这里,7.3.1
是我先前切换的当前版本,请对其进行更改以匹配您的PHP版本。
在编辑器中打开php.ini
并输入
zend_extension="/usr/local/lib/php/7.3.1/extensions/xdebug.so"
,然后保存更改。
运行php -v
,它将显示Xdebug已正确配置。
如果要在另一个PHP版本上配置Xdebug,则从步骤2一直重复到11。如先前的文章所述,您无需在Mac OS X上禁用/启用系统完整性保护。