2015-09-25 43 views
9

Używam PHPStorm do rozwijania moich stron internetowych PHP. Wszystko działa dobrze z moim serwerem Apache, XDebug i prostym projektem PHP. Nie ma problemu.Jak debugować php rzemieślnika służyć w PHPStorm?

Ale kiedy próbuję debugować projekt WWW Laravel 5.1 przy użyciu php artisan serve, nie mogę debugować punktów przerwania. To jak php artisan serve użycia innego serwera ...

I na moim PHPStorm, zawsze patrz:

Czekam na połączenie przychodzące z kluczem IDE (randomNumberHere) "

mam skonfigurowane wszystko w PHPStorm (umożliwia zdalne debugowanie, poprawny port itp.), a przy "normalnych" projektach PHP wszystko działa dobrze.

Czy ktoś może mi powiedzieć, czy muszę coś zmienić?

Dzięki!

+0

'php rzemieślnik służyć' ** nie ** używać innego serwera, dokładniej [wbudowany serwer sieciowy PHP] (http://php.net/manual/en/features.commandline.webserver.php). – Bogdan

+0

Ok, dzięki @Bogdan, ale czy wiesz, co muszę zrobić, aby debugować wbudowany serwer WWW PHP? Albo muszę przenieść wszystko na mój serwer apache ... Dzięki! – chemitaxis

+0

Nie próbowałem tego do tej pory, ale spróbuj przejrzeć dokumentację [PHPStorm] (https://www.jetbrains.com/phpstorm/help/php-built-in-web-server.html) na ten temat . – Bogdan

Odpowiedz

2

Nie używam phpstorm, ale być może rozwiązanie, którego używam do debugowania w netbeans przyda się.

rzemieślnik służyć używa innego pliku ini z jednego obciążonego kontenera internetowej

Znajdź wpisując

php --ini 

Na moim polu ubuntu to znajduje się w

Loaded Configuration File:   /etc/php/7.0/cli/php.ini 

edytować ini dla twojego środowiska cli i użyj tej samej konfiguracji, którą użyłeś, aby włączyć ją do swojego kontenera internetowego;

Przykład ...

[Zend] 
zend_extension=/usr/lib/php/20151012/xdebug.so 
xdebug.remote_enable=1 
xdebug.remote_handler=dbgp 
xdebug.remote_mode=req 
xdebug.remote_host=127.0.0.1 
xdebug.remote_port=9000 

Jedyne zastrzeżenie do tego, że tak długo, jak masz to skonfigurowane, to wpływ na inne rzeczy, które możesz używać PHP CLI.

Dodatkowa nota

Jeśli chcesz, aby sesja debugowania zawsze uruchamia się automatycznie (zamiast inicjowania zdalnego debugowania poprzez żądanie URL parametru XDEBUG_SESSION_START = nazwa, na przykład, podczas debugowania CLI stuff), można ustawić Xdebug aby zawsze rozpocząć zdalną sesję debugowania z tą dodatkową konfiguracją;

xdebug.remote_autostart = 1 

Zobacz https://xdebug.org/docs/all

Normalnie trzeba użyć konkretnej zmiennej HTTP GET/POST, aby rozpocząć zdalne debugowanie (patrz zdalne debugowanie). Gdy to ustawienie ma wartość 1, Xdebug zawsze będzie próbował uruchomić sesję zdalnego debugowania i spróbuje połączyć się z klientem, nawet jeśli nie ma zmiennej GET/POST/COOKIE.

6

Debugowanie przy użyciu php artisan serve nie działa, chyba że włączyłeś debugowanie w pliku ini.

@Bogdan wskazał przyczynę.artisan serve wywoła PHP Wbudowany serwer WWW, ale nie przekazuje opcji wiersza poleceń php (nazwane opcje interpretera w PHPStorm).

czyli jeśli wykonać z linii poleceń:

$ php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 artisan serve 

Następnie te opcje podane przez -d nie są przekazywane do zwanym PHP wbudowany serwer WWW. Możesz zobaczyć wywołanie wbudowanego serwera here.

Obejście problemu w PHPStorm polega na utworzeniu konfiguracji Run, która bezpośrednio wywołuje serwer WWW PHP Build-in. Instrukcje:

  1. Otwarte Run -> Edit Konfiguracje ...
  2. Utwórz nowy 'PHP Wbudowane Web Server'
  3. ustawić wartości:

    • Host: localhost
    • portowe : 8000
    • Źródło dokumentu: wybierz publiczny katalog Laravel:
    • Sprawdź Use route script i wybierz server.php w katalogu głównym projektów Laravel.
    • opcje tłumaczy: -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1
  4. OK i uruchomić.

Teraz PHPStorm wykona samego polecenia jako php artisan serve robi z dodatkowymi opcjami tłumacza. W rzeczywistości jedynym celem jest dołączenie serwera server.php do serwera WWW PHP Build-In. server.php po prostu emuluje funkcjonalność Apache'a o numerze mod_rewrite.

0

Więc, po przejściu przez Jeffry na Bądź fantastyczny w PhpStorm, że został zatrzymany w podobnej sytuacji do OP (w rozdziale dotyczącym Xdebug i laravel). Przygotowywałem punkty przerwania, ale PhpStorm nie był w stanie przerwać wykonania zgodnie z tymi punktami. I, szczerze mówiąc, odpowiedź Josha nieco pomogła mi zrozumieć problem, ale nie była dla mnie wystarczająco jasna. Wyszedłem więc i znalazłem rozwiązanie samodzielnie metodą trafienia i próby, której ostateczne rozwiązanie chcę udostępnić. Może się przydać, niektórzy wciąż się zastanawiają.

Po pierwsze, zgodnie z OP/guessed, php artisan serverma użyć innego serwera. Jest to wbudowany w PHP serwer WWW plus plik routera server.php. A konfiguracje, których używa, to konfiguracje interfejsu CLI. Wypróbuj php --ini, aby znaleźć wszystkie zawarte konfiguracje.

W moim przypadku (Ubuntu 17.10) dołączony plik konfiguracyjny Xdebug pochodził z lokalizacji /etc/php/7.2/cli/conf.d/20-xdebug.ini.Dodałem drugą linię, aby umożliwić zdalne Xdebug a teraz plik wygląda to z łącznie 2 linie:

zend_extension=xdebug.so xdebug.remote_enable=1

teraz do konfiguracji PhpStorm:

  1. Run>Edit Configurations i dać dowolną nazwę lub tylko pozostawić go jako Nienazwana
  2. Click ... po Server: opcja
  3. Kliknij + i nadać dowolną nazwę (na przykład laravel App)
  4. Ustaw Host jak localhost, Port jako 8000 i Debugger jako Xdebug i pozostawiać żadnych innych znaków wyboru niezaznaczone!
  5. Kliknij Apply/OK
  6. Z rozwijanej listy Server down: wybrać jedną po prostu skonfigurować.
  7. Ustaw URL start: URL, pod którym chcesz rozpocząć debuging (np \user)
  8. Wybierz przeglądarkę wolisz.
  9. Kliknij Apply/OK

Proszę pamiętać, że debugger będzie działać dopiero po faktycznym rozpoczęciu serwer internetowy, który jest serwerem, który rozpoczyna się od polecenia php artisan server.

Uruchom teraz serwer WWW, np. php artisan serve iw PhpStorm kliknij Run>Debug 'your-debug-config', a wszystko powinno działać poprawnie!