Mac Catalina 安装 Xdebug

Mac Catalina Install Xdebug

我整天都在努力让 xdebug 工作。我已经尝试完全重新安装自制软件,清除 php 并安装最新版本,重新安装 apache(以下:https://getgrav.org/blog/macos-catalina-apache-multiple-php-versions),现在尝试使用 pecl 以及源代码 xdebug 和我进行安装继续得到错误。尝试通过 pecl 安装:

sudo pecl install xdebug
Password:

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in Validator.php on line 1933

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/local/pear/share/pear/PEAR/PackageFile/v2/Validator.php on line 1933
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
Cannot install, php_dir for channel "pecl.php.net" is not writeable by the current user

robshpiel1@iPutz47 ~ % pecl config-get php_dir
/usr/lib/php/

robshpiel1@iPutz47 ~ % sudo chown robshpiel1 /usr/lib/php 
chown: /usr/lib/php: Read-only file system

robshpiel1@iPutz47 ~ % pecl config-set php_dir /usr/local/opt/php@7.2/
config-set succeeded

robshpiel1@iPutz47 ~ % sudo pecl install xdebug                       

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in Validator.php on line 1933

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/local/pear/share/pear/PEAR/PackageFile/v2/Validator.php on line 1933
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading xdebug-2.9.0.tgz ...
Starting to download xdebug-2.9.0.tgz (242,853 bytes)
..................................................done: 242,853 bytes

Fatal error: Cannot use result of built-in function in write context in /usr/local/pear/share/pear/Archive/Tar.php on line 639

或者当从实际来源制作时,我在 make install 上得到以下信息:

robshpiel1@iPutz47 xdebug % sudo make install
Password:
Installing shared extensions:     /usr/lib/php/extensions/no-debug-non-zts-20180731/
cp: /usr/lib/php/extensions/no-debug-non-zts-20180731/#INST@4741#: Read-only file system
make: *** [install-modules] Error 1
robshpiel1@iPutz47 xdebug % 

Catalina 中的权限和只读文件系统一定有问题,我似乎无法理解它。我什至尝试关闭 SIP。

有什么线索吗?

PHP、Apache、Homebrew、Eclipse 都已安装并正常工作..只是无法让 xdebug 工作。

每个错误都有不同的原因。

首先,您的 sudo pecl install 通常是安装 Xdebug 的正确方法,因为正如您所发现的,您可以使用 pecl config-set.

设置安装目录

但是,您 运行 正在使用的 pecl/pear 版本可能是 PHP 的 版本。因为 PHP 确实会偶尔更改,所以 pecl 工具也需要更新。对于 PHP 7.2,我 运行 pecl 版本 1.10.9(你可以用 pecl -V 检查)。我认为你 运行ning 的年龄要大一些。通常您可以使用 pear upgrade pear 更新 pear/pecl,但您可能会再次 运行 进入不可写目录问题。

其次,sudo make install 失败,因为它试图写入不可写的目录 (/usr/lib/php/extensions/no-debug-non-zts-20180731/)。如果您知道正确的目录是什么(检查 php -i | grep extensions),您可以自己将其复制到该目录中。在 make 阶段之后,Xdebug 源代码树中的 modules 目录中应该有一个 xdebug.so

解决后一个问题的"official"方法是使用Xdebug的./configure行的--with-php-config选项,您可以在其中指定要用于Xdebug的选项类似于:./configure --with-php-config=/usr/local/opt/php@7.2/bin/php-config(但请检查路径,因为我没有在此处设置 Mac)。然后这应该选择正确的扩展目录,并且 sudo make install 应该工作。

好的,感谢 Derek 的帮助,我成功了。这是我为完整 Mac PHP 开发设置所做的:

0) 如果还没有安装先决条件软件(自制软件、xcode 等)

Xcode 命令行工具:

$ xcode-select --install

自制软件:

    $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Catalina Required Libraries:

Catalina 所需的库:

 $ brew install openldap libiconv

1) 完全卸载 php、httpd (apache),并删除 xdebug 文件(如果您已经安装了它们):

$ brew update
$ brew upgrade
$ brew cleanup
$ brew list | grep php

根据brew list命令找到你安装的php的任何版本然后卸载它们,例如:

brew uninstall --force php72

