使用PHP 7在macOS 10.13上进行Xdebug

So macOS High Sierra 10.13 now comes with PHP 7.1. While configuring Apache I also created a new /etc/php.ini from the /etc/php.ini.default file, made sure to check that is was being loaded by PHP after restarting Apache, however the version of Xdebug extension that ships with macOS 10.13 doesn't seem to load or show up when you run phpinfo();

My php.ini is definitely being loaded:

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

Here's what my /etc/php.ini looks like where I configure 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

[Update, fixed that typo here...]

However, Xdebug doesn't load and checking php -i give no results:

$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

And yes, the path to the file is correct:

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

This used to work on PHP 5 so I hope someone can help me and anyone else in future struggling with this issue.

When I check my apache log I get the following error:

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

I'm not making progress in terms of find out how I can resolve this error:

Symbol not found: _xdebug_monitored_function_dtor
douchui4815
douchui4815 FWIW,看起来Apple在更新中修复了它。它适用于macOS10.13.6:)
接近 2 年之前 回复
douxuanyi2813
douxuanyi2813 谢谢,我检查了CLI和浏览器,他们都加载了相同的php.ini文件。
接近 3 年之前 回复
dsa89029
dsa89029 请注意,Apache可能使用不同的php.ini(一个php.ini用于CLI/终端,一个用于Apache/web服务器)。因此,最好检查在实际浏览器中捕获的phpinfo()输出,以查看使用了什么php.ini以及是否加载了xdebug。当然,如果他们都使用相同的ini文件,则可以在终端中执行此类检查。是的--zend_extension与完整路径(更安全)
接近 3 年之前 回复

5个回答



好的,所以我终于让它自己运行它完美无缺! 我假设macOS High Sierra附带的xdebug二进制文件(在 /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so </ code>下找到)不是 兼容PHP7的新Zend引擎。</ p>

所以我从 xdebug网站</ a下载了最新的源代码 >并执行以下操作:</ p>


  1. 使用brew安装autoconf; </ li>
  2. 运行 phpize </ code>以配置构建 新的Zend引擎; </ li>
  3. 运行 ./ configure </ code> </ li>
  4. 运行 make </ code> </ li>
    < / ol>

    现在新的二进制文件位于 modules / xdebug.so </ code> </ p>

    但是macOS系统完整性保护(SIP)会阻止你 覆盖 / usr / lib / php / extensions / </ code>下的 xdebug.so </ code>。 我不想禁用它,所以我在 / usr / local / lib / php / extensions / </ code>下创建了一个新的目录路径,并将新的二进制文件复制到了这个位置。 我不确定这个目录是否是放置它的最佳位置,或者这是不好的做法,但它对我有用。</ p>

    最后我重新配置我的php.ini以使用新的二进制文件 一切都很完美!</ p>
    </ div>

展开原文

原文

Ok so I finally got it running myself it works perfectly! I'm assuming that the xdebug binary that comes with macOS High Sierra (found under: /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so) is not compatible with PHP7's new Zend engine.

So I downloaded the latest source from the xdebug website and did the following:

  1. Installed autoconf with brew;
  2. Run phpize to configure the build for the new Zend engine;
  3. Run ./configure
  4. Run make

Now the new binary is under modules/xdebug.so

However macOS System Integrity Protection (SIP) will prevent you from overwriting the xdebug.so under /usr/lib/php/extensions/. I didn't want to disable this so I created a new directory path under /usr/local/lib/php/extensions/ and copied the new binary to this location. I'm not sure if this directory is the best place to put it or if this is bad practice but it worked for me.

Finally I reconfigured my php.ini to use the new binary and everything worked perfectly!

