Po trudnych, prawie 24-godzinnych próbach zmuszenia xdebug do pracy z Netbeans 8.0.2, znalazłem rozwiązanie, które, mam nadzieję, będzie działać na wszystkich stosach Ubuntu i Ubuntu.
Problem numer 1: Wersje PHP i xdebug muszą być kompatybilne
Czasami, jeśli używasz instalacji systemu Linux i apt-get, aby zainstalować xdebug, nie dostaniesz odpowiedniej wersji xdebug. W moim przypadku miałem najnowszą wersję php, ale starą wersję xdebug. To musi być spowodowane moją obecną wersją Xubuntu. Wersje oprogramowania zależą od repozytoriów, które zależą od używanej wersji systemu operacyjnego.
Rozwiązanie: PHP ma zgrabnego menedżera rozszerzeń o nazwie PECL. Postępuj zgodnie z instrukcjami podanymi tutaj, aby go uruchomić. Po pierwsze, jak zauważył członek w komentarzach, powinieneś zainstalować pakiet programisty PHP, aby PECL działał:
sudo apt-get install php5-dev
Następnie, używając PECL, będziesz mógł zainstalować najnowszą stabilną wersję xdebug:
sudo pecl install php5-xdebug
Gdy to zrobisz, właściwa wersja xdebug zostanie zainstalowana, ale nie będzie gotowa do użycia. Następnie musisz go włączyć. Widziałem wiele sugestii, jak to zrobić, ale faktem jest, że PHP potrzebuje niektórych modułów, aby były włączone zarówno dla klienta, jak i serwera, w tym przypadku Apache. Wygląda na to, że najlepszą praktyką jest tutaj użycie wbudowanej metody włączania modułów, zwanej php5enmod. Użycie jest opisane tutaj .
Problem numer 2: Włącz moduł poprawnie
Najpierw musisz wejść do folderu / etc / php5. Tam znajdziesz 3 foldery, apache2, cli i mods_available. Folder mods_available zawiera pliki tekstowe z instrukcjami aktywacji danego modułu. Konwencja nazw to [moduł] .ini. Zajrzyj do kilku z nich, zobacz, jak są skonfigurowane.
Teraz musisz utworzyć plik ini w folderze mods_available. Utwórz plik o nazwie xdebug.ini i wewnątrz pliku wklej to:
[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
Upewnij się, że dyrektywa [xdebug] jest obecna, dokładnie tak, jak w powyższym przykładzie. Niezbędne jest, aby moduł działał. W rzeczywistości, po prostu skopiuj i wklej cały kod, w ten sposób będziesz szczęśliwszą osobą. :RE
Uwaga: ścieżka zend_extension jest bardzo ważna. W tym przykładzie wskazuje na aktualną wersję silnika PHP, ale najpierw powinieneś przejść do / usr / lib / php5 i upewnić się, że folder o nazwie z numerami jest prawidłowy. Dostosuj nazwę do tego, co tam widzisz, a gdy już to robisz, sprawdź wewnątrz folderu, aby upewnić się, że plik xdebug.so naprawdę tam jest. Powinno być, jeśli zrobiłeś wszystko dobrze.
Teraz, po utworzeniu pliku xdebug.ini, czas włączyć moduł. Aby to zrobić, otwórz konsolę i wpisz:
php5enmod xdebug
Jeśli wszystko poszło dobrze, PHP utworzyło dwa linki do tego pliku, jeden w /etc/php5/apache2/conf.d, a drugi w /etc/php5/cli/conf.d
Zrestartuj serwer Apache i wpisz to na konsoli:
php -v
Powinieneś dostać coś takiego:
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
Oznacza to, że klient PHP odczytał twój plik xdebug.ini i załadował moduł xdebug.so. Jak na razie dobrze.
Teraz utwórz skrypt phpinfo gdzieś na swoim serwerze internetowym i uruchom go. Oto, co powinieneś zobaczyć, jeśli wszystko poszło dobrze:
Jeśli to widzisz, Apache również załadował moduł i prawdopodobnie jesteś gotowy do pracy. Zobaczmy teraz, czy Netbeans będzie poprawnie debugować. Utwórz bardzo prosty skrypt, dodaj kilka zmiennych, nadaj im wartości i ustaw dla nich punkt przerwania. Teraz naciśnij CTRL + F5, kliknij „wejdź” w panelu debuggera i zobacz, czy pojawi się coś takiego:
Pamiętaj, aby sprawdzić konfigurację Netbeans pod kątem debugowania, w Tools / options / php. Powinien wyglądać mniej więcej tak:
Mam nadzieję, że to rzuci trochę światła na ten raczej niejasny, zagmatwany problem.
Wszystkiego najlepszego!
phpinfo()
zgłasza to jako wczytane rozszerzenie? Czy to masz na myśli mówiąc „praca”?