2015-02-27 2 views
12

Mi piace molto usare lo php built in server e mi piace molto l'aspetto di phpdbg. Mi ricorda pry in Ruby land. Ma ho avuto problemi a farlo funzionare. È possibile eseguire l'utente phpdbg con il build nel server web?Utilizzo di phpdbg con il server php integrato?

Ad esempio, come avrei come questo lavoro:

  1. mettendo phpdbg_break();nel codice
  2. esecuzione php -S localhost:8000nella CLI
  3. il caricamento della pagina/che effettua la richiesta che esegue il codice contenente phpdbg_break();nel browser o tramite arricciatura
  4. scoppiare in una la phpdbg REPL molto probabilmente nello stesso terminale/istanza CLI che il costruito nel server è stato iniziato il

Quando provo questo, ottengo un errore che phpdbg_break(); è una funzione non definita .

Oppure (se quanto sopra semplicemente non è possibile), come si usa il "webmocking" that the docs talk about (in fondo)? Come si fa una richiesta specifica con un URI specifico?

+0

Impossibile utilizzare il debugger integrato con il server Web incorporato in una lingua progettata per creare pagine Web ... Solo PHP –

risposta

6

Se ho capito bene, phpdbg_break è una funzione fornita dall'interprete e non da alcuna estensione. Invece di usare il server PHP integrato, dovresti usare il server phpdbg e simulare una richiesta web. Vedere http://phpdbg.com/docs/mocking-webserver per informazioni su come prendere in giro la richiesta e http://phpdbg.com/docs/simples per sapere come eseguire il debugger.

Per effettuare una richiesta all'URI specifico, penso che sia necessario impostare $_SERVER['REQUEST_URI'] e facoltativamente $_SERVER['QUERY_STRING'] in modo che puntino all'URL che si desidera testare. URI sarà qualcosa come '/ percorso/per/file' e la querystring sarebbe tutto tra il? e il # negli URL (ie? page = 2)

Grazie per avermi indirizzato a phpdbg, non conoscevo quello strumento e sembra essere molto buono; Lo proverò nei prossimi giorni.

+0

Giusto per chiarire, forse non è nemmeno necessario impostare $ _SERVER [ 'REQUEST_URI']; dipenderà da come il tuo framework instrada una richiesta verso una combinazione di controller :: method. –

0

Io uso psysh per questo stesso motivo, solo perché mi ricorda pry. In realtà utilizzo questo frammento di codice al posto di binding.pry da ruby.

require "path_to_psysh_on_your_local_file_system"; 
\Psy\Shell::debug(get_defined_vars(), $this); 

Questo è abbastanza buono per me. L'unico problema che sto avendo con questo è:

  1. Non è possibile collegarsi a un processo PHP esistente in esecuzione in un CGI, con i server nginx o Apache
  2. Il built-in server PHP è singolo thread e molto lento, questo mi fa impazzire a volte

oltre a questo, sono felice con il mio flusso di lavoro corrente. Sarei felice di ascoltare le opinioni di altre persone su questo.


'anche Sembra che ci sia un po' di lavori in corso su Remote Debugging, che può risolvere i miei problemi.