Ма c Каталина Установить Xdebug - PullRequest
0 голосов
/ 10 января 2020

Я изо всех сил пытался заставить xdebug работать весь день. Я попытался полностью переустановить homebrew, вычистил 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

Или при создании из фактического источника я получаю следующее при установке:

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 % 

Что-то должно быть не так с разрешениями и только для чтения файловая система в Каталине, и я не могу обернуться вокруг нее. Я даже пытался отключить SIP.

Есть какие-нибудь подсказки?

PHP, Apache, Homebrew, Eclipse все установлены и работают ... просто не могу заставить xdebug работать.

Ответы [ 3 ]

4 голосов
/ 13 января 2020

Хорошо, у меня все получилось, благодаря помощи Дерека. Вот что я сделал для полной Ma c PHP Настройка разработки:

0) Установите необходимое программное обеспечение, если оно еще не установлено (homebrew, xcode, et c)

Xcode инструменты командной строки:

$ xcode-select --install

Домашний напиток:

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

Необходимые библиотеки Каталины:

 $ brew install openldap libiconv

1) Полное удаление php, httpd (apache) ) и удалите файлы xdebug (если они у вас уже установлены):

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

Найдите все установленные вами версии php на основе команды brew list, а затем удалите их, например:

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

Теперь вы должны иметь возможность go до http://localhost: 8080 и видеть сообщение «Это работает».

3) Настроить Apache

Нас В своем любимом текстовом редакторе откройте /usr/local/etc/httpd/httpd.conf

Найдите строку с надписью Listen 8080 и измените ее на Listen 80

Если хотите, перейдите в каталог по умолчанию, где вы обслуживаете свой сайты от. Найдите термин DocumentRoot и измените значение на нужное вам место. Я использовал:

/Library/WebServer/Documents

, но вы можете поместить его где угодно (например, /Users/your_user/Sites)

Вам также нужно изменить ссылку на тег прямо под Документом Root линия. Это также должно быть изменено, чтобы указать на ваш новый документ root также:

 /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, go вернитесь в файл 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

Просто создайте файл с именем 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 или ~ / .zshr c:

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

5) Установить Xdebug.

Если команда:

$ pecl install xdebug

Сбой из-за того, что phpize не возвращает правильную информацию, или пытается записать в папки, которые не может или не может найти php .h, et c, как это было для меня и с чего начался этот пост, попробуйте следующее:

Во-первых, вам нужно убедиться, что 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

Это должно использовать конфигурацию php, которую вы установили через homebrew на шаге 3 .

Теперь создайте расширение:

$ 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

И затем, когда вы обновите sh страницу информации. php, которую вы создали ранее, вы должны увидеть строки для xdebug в конфигурации. Что-то вроде:

успешной проверки xdebug

6) Наконец, для моей полной PHP ma c настройки разработки я установил последнюю версию eclipse для php (с их сайта), а также SQL Сервер (с использованием homebrew). Вы можете Google, как установить их, поскольку они довольно просты.

0 голосов
/ 29 января 2020

Обратите внимание, что вы можете следовать этому ответу , если вы хотите установить Xdebug на MacOS без Homebrew.

0 голосов
/ 11 января 2020

Каждая ошибка имеет свою причину.

Прежде всего, ваш sudo pecl install, как правило, является правильным способом установки Xdebug, потому что, как вы обнаружили, вы можете установить каталог установки с помощью pecl config-set .

Однако версия pecl / pear, которую вы используете, вероятна для старой версии PHP. Поскольку PHP время от времени меняется, инструмент pecl также необходимо обновить. Для PHP 7.2 я запускаю pecl версии 1.10.9 (вы можете проверить с помощью pecl -V). Я бы подумал, что тот, на котором вы работаете, немного старше. Как правило, вы можете обновить pear / pecl, используя pear upgrade pear, но, скорее всего, вы снова столкнетесь с проблемой неписываемой директории.

Во-вторых, sudo make install не удастся, потому что она пытается записать в неписываемый каталог (/usr/lib/php/extensions/no-debug-non-zts-20180731/). Если вы знаете, какой каталог является правильным (проверьте с помощью php -i | grep extensions), вы можете просто скопировать его в этот каталог самостоятельно. После этапа make в каталоге modules в исходном дереве Xdebug должен быть xdebug.so.

"Официальный" способ решения последней проблемы - использовать параметр --with-php-config в строку ./configure Xdebug, где вы можете указать тот, который вы хотите использовать для Xdebug, с чем-то вроде: ./configure --with-php-config=/usr/local/opt/php@7.2/bin/php-config (но проверьте пути, так как у меня не настроен Ma c здесь). Затем следует выбрать правильный каталог расширений, и sudo make install должно работать.

...