Mac Catalina 安装 Xdebug

2023-12-14

我一整天都在努力让 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/[email protected]/
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 工作。


好的,感谢 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,则需要先将其关闭,并删除所有自动加载脚本:

$ 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://本地主机: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 [email protected]

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

LoadModule php7_module /usr/local/opt/[email protected]/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 等,就像它对我所做的那样以及这篇文章的开头,请尝试以下操作:

首先,您需要确保已安装 Xcode 和命令行工具。打开终端窗口并运行以下命令以显示 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/[email protected]/bin/php-config

这应该使用您在步骤 3 中通过 homebrew 安装的 php 配置。

现在构建扩展:

$ make

现在安装它:

$ make install

您应该看到类似以下内容:

Installing shared extensions:     /usr/local/Cellar/[email protected]/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/[email protected]/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 行。就像是:

成功的 xdebug 验证

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mac Catalina 安装 Xdebug 的相关文章

随机推荐

  • 对于繁重的计算,Fortran 是否比 C 更容易优化?

    我时不时地读到 对于繁重的计算 Fortran 比 C 更快或者可以更快 这是真的吗 我必须承认我对Fortran几乎不了解 但是到目前为止我所看到的Fortran代码并没有表明该语言具有C所没有的功能 如果是真的 请告诉我原因 请不要告诉
  • mysql 搜索不带空格

    我的数据库中有一个名称列表 我必须找到在 url 中传递的名称的 id 我的问题是 我在 url 中传递的名称中不会有空格 而保存的记录将在数据库中 当我搜索数据库时 我没有找到任何记录 例如 数据库记录是 我的名字 而我将在 url 中传
  • 原型中的对象作为引用继承

    我想使用原型继承新的对象实例 测试用例 var MyObj function MyObj prototype objName I want this to be a different object for each instance of
  • Java 如何决定何时导入?

    为什么Java不需要导入Integer String等类 而需要导入其他类 有一个隐含的导入java lang 来自Java规范 编译单元自动访问其包中声明的所有类型 并自动导入预定义包中声明的所有公共类型java lang
  • 在验证属性时将两个正则表达式合并为一个

    我有两个正则表达式 RegularExpression ErrorMessage Something 验证仅包含空格的字符串 不包含任何其他字符 前任 length 7 RegularExpression ErrorMessage some
  • 在 Powershell 电子邮件中设置 HTML 字体颜色

    我有一个 powershell 脚本 将为密码将在 这是我当前正在使用的代码 我还要补充一点 这是我第一次尝试在 powershell 中编写脚本 因此如果我长期做事 我会接受一些输入 Import ActiveDirectory modu
  • 使用 Inno Setup 安装的应用程序的 Windows 10 开始图标上下文菜单中缺少卸载选项

    我使用 Inno Setup 5 5 9 创建了一个安装文件 然后在 Windows 10 计算机上运行该文件 我唯一的问题与卸载程序有关 我可以使用控制面板来卸载 但是在 开始 菜单中 当我右键单击启动程序的快捷方式时 上下文菜单中没有选
  • pyenchant 在 Mac OS X 上找不到字典文件

    我在运行 Lion 的 MacbookPro 上安装 pyenchant 时遇到问题 我使用 homebrew 和 pip 来安装 enchant 和 pyenchant 自制安装附魔 pip 安装 pyenchant 我还下载了一本英语词
  • 使用乔达时间将一个时区转换为另一时区

    有一个表格有一个国家 地区下拉菜单 用户将选择国家 地区 然后有一个时区下拉菜单 用户将选择用户选择的国家 地区可用的时区 然后用户将输入本地日期 例如 2014 年 12 月 26 日 和时间 23 11 24 小时时间 此输入的日期和时
  • OpenSSL 的链接错误[重复]

    这个问题在这里已经有答案了 我已经安装了 OpenSSL 我只想使用 OpenSSL 运行一个程序 这是我的程序 摘自here include
  • jQuery 对象:缓存还是不缓存?

    我的 Javascript JS 代码遇到了一些麻烦 因为有时我需要在同一个函数中多次访问相同的 DOM 元素 还提供了一些推理here 从性能的角度来看 是一次性创建一个 jQuery 对象然后缓存它更好 还是随意创建同一个 jQuery
  • 使用 LINQ 从两个列表中选择不同的元素?

    List
  • 在 WPF 中使用图片或图标代替 DataGridCheckBoxColumn

    我想在选中时将 DataGridColumn 内部的复选框更改为图像 在未选中时将其更改为图像 我该怎么办 Ps 我的DataGridCheckBoxColumn定义如下
  • PyQT4 WheelEvent?如何检测车轮是否被使用过?

    我想在 PyQT 中找出如何设置鼠标滚轮事件 我需要它 以便我可以将其附加到 Qscroll 区域 我使用的代码工作正常 但大小是硬编码的 我需要它以某种方式动态调整 具体取决于滚轮 鼠标上 的使用方式 就像我向上滑动鼠标滚轮时一样 我的框
  • 限制选中的复选框数量

    我有一个带有几个复选框的表单 我的表单中有三类复选框 我需要限制最多三个复选框per类别 我使用了这个脚本 但它限制每个表单三个复选框 jQuery function var max 3 var checkboxes jQuery inpu
  • 通过 SMTP 发送邮件 Gmail Oauth2 问题

    我可以通过以下方式对 SMTP 进行身份验证谷歌的例子 但现在的问题是我无法发送邮件 每当我尝试发送邮件时 都会收到以下错误 com sun mail smtp SMTPSendFailedException 530 5 5 1 Authe
  • 如何从 Kivy 中的另一个小部件访问某些小部件属性?

    好吧 假设我希望某个小部件中的标签使用另一个小部件内标签中的文本
  • 消除移动 Safari 中点击事件的 300 毫秒延迟

    我读过移动版 Safari 在点击事件上有 300 毫秒的延迟从点击链接 按钮到事件触发 延迟的原因是等待用户是否打算双击 但从 UX 角度来看 等待 300 毫秒通常是不可取的 一种解决方案要消除这 300 毫秒的延迟 可以使用 jQue
  • 使用 Python 将 DOCX 文件转换为文本文件

    我编写了以下代码将 docx 文件转换为文本文件 我在文本文件中打印的输出是整个文件的最后一段 部分 而不是完整的内容 代码如下 from docx import Document import io import shutil def c
  • Mac Catalina 安装 Xdebug

    我一整天都在努力让 xdebug 工作 我尝试完全重新安装自制程序 清除 php 并安装最新版本 重新安装 apache 如下 https getgrav org blog macos catalina apache multiple ph