Після гіркої майже 24-годинної спроби змусити xdebug працювати з Netbeans 8.0.2, я знайшов рішення, яке, сподіваюсь, буде працювати для всіх стеків Ubuntu та Ubuntu.
Проблема №1: Версії PHP та xdebug повинні бути сумісними
Іноді, якщо ви використовуєте налаштування Linux і apt-get встановити xdebug, це не дасть вам належної версії xdebug. У моєму випадку у мене була остання версія php, але стара версія xdebug. Це повинно бути пов’язано з моєю поточною версією Xubuntu. Версії програмного забезпечення залежать від сховищ, які залежать від версії ОС, яку ви використовуєте.
Рішення: PHP має акуратний менеджер розширень під назвою PECL. Дотримуйтесь інструкцій, наведених тут, щоб забезпечити його роботу. По-перше, як зазначив член у коментарях, вам слід встановити пакет розробників PHP, щоб змусити PECL працювати:
sudo apt-get install php5-dev
Потім, використовуючи PECL, ви зможете встановити останню стабільну версію xdebug:
sudo pecl install php5-xdebug
Щойно ви це зробите, буде встановлена відповідна версія xdebug, але не готова до використання. Після цього вам потрібно буде його ввімкнути. Я бачив багато пропозицій щодо того, як це зробити, але справа в тому, що PHP потребує деяких модулів, щоб бути ввімкненими як для клієнта, так і для сервера, в даному випадку Apache. Здається, найкращою практикою тут є використання вбудованого методу ввімкнення модулів, який називається php5enmod. Використання описано тут .
Проблема №2: Увімкніть модуль правильно
По-перше, вам потрібно буде зайти в папку / etc / php5. Там ви знайдете 3 папки, apache2, cli та mods_available. Папка mods_available містить текстові файли з інструкціями щодо активації даного модуля. Конвенція імен [модуль] .ini. Погляньте всередині декількох з них, подивіться, як вони налаштовані.
Тепер вам доведеться створити ваш файл ini всередині папки mods_available. Створіть файл з ім'ям xdebug.ini, і всередині файлу вставте це:
[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
Переконайтесь, що директива [xdebug] присутня, точно так само, як у прикладі вище. Модуль повинен працювати. Насправді, просто скопіювавши і вставивши весь код, ви таким чином станете щасливішим. : D
Примітка: шлях zend_extension дуже важливий. У цьому прикладі він вказує на поточну версію механізму PHP, але спочатку слід перейти до / usr / lib / php5 і переконатися, що папка, названа цифрами, є правильною. Налаштуйте ім'я відповідно до того, що ви там бачите, і поки ви перебуваєте, перевірте всередині папки, щоб переконатися, що xdebug.so справді там. Мало б бути, якби ти все зробив правильно.
Тепер, коли ваш xdebug.ini створений, настав час увімкнути модуль. Для цього відкрийте консоль і введіть:
php5enmod xdebug
Якщо все пішло правильно, PHP створив два посилання на цей файл, одне всередині /etc/php5/apache2/conf.d та інше всередині /etc/php5/cli/conf.d
Перезапустіть сервер Apache і введіть це на консолі:
php -v
Ви повинні отримати щось подібне:
PHP 5.5.9-1ubuntu4.6 (cli) (built: Feb 13 2015 19:17:11)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.3.1, Copyright (c) 2002-2015, by Derick Rethans
Це означає, що клієнт PHP прочитав ваш файл xdebug.ini та завантажив модуль xdebug.so. Все йде нормально.
Тепер створіть скрипт phpinfo десь на своєму веб-сервері та запустіть його. Ось що ви повинні побачити, якщо все пішло райт:
Якщо ви бачите це, Apache також завантажив модуль, і ви, мабуть, готові до роботи. А тепер давайте подивимось, чи правильно Netbeans буде налагоджувати. Створіть дуже простий скрипт, додайте деякі змінні, надайте їм значення і встановіть на них точку зупинки. Тепер натисніть CTRL + F5, натисніть "крок" на панелі налагоджувача і перевірте, чи отримаєте ви щось подібне:
Не забудьте перевірити конфігурацію Netbeans для налагодження в розділі tools / options / php. Це повинно виглядати приблизно так:
Сподіваюсь, це проливає світло на цю досить незрозумілу, заплутану проблему.
Найкращі побажання!
phpinfo()
повідомляти про це в завантаженому розширенні? Це те, що ви маєте на увазі під "роботою"?