Mac Catalina 安装 Xdebug

Rob*_*oro 3 macos xcode xdebug macos-catalina

我一整天都在努力让 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
Run Code Online (Sandbox Code Playgroud)

或者从实际来源制作时,我在 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 % 
Run Code Online (Sandbox Code Playgroud)

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

有什么线索吗?

PHP、Apache、Homebrew、Eclipse 都已安装并运行。只是无法让 xdebug 工作。

Rob*_*oro 8

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

0) 如果尚未安装,请安装必备软件(自制软件、xcode 等)

Xcode 命令行工具:

$ xcode-select --install
Run Code Online (Sandbox Code Playgroud)

家酿:

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

Catalina 所需的库:

 $ brew install openldap libiconv
Run Code Online (Sandbox Code Playgroud)

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

$ brew update
$ brew upgrade
$ brew cleanup
$ brew list | grep php
Run Code Online (Sandbox Code Playgroud)

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

brew uninstall --force php72
Run Code Online (Sandbox Code Playgroud)

清除所有旧的 php 配置

rm -Rf /usr/local/etc/php/*
Run Code Online (Sandbox Code Playgroud)

2)安装阿帕奇

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

$ sudo apachectl stop
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

安装阿帕奇:

$ brew install httpd
Run Code Online (Sandbox Code Playgroud)

设置 Apache 自动启动:

$ sudo brew services start httpd
Run Code Online (Sandbox Code Playgroud)

您现在应该能够访问http://localhost:8080并看到“It Works”消息。

3)配置Apache

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

找到说的那一行Listen 8080并将其更改为Listen 80

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

/Library/WebServer/Documents
Run Code Online (Sandbox Code Playgroud)

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

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

 /Library/WebServer/Documents
Run Code Online (Sandbox Code Playgroud)

在同一个块中,您将找到一个 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
Run Code Online (Sandbox Code Playgroud)

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

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
Run Code Online (Sandbox Code Playgroud)

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

User your_user
Group staff
Run Code Online (Sandbox Code Playgroud)

将服务器名称更改为 localhost

保存文件。

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

$ sudo apachectl -k restart
Run Code Online (Sandbox Code Playgroud)

3) 安装 PHP

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

$ brew install php@7.2
Run Code Online (Sandbox Code Playgroud)

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

LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
Run Code Online (Sandbox Code Playgroud)

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

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

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>
Run Code Online (Sandbox Code Playgroud)

复制并替换为:

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

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

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

$ sudo apachectl -k restart
Run Code Online (Sandbox Code Playgroud)

4)验证php安装

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

echo "<?php phpinfo();" > ~/Sites/info.php
Run Code Online (Sandbox Code Playgroud)

将浏览器指向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
Run Code Online (Sandbox Code Playgroud)

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

export PATH=/usr/local/bin:/usr/local/sbin:$PATH
Run Code Online (Sandbox Code Playgroud)

5) 安装 Xdebug。

如果命令:

$ pecl install xdebug
Run Code Online (Sandbox Code Playgroud)

由于 phpize 没有返回正确的信息而失败,或者它试图写入它无法写入的文件夹,或者它找不到 php.h 等,就像它对我所做的那样以及这篇文章的开头,请尝试以下操作:

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

$ xcrun --show-sdk-path
Run Code Online (Sandbox Code Playgroud)

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

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

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

$ mkdir ~/php-private/
Run Code Online (Sandbox Code Playgroud)

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

$ cp /usr/bin/phpize ~/php-private/
Run Code Online (Sandbox Code Playgroud)

打开文本编辑器,并使用以下补丁代码创建一个文件:

--- /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"
Run Code Online (Sandbox Code Playgroud)

将该文件另存为 phpize-catalina.patch 在您的新 php-private 文件夹中(确保也将 cd 放入该文件夹)。

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

$ patch ~/php-private/phpize < phpize-catalina.patch    
Run Code Online (Sandbox Code Playgroud)

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

$ git clone git://github.com/xdebug/xdebug.git
Run Code Online (Sandbox Code Playgroud)

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

$ cd ~/xdebug
Run Code Online (Sandbox Code Playgroud)

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

$ ~/php-private/phpize
Run Code Online (Sandbox Code Playgroud)

您应该看到以下输出:

Configuring for:
PHP Api Version:         20180731
Zend Module Api No:      20180731
Zend Extension Api No:   320180731
Run Code Online (Sandbox Code Playgroud)

如果您收到错误:

Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
Run Code Online (Sandbox Code Playgroud)

这意味着您没有安装 autoconf。尝试:

$ brew install autoconf
Run Code Online (Sandbox Code Playgroud)

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

./configure --with-php-config=/usr/local/opt/php@7.2/bin/php-config
Run Code Online (Sandbox Code Playgroud)

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

现在构建扩展:

$ make
Run Code Online (Sandbox Code Playgroud)

现在安装它:

$ make install
Run Code Online (Sandbox Code Playgroud)

你应该看到类似的东西:

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.                                                            |
  |                                                                      |
  +----------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

现在您需要将扩展​​添加到您的 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
Run Code Online (Sandbox Code Playgroud)

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

最后,重启apache:

$ sudo apachectl -k restart
Run Code Online (Sandbox Code Playgroud)

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

成功的 xdebug 验证

6) 最后,对于我完整的 PHP mac 开发设置,我为 php(从他们的网站)以及 SQL Server(使用自制软件)安装了最新版本的 eclipse。您可以谷歌搜索如何安装它们,因为它们非常简单。