iakta.org
en
23 Dicembre 2017 | 3 min. ( 587 parole ) | di walter

Debug PHP da riga di comando o app

Usare IntelliJ per debuggare PHP (anche da Docker) app da riga di comando, da app mobili ecc
debug php intellij docker xdebug cli command line

IntelliJ può debuggare PHP, sia su un server remoto che dentro un container Docker. Leggete l’altro nostro articolo su come impostare IntelliJ per PHP.

Seguite i passi di quell’articolo per essere sicuri che PHP sia configurato per debuggare e configurato correttamente.

configurare IntelliJ

Per abilitare una sessione i debug da una app remota, dobbiamo aggiungere un’altra configurazione ad IntelliJ.
Cliccare il menu Run e scegliere Edit configuration...
Aggiungete (l’icona [+] in alto a destra) una nuova configurazione PHP Remote Debug e impostarla

title

datele un nome. Qualsiasi, ma segnatevelo.
* Scegliere il Server che hai impostato per il debug remoto di PHP

Siccome vogliamo iniziare il debug autonomo e non via una pagina web, dobbiamo abilitare queste due opzioni: tions:

  • abilitare Filter debug connection by IDE Key.
  • impostare IDE Key con il valore che avete messo nel file xdebug.ini. Se non lo avete fatto, andate e seguite le istruzioni. Per noi è INTELLIJ.

Cliccate OK e salvate.

Poi impostate un breakpoint dove volete testare.

debug da riga di comando / CLI

Da dentro il vostro server remoto, o container Docker PHP, controllate che XDebug sia abilitato.

$ php -i | grep xdebug.

Controllate che xdebug support => enabled.

Ora esportate questa variabile nell’environment:

$ export PHP_IDE_CONFIG="serverName=docker_server"

Ovviamente docker_server è il nome del server remoto come impostato in IntelliJ.

Poi cliccate sull’ “icona telefono” in alto a destra in IntelliJ. Deve diventare verde.
title This tells IntelliJ to listen to the correct remote Ide Key debug.

A questo punto lanciate il comando php, ad esempio $ php artisan rotor:setup (questo è un comando personalizzato Laravel). IntelliJ dovrebbe fermarsi sul breakpoint.
Se preferite, potete impostare quasi tutte le configurazioni di XDebug assieme al comando, così :

$ PHP_IDE_CONFIG="serverName=docker_server" php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=INTELLIJ -dxdebug.remote_host=docker.for.mac.localhost -dxdebug.remote_port=9999 php artisan rotor:setup

Ad esempio cambiando ogni configurazione di XDebug. Ma XDebug deve comunque essere installato e abilitato.

Debug partendo da app mobili/altre app

Quando dovete debuggare una chiamata ad API che origina da una app client, ad esempio una app iOS/Android o magari Postmano alrti client, dovete dire a IntelliJ che il server PHP deve iniziare una sesione di debug di PHP. E la chiave è passare insiema alla chiamata HTTP un cookie con XDEBUG_SESSION.

Ad esempio, in Postma si può impostare un cookie così: su una chiamata API, cliccate su “Cookie” e immettete il nome del server e poi Add Cookie e create u cookie come questo:

XDEBUG_SESSION=INTELLIJ; path=/; domain=.rotor.local; Expires=Tue, 19 Jan 2038 03:14:07 GMT;

Ovviamente, cambiate i valori secondo la vostra impostazione.

Se abilitate il debug remoto (l’icona del telefono verde) in IntalliJ e impostate un breakpoint nella API. Chiamando da Postman, dovrebbe fermarsi.

In iOS è semplice come aggiungere queste linee nel vostro gestore di API, magari circondate da un #if per l’ambiente giusto

        var urlRequest = URLRequest(url: url)
		...
 		#if DEV
        //activate Cookie for XDEBUG of PHP remote server. Setting a cookie with predefined IDE KEY/XDEBUG SESSION. Change accordingly
       urlRequest.setValue("XDEBUG_SESSION=INTELLIJ; path=/; domain=rotor.local; Expires=Tue, 19 Jan 2099 03:14:07 GMT;", forHTTPHeaderField: "Cookie")
       urlRequest.httpShouldHandleCookies = true
       #endif

Per Android non è molto diverso: usiamo Volley e estendiamo semplicemente la RequetJson:

class RequestWithHeader(method: Int, url: String, body: JSONObject, listener: Response.Listener<JSONObject>, errorListener: Response.ErrorListener, val token: String) :
            JsonObjectRequest(method, url, body, listener, errorListener) {
        override fun getHeaders(): Map<String, String> {
            return mapOf(
                    "Content-Type" to "application/json",
                    "Authorization" to token,
                    "Cookie" to "XDEBUG_SESSION=INTELLIJ; path=/; domain=rotor.local; Expires=Tue, 19 Jan 2038 03:14:07 GMT;"
            )
        }
    }

Poi abilitate il remote debugging in IntelliJ e usate la vostra app come al solito. Quando chiamate una API con breakpoint, IntelliJ dovrebbe fermarsi.

Divertitevi!

debug php intellij docker xdebug cli command line
Twitter Facebook Google+

Flavoring Flutter

…

Come debuggare PHP Docker con IntelliJ

…

Privacy Policy © 2017 Iakta srl Published with Hugo and Cockpit CMS using Hugocockpit Theme based on Bleak by zutrinken
Menu