清除任何旧的 php 配置

rm -Rf /usr/local/etc/php/*

2) 安装 Apache

如果您已经安装了内置的 Apache 运行ning,则需要先将其关闭,并删除所有自动加载脚本:

$ sudo apachectl stop
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null

安装阿帕奇:

$ brew install httpd

将 Apache 设置为自动启动:

$ sudo brew services start httpd

您现在应该可以转到 http://localhost:8080 并查看 "It Works" 消息。

3) 配置 Apache

使用您最喜欢的文本编辑器,打开 /usr/local/etc/httpd/httpd.conf

找到 Listen 8080 行并将其更改为 Listen 80

如果需要,请更改为提供网站服务的默认目录。搜索术语 DocumentRoot 并将值更改为您想要的位置。我用过:

/Library/WebServer/Documents

但你可以把它放在任何你喜欢的地方(例如/Users/your_user/Sites

您还需要更改 DocumentRoot 行正下方的标记引用。这也应该更改为指向您的新文档根目录:

 /Library/WebServer/Documents

在同一块中,您会发现一个 AllowOverride 设置,应将其更改为:

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   AllowOverride FileInfo AuthConfig Limit
#
AllowOverride All

此外,我们现在应该启用默认情况下被注释掉的 mod_rewrite。搜索 mod_rewrite.so 并通过删除前导 #:

取消注释该行
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

更改用户和组以匹配您当前登录的用户:

User your_user
Group staff

将服务器名称更改为 localhost

保存文件。

重新启动 Apache 以确保您的更改生效:

$ sudo apachectl -k restart

3) 安装PHP

我安装了 php 7.2,尽管它不是最新的,只是因为我的托管站点和 wordpress 使用 php 7.2,我想将我的 php 应用程序与我的 wordpress 集成地点。

$ brew install php@7.2

安装 php 后,返回您的 httpd.conf 文件并添加以下行:

LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so

在之前未注释的 LoadModule 下方重写上一步的 _module。

您还必须明确设置 PHP 的目录索引,因此搜索此块:

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

复制并替换为:

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

保存文件并再次重启apache服务器:

$ sudo apachectl -k restart

4) 验证 php 安装

只需在您之前使用此一行创建的 Sites/ 文件夹中创建一个名为 info.php 的文件即可。

echo "<?php phpinfo();" > ~/Sites/info.php

将浏览器指向 http://localhost/info.php,您应该会看到 PHP 信息页面。

Homebrew 应该在安装过程中将其首选 /usr/local/bin 和 /usr/local/sbin 添加到您的路径中。通过键入快速测试:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Library/Apple/bin

如果您没有看到它,您可能需要手动将它们添加到您的路径中。根据您使用的 shell,您可能需要将此行添加到 ~/.profile、~/.bash_profile 或 ~/.zshrc:

export PATH=/usr/local/bin:/usr/local/sbin:$PATH

5) 安装 Xdebug。

如果命令:

$ pecl install xdebug

失败,因为 phpize 没有返回正确的信息,或者它试图写入它不能写入的文件夹,或者它找不到 php.h,等等,就像它对我所做的那样等等启动此 post,尝试以下操作:

首先,您需要确保Xcode和命令行工具已安装。打开终端 window 和 运行 以下命令显示 SDK 路径:

$ xcrun --show-sdk-path

此命令应输出如下内容:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk

如果没有,请使用步骤 0 中列出的命令安装它们。

现在在您的主文件夹中为 phpize 创建一个新文件夹:

$ mkdir ~/php-private/

并将以下文件复制到其中:

$ cp /usr/bin/phpize ~/php-private/

打开文本编辑器,创建一个包含以下补丁代码的文件:

--- /usr/bin/phpize 2019-09-11 02:46:18.000000000 +0200
+++ ./phpize    2019-12-26 23:10:32.000000000 +0100
@@ -1,11 +1,12 @@
 #!/bin/sh

 # Variable declaration
+XCODE_SDK_ROOT=$(/usr/bin/xcrun --show-sdk-path)
 prefix='/usr'
 datarootdir='/usr/php'
 exec_prefix="`eval echo ${prefix}`"
 phpdir="`eval echo ${exec_prefix}/lib/php`/build"
-includedir="`eval echo ${prefix}/include`/php"
+includedir="`eval echo ${XCODE_SDK_ROOT}${prefix}/include`/php"
 builddir="`pwd`"
 SED="/usr/bin/sed"

将该文件另存为 phpize-catalina.patch 在您的新 php-private 文件夹中(一定要 cd 到该文件夹​​)。

接下来修补你的新副本 phpize:

$ patch ~/php-private/phpize < phpize-catalina.patch    

接下来,下载最新的xdebug源文件,我是2.9.0

$ git clone git://github.com/xdebug/xdebug.git

那应该已经将所有源文件下载到~/xdebug 路径。将目录更改为此路径。

$ cd ~/xdebug

现在 运行 我们修补的 phpize 文件:

$ ~/php-private/phpize

您应该看到以下输出:

Configuring for:
PHP Api Version:         20180731
Zend Module Api No:      20180731
Zend Extension Api No:   320180731

如果您收到错误:

Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

说明你没有安装autoconf。尝试:

$ brew install autoconf

收到 phpize 的上述输出后,配置并安装 xdebug:

./configure --with-php-config=/usr/local/opt/php@7.2/bin/php-config

这应该使用您在第 3 步中通过自制软件安装的 php 配置。

现在构建扩展:

$ make

现在安装它:

$ make install

您应该会看到如下内容:

Installing shared extensions:     /usr/local/Cellar/php@7.2/7.2.26/pecl/20170718/

  +----------------------------------------------------------------------+
  |                                                                      |
  |   INSTALLATION INSTRUCTIONS                                          |
  |   =========================                                          |
  |                                                                      |
  |   See https://xdebug.org/install.php#configure-php for instructions  |
  |   on how to enable Xdebug for PHP.                                   |
  |                                                                      |
  |   Documentation is available online as well:                         |
  |   - A list of all settings:  https://xdebug.org/docs-settings.php    |
  |   - A list of all functions: https://xdebug.org/docs-functions.php   |
  |   - Profiling instructions:  https://xdebug.org/docs-profiling2.php  |
  |   - Remote debugging:        https://xdebug.org/docs-debugger.php    |
  |                                                                      |
  |                                                                      |
  |   NOTE: Please disregard the message                                 |
  |       You should add "extension=xdebug.so" to php.ini                |
  |   that is emitted by the PECL installer. This does not work for      |
  |   Xdebug.                                                            |
  |                                                                      |
  +----------------------------------------------------------------------+

现在您需要将扩展​​名添加到您的 php.ini 文件中。使用您喜欢的编辑器修改 /usr/local/etc/php/7.2/php.ini(打开文本编辑器时不要忘记 sudo)并将其添加到最底部:

[xdebug]
zend_extension=/usr/local/Cellar/php@7.2/7.2.26/pecl/20170718/xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_handler=dbgp
xdebug.remote_port=9000

请注意,您真正需要添加的只是 zend_extension 行,但为了让它与 Eclipse 一起使用,我使用了远程启用标志以及此处列出的其他设置。

最后,重启apache:

$ sudo apachectl -k restart

然后当您刷新之前创建的 info.php 页面时,您应该会在配置中看到 xdebug 行。类似于:

succesful xdebug validation

6) 最后,为了完成 PHP mac 开发设置,我为 php(来自他们的网站)和 [=229= 安装了最新版本的 eclipse ] 服务器(使用自制软件)。您可以 google 如何安装它们,因为它们非常简单。

或者,如果您是 MAC 用户,则可以安装 MAMP。它带有 xdebug 扩展,可以在 MAMP 内置的所有 php 版本中使用。

安装MAMP后,只需在php.ini文件对应PHPPHP

文件中添加这几行即可

对于php8:

[xdebug]

zend_extension="/Applications/MAMP/bin/php/php8.0.0/lib/php/extensions/no-debug-non-zts-20200930/xdebug.so"
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_port=9003
xdebug.client_host=localhost
xdebug.remote_port=9003
xdebug.idekey="netbeans-xdebug"  // only for netbeans

对于 php 7.4 及更早版本:

[xdebug]

zend_extension="/Applications/MAMP/bin/php/php7.4.12/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so"
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.client_port=localhost
xdebug.remote_port=9003
xdebug.idekey="netbeans-xdebug"  // only for netbeans