duanbenzan4050
duanbenzan4050 刚写了zend_extension = xdebug.so,不需要绝对路径
大约一年之前 回复
douxian0008
douxian0008 我在php.ini中添加了这个并且仍然得到错误zend_extension = / usr / local / php / extensions / xdebug.so
一年多之前 回复
drqrdkfue521903877
drqrdkfue521903877 我得到了与@abbood相同的错误,有人可以帮忙吗?
一年多之前 回复
dongwen2162
dongwen2162 我得到了这个失败加载/usr/local/php/extensions/xdebug.so:dlopen(/usr/local/php/extensions/xdebug.so,0x0009):代码签名(/ usr / local / php / extensions / xdebug) .so)在进程中无效:映射文件没有cdhash,完全没有签名? 代码必须至少是临时签名的。
一年多之前 回复
dpzo13732
dpzo13732 我起初就是这个。 我不记得到底为我修复了什么,我认为它要么安装autoconf,要么升级到Xcode 9.0。 我认为它一定是autoconf,因为这允许我的编译器看到我认为包含在最新的PHP安装中的php.h头文件。
2 年多之前 回复
duanchen7036
duanchen7036 我克隆了git存储库,并试图重现你的步骤1-4。 但我收到一条错误消息:致命错误:找不到'php.h'文件
2 年多之前 回复



为了安装它,你必须拥有xcode命令行工具。</ p>

所以你需要 运行:</ p>

  xcode-select --install 
</ code> </ pre>

然后你需要安装autoconf:</ p >

  brew install autoconf 
</ code> </ pre>

然后你必须下载此处的代码。
之后你必须在源代码的文件夹中运行:</ p>


  1. phpize </代码> </ LI>
  2. <代码> ./配置</代码> </ LI>
  3. <代码>使</代码> </ LI>
  4. < 代码> sudo cp modules / xdebug.so / usr / local / php / extensions </ code>(如果目录不存在则去创建它)</ li>
    </ ol>

    最后在php.ini中添加</ p>

      zend_extension = / usr / local / php / extensions / xdebug.so 
    </ code> </ pre>

    之后你可以在php.ini中启用xdebug并重新启动apache </ p>

      sudo apachectl restart 
    </ code> </ pre>
    </ div>

展开原文

原文

In order to install it you have to have xcode command line tools.

So you need to run:

xcode-select --install

Then you need to install autoconf:

brew install autoconf

Then you have to download the code from here. After that you have to run in the folder of the source code:

  1. phpize
  2. ./configure
  3. make
  4. sudo cp modules/xdebug.so /usr/local/php/extensions (if the directory doesn't exist go and create it)

And finally inside php.ini add

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

After that you can enable xdebug inside php.ini and restart apache

sudo apachectl restart



你在“zend_extention”中输了一个拼写错误。 这应该是zend_extension。
并且我认为完整路径是不必要的
zend_extension = xdebug.so
应该足够</ p>
</ div>

展开原文

原文

you made a typo in "zend_extention". this should be zend_extension. and i think the full path is unnecessary zend_extension=xdebug.so should be enough

douguanci9158
douguanci9158 谢谢,这引出了一个我能够解决的新问题。 更新了问题。
2 年多之前 回复



对于在这个聚会上迟到的人来说,问题的初步尝试似乎在macOS 10.13.6中运行得很好</ p>

</ div>

展开原文

原文

For anyone arriving late at this party, the initial attempt in the question seems to work just fine in macOS 10.13.6



对于在Mac上安装xDebug时出错的每个人都知道。</ p>


错误:未知类型名称'uint64_t'</ p>
</ blockquote>

本地/ bin / include中有文件导致此错误。 通过删除它们,你摆脱了错误。 但是,您可能需要重新进行冲泡。</ p>

https: //github.com/cython/cython/issues/2009 </ p>
</ div>

展开原文

原文

Hello for everyone that got error trying to install xDebug on Mac.

error: unknown type name 'uint64_t'

There are files in your local/bin/include that causes this error. By removing them you get rid of the error. Though, you might have to reinsatall brew.

https://github.com/cython/cython/issues/2009

dongliugu8843
dongliugu8843 来自github.com/cython/cython/issues/2009#issuecomment-481395357“/ usr / local / include”中的所有文件。 注意,我没有通过Homebrew进行那么多其他安装,但是我有一个节点文件,我独自留下了其他所有东西,并且有效。
大约一年之前 回复
dqhnp44220
dqhnp44220 请指定我们应删除哪些文件。 即使从您的来源给出这一点也不清楚。
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