Sim irei falar neste post sobre PHP. Razão – Depuração de erros.
A depuração de erros até hoje em PHP que seguia a norma de var_dumps e echos. Ou seja, a funcionalidade de definir um breakpoint e poder visualizar o que se pretende, simplesmente não estava disponível (pois não existia um IDE para o efeito como o Zend).
Decidi investigar se haveria modo para o fazer. A conclusão é de que sim. Os debuggers disponíveis (que eu conheça) são: Zend Debugger; XDebug.
Modifiquei todo o set de ferramentas para desenvolver em PHP. O IDE usado foi o Eclipse com o plug-in PDT. Para servidor web instalei o WAMP 2. Instalei por fim o debugger PHP – XDebug. XDebug porquê? Porque é uma versão gratuita.
A documentação do XDebug está disponível online. Para o usar é necessário obter uma versão do debugger para a versão PHP do servidor (no meu caso PHP 5.2.9-2). E é tudo…
Se tudo fosse assim tão fácil
O IDE Eclipse possibilita a definição do debugger para PHP. Para configurar o debugger a usar é necessário definir qual o tipo de debugger, o servidor e a versão do PHP (definindo o executável da versão), como ilustra a figura seguinte:
PHP Debug window – fig. 1
Os debuggers fornecidos com o plug-in PDT são: Zend Debugger; XDebug. Debuggers esses que estão configurados por omissão, como ilustra a figura seguinte:
PHP Debuggers window – fig. 2
Falta a definição do executável PHP e do servidor. Para definir o executável PHP segue-se o link “PHP Executables…” como na figura 1. Os passos a seguir para adicionar o executável é seguir a acção do botão “Add…”, figura 4.
PHP Executable Add window – fig. 3
Definem-se os campos Name e Executable path para definir o nome a dar a configuração e o local onde reside o executável PHP (na minha versão é o PHP 5.2.9-2), como ilustrado na figura 3. Importante de notar é que a configuração que se criou serve para um tipo de debugger, que será um dos disponíveis como ilustrado na figura 2. No final será esta configuração criada a que se usará na figura 1.
PHP Executables window – fig. 4
Por fim falta apenas a definição do servidor (ver figura 5):
PHP Servers window – fig. 5
Mais uma vez, no meu caso, estarei a testar o site que reside na root do localhost.
Os passos anteriores configuraram o IDE para uso com um debugger, no caso o XDebug. Para se poder efectuar debug em PHP com inserções de breakpoints é necessário configurar o runtime PHP. Para tal, é necessário definir algumas configurações no ficheiro php.ini.
zend_extension_ts = "C:/wamp/bin/php/php5.2.9-2/ext/php_xdebug-2.0.4-5.2.8.dll"
[xdebug]
; General
xdebug.default_enable = On
xdebug.show_exception_trace = On
xdebug.show_local_vars = 9
xdebug.max_nesting_level = 50
xdebug.var_display_max_depth = 6
xdebug.collect_params = 4
xdebug.collect_includes = On
xdebug.collect_return = On
xdebug.show_mem_delta = On
xdebug.idekey=ECLIPSE_XDEBUG
; Dump options
xdebug.dump_once = On
xdebug.dump_globals = On
xdebug.dump_undefined = On
xdebug.dump.REQUEST = *
xdebug.dump.SERVER = *
; Trace options
xdebug.trace_format = 0
xdebug.auto_trace = On
xdebug.trace_output_dir = "c:/wamp/tmp/xdebug"
xdebug.trace_output_name = trace.%c.%p
; Remote settings
xdebug.remote_enable=On
xdebug.remote_autostart=On
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_log="c:/wamp/tmp/xdebug/xdebug.log"
; Profiling
xdebug.profiler_output_dir = "c:/wamp/tmp/xdebug"
xdebug.profiler_output_name = "cachegrind.out.%p"
xdebug.profiler_enable = Off
xdebug.profiler_append= Off
xdebug.extended_info= On
Nem todas as configurações aqui definidas são necessárias, apenas as coloquei para que estivessem transcritas na íntegra tal como definifas no servidor (configuração que estou a usar).
Ter em atenção que apenas uma definição para a extensão do debugger pode estar definida para o correcto funcionamento.
Dependendo da versão do PHP também depende a versão do debugger, como também a definição da extensão no ficheiro php.ini.
zend_extension_ts = "C:/wamp/bin/php/php5.2.9-2/ext/php_xdebug-2.0.4-5.2.8.dll"
A definição da extensão ora será: zend_extension_ts / zend_extension. Não poderá existir a configuração:
extension = "C:/wamp/bin/php/php5.2.9-2/ext/php_xdebug-2.0.4-5.2.8.dll"
E é tudo, happy coding. Para qualquer dúvida é favor contactar.