我一直在努力让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正常工作。
答案 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的行。像这样:
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