Mac Catalina安装Xdebug

时间:2020-01-09 21:27:09

标签: xcode macos 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

或者从实际来源制作时,我会在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正常工作。

4 个答案:

答案 0 :(得分:6)

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

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

安装Apache:

$ brew install httpd

将Apache设置为自动启动:

$ sudo brew services start httpd

您现在应该可以转到http://localhost:8080并看到“有效”消息。

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

如果看不到此内容,则可能需要将它们手动添加到路径中。根据您使用的外壳,可能需要将此行添加到〜/ .profile,〜/ .bash_profile或〜/ .zshrc:

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

5)安装Xdebug。

如果命令:

$ pecl install xdebug

由于phpize无法返回正确的信息,或者由于它试图写入无法或无法找到php.h等原因的文件夹而失败,就像它为我所做的以及这篇文章的开头一样,请尝试以下操作:< / p>

首先,您需要确保已安装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文件夹中(请确保也将其插入该文件夹)。

接下来修补新的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中通过homebrew安装的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开发设置,我安装了最新版本的eclipse for php(来自其网站)以及SQL Server(使用自制软件)。您可以在Google上搜索如何安装它们,因为它们非常简单。

答案 1 :(得分:0)

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

首先,sudo pecl install通常是安装Xdebug的正确方法,因为您已经发现可以使用pecl config-set设置安装目录。

但是,您正在运行的pecl / pear版本可能是PHP的版本。由于PHP确实会偶尔更改,因此pecl工具也需要更新。对于PHP 7.2,我运行pecl版本1.10.9(可以使用pecl -V进行检查)。我认为您正在运行的是一个相当老的版本。通常,您可以使用pear upgrade pear来更新pear / pecl,但是您可能会再次遇到无法写入的目录问题。

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

解决后一个问题的“官方”方法是在Xdebug的--with-php-config行中使用./configure选项,您可以在其中指定要用于Xdebug的选项,例如:{ {1}}(但请检查路径,因为我这里没有设置Mac)。然后,这应该选择正确的扩展目录,并且./configure --with-php-config=/usr/local/opt/php@7.2/bin/php-config应该起作用。

答案 2 :(得分:0)

请注意,如果要在没有Homebrew的MacOS上本地安装Xdebug,可以遵循this answer

答案 3 :(得分:0)

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

安装 MAMP 后,您只需在每个 PHP 版本对应的 php.ini 文件中添加以下几行:

对于 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