05 September 2010

Informações e Tecnologias de maneira rápida e facil.

Debugando em PHP com Wamp e NetBeans

Publicado por Fabio Farias Em 28 - maio - 2010 Comentários desativados

Um recurso pouco explorado pela maioria dos programadores php que conheço, e até por mim mesmo que apesar de ter mais de 5 anos de experiência com a linguagem, só agora resolvi fazer um debug de verdade funcionar.

Debugar códigos na maioria das linguagens de programação, permite que você navegue por dentro do código e suas funções na medida que o programa ou página é executada, podendo acompanhar o valor de variáveis e inclusive alterá-las, o que ajuda em 90% o desenvolvedor a encontrar falhas ou pontos específicos em uma aplicação.

Então vamos ao que interessa…

Para ser rápido, presumimos que você tenha instalado em seu ambiente windows o pacote Wamp e o NetBeans 6.5.x, ambos com suas configurações originais.

- Fazer download do Wamp Server.
- Fazer download do NetBeans 6.5.1  para PHP.

1. A primeira coisa que vamos fazer é ir até o Firewall do windows, no Painel de Controle e adicionar a porta TCP 9000 como exceção, para evitar problemas com o debug no netbeans.

2. Na seqüência, abra seu NetBeans e vá ao menu Ferramentas -> Opções (Tools -> Options) e clique no ícone do PHP. Em seguida verifique se a porta de depuração é a 9000, e altere caso não seja. Clique em OK.

3. Você precisará de uma extensão de debug do php. No meu caso, utilizei o XDebug. Veja a versão do seu PHP na sua pagina inicial do Wamp Server (http://localhost/) e faça o download da .DLL na versão apropriada:
- Faça download do XDebug para versão do PHP 5.2.
- Disponível também para versão 5.3 aqui.
- Consulte outras versões.

4. Coloque o arquivo DLL que acabou de baixar na pasta EXT do PHP. Se você instalou o wamp de forma padrão esta pasta será “C:\wamp\bin\php\php5.2.5\ext” ou algo parecido dependendo da versão instalada.

5. Feito isso, inicie o Wamp Server (caso ele não esteja iniciado), clique no ícone dele ao lado do relógio e procure pelo arquivo php.ini. (Menu: PHP->php.ini).

6. O arquivo abrirá no bloco de notas. Vá até o final do arquivo e adicione as linhas abaixo:

  1. [XDebug]
  2. ; Only Zend OR (!) XDebug
  3. zend_extension_ts = “C:\wamp\bin\php\php5.2.5\ext\php_xdebug-2.0.4-5.2.8.dll”
  4. ; XAMPP and XAMPP Lite 1.7.0 and later come with a bundled xdebug at <XAMPP_HOME>/php/ext/php_xdebug.dll, without a version number.
  5. xdebug.remote_enable=1
  6. xdebug.remote_host=127.0.0.1
  7. xdebug.remote_port=9000
  8. ; Port number must match debugger port number in NetBeans IDE Tools > Options > PHP
  9. xdebug.remote_handler=dbgp
  10. xdebug.profiler_enable=1
  11. xdebug.profiler_output_dir=”c:\wamp\xdebug”

Altere o caminho da dll se necessário, colocando o caminho exato da pasta e do arquivo que você acabou de fazer download no passo anterior. Ele pode variar dependendo da versão conforme falei.

7. Salve o arquivo e reinicie todos os serviços do wamp na opção “Reiniciar todos os serviços” que aparece no menu do relógio.

8. Para confirmar a instalação, acesse o link do phpinfo() que aparece na página inicial do seu wamp (http://localhost/?phpinfo=1).

9. Se tudo correu bem, o final do primeiro trecho do phpinfo deverá ser parecido com este:

Dica: se você já tinha uma instalação anterior, certifique-se de que não há componentes de debug do zend instalados e configurados no php.ini. Os dois não se entendem muito bem.

Finalmente debugando no NetBeans

Se você chegou até aqui, parabéns. O mais difícil já foi (eu acho). Agora debugar fica mais fácil.

Abra seu NetBeans e crie um arquivo PHP qualquer ou abra um projeto existente. Diferente de outros meios de debug,marcando o breakpoint no netbeans nada precisará ser alterado no código.

Vá até a linha que deseja que o debug comece a ser executado e pressione Ctrl + F8 ou clique no número da linha ao lado esquerdo do código. (Veja ao lado)

Em seguida, mande depurar o arquivo apertando Ctrl + Shift + F5 ou indo ao menu “Depurar -> Depurar arquivo.php”.

Na janela que se abrirá marque a opção PHP do lado do servidor.

Uma nova janela do navegador se abrirá e a execução irá parar no ponto de interrupção que determinamos com uma setinha verde apontando a linha do código que está sendo executada.  Você pode alterar o valor das variáveis em tempo de execução, ou criar observadores (watchers) para elas.

Para continuar a execução basta apertar F5 ou o botão continue-debugging-session no próprio NetBeans.

Isso tudo que falei é apenas o básico do processo de debug que o netbeans permite fazer. Existem outros métodos como utilizando o plugin FirePhp para o Firefox, mas não falarei disso desta vez.

Espero que esta seja uma boa alternativa pra você no lugar dos velhos ‘echos’ perdidos no seu código fonte.

Para ver e aprender mais sobre o assunto, veja a matéria sobre debugging na página especial da netbeans (em inglês). Tem um passo-a-passo do processo de debug bem bacana.

Update (09-dez-2009): as versões que sugeri para download são para PHP’s compilados com VC6. Veja qual a forma de compilação do seu php no phpinfo(), no item ‘Compiler’. Ex: MSVC6 (Visual C++ 6.0) corresponde ao VC6 do Xdebug. Baixe a versão adequada ao seu PHP, não esquecendo de substituir o nome da DLL no php.ini confome mostrado acima.

O que é Zend Framework?

Publicado por Fabio Farias Em 25 - maio - 2010 Comentários desativados

Essa semana aprenderemos um pouco sobre frameworks PHP, basicamente sobre o Zend Framework. Como todos devem saber, a ZEND é uma empresa fundada em 1999 por Andi Gutmans e Zeev Suraski e é a responsável pela manutenção e desenvolvimento de produtos e serviços para a linguagem PHP.

O Zend Framework foi lançado no dia 04 de março de 2006 e inclui diferentes componentes desenvolvidos em PHP5 para prover alta qualidade para desenvolvimento de aplicações web e web services.

http://framework.zend.com/

Mas o que seria um framework?

É um conjunto de classes com objetivo de reutilização de um design, provendo um guia para uma solução de arquitetura em um domínio específico de software.

Qual a diferença entre biblioteca de classes e framework?

O framework se diferencia pois a biblioteca de classes se concentra em apenas oferecer implementação de funcionalidades, sem definir a reutilização de uma solução de arquitetura (design).

O Zend Framework segue o padrão MVC – Model View Controller ou Modelo-Visão-Controlador que é um padrão de arquitetura de aplicações que visa separar a lógica da aplicação (Model), da interface do Usuário (View) e do fluxo da aplicação (Controller). Permite que a mesma lógica de negócios possa ser acessada e visualizada por várias interfaces.

130_2.gif
Componentes do Zend Framework

Zend_Controller e Zend_View
Zend_Controller fornece os alicerces para a construção de websites baseados no MVC.
Zend_View separa o script de visualização dos controladores e modelos.

Zend_Config
Simplifica o uso de dados de configuração para aplicações web.

Zend_Db
Componente que provê acesso a banco de dados. Adicionalmente, ele ajuda a proteger suas consultas contra ataques de SQL Injection.

Zend_Fed
Componente que auxilia a geração de dados RSS e Atom para feeds.

Zend_Http_Cliente
Componente para o desenvolvimento de CLIENTES web services.

Zend_Filter_Input
Componente para filtragem e validação de campos de entrada.

Zend_Json
Componente que transforma estruturas PHP em JSON – JavaScript Object Notation (http://www.json.org/) para uso em aplicações com AJAX.

Zend_Log
Componente utilizado para geração de log de erros.

Zend_Mail e Zend_Mime
Componente para envio de email com suporte a anexos de todos os MIMES suportados.

Zend_PDF
Componente para criação e alteração de documentos PDF.

Zend_Search_Lucene
Para que não conhece o Lucene é uma software de busca e uma API de indexação de documentos escritos na linguagem Java e é mantido pela Apache Software Foundation (http://lucene.apache.org/java/docs/). O Zend_Search_Lucene é um componente do Lucene totalmente escrito em PHP 5.

Zend_XMLRpc
Componente para chamada remota de procedimentos. O SOAP é um padrão de RPC para WebServices.

Configuração do Zend Framework

01. Faça o dowload do Zend Framework no site: http://framework.zend.com
02. Descompacte-o numa pasta um nível abaixo do DocumentRoot do Apache.
03. Renomeie a pasta para zf.

Apache

A primeira coisa a fazer é configurar o Apache a trabalhar no mod_rewrite que terá a responsabilidade de redirecionar todas as requisições para um arquivo chamado index.php

http.conf – Apache (Windows)

Tirar o # (jogo da velha etc…) do início da linha:
LoadModule rewrite_module modules/mod_rewrite.so

Definir o nosso arquivo htaccess
AccessFileName .htaccess

Trocar as linhas abaixo:
#<Directory />
# Options Indexes FollowSymLinks
# AllowOverride None
#</Directory>

por:
<Directory />
Options FollowSymLinks Includes
AllowOverride All
</Directory>

Arquivo .htaccess
Crie um arquivo .htacess e salve no DocumentRoot do servidor Apache. No meu caso é c:/pagina.

RewriteEngine on
RewriteBase /
RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ index.php
php_flag magic_quotes_gpc off
php_value include_path “c:/zf/library”

Todas as requisições que não contiverem uma das extensões de arquivo listadas serão passadas para index.php

Restartar o Apache.

Estrutura da nossa aplicação de exemplo

c:/pagina (document_root do servidor apache)
.htaccess
index.php
c:/framework (aplicações que utilizam framework)
/exemplo01
/controllers
IndexController.php
/views
hello.php
/models
c:/zf/library (bliblioteca do zend framework)

Como você pode ver acima, a pasta que contém o nosso exemplo de framework, bem como a biblioteca do framework, encontra-se fora do DocumentRoot do Apache pois é uma recomendação da Zend devido a segurança.

Exemplo 01 – Hello World!

Vamos desenvolver o nosso primeiro exemplo utilizando o Zend Framework. Faremos o famoso Hello World!

Arquivo index.php

O arquivo index.php deverá ser salvo no DocumentRoot do Apache e será o responsável por inicializar o Zend_Controller_Front.

Nesse arquivo, teremos também o Zend_View para chamar a nossa aplicação.

<?
include ‘Zend.php’;

Zend::loadClass(‘Zend_Controller_Front’);
Zend::loadClass(‘Zend_View’);

$view = new Zend_View;
$view->addScriptPath(‘c:/framework/exemplo01/views’);
Zend::register(‘view’, $view);

$controller = Zend_Controller_Front::getInstance();
$controller->setControllerDirectory(‘c:/framework/exemplo01/controllers’);
$controller->dispatch();
?>

Criando o indexController.php

Este arquivo deve ser criado na pasta controllers da sua aplicação.

<?php
class indexController extends Zend_Controller_Action {
public function indexAction()
{
$view = Zend::registry(‘view’);
$view->title = ‘iMasters – Júlio César Martini’;
$view->body = ‘Hello, World!’;
echo $view->render(‘hello.php’);
}
public function noRouteAction() {
$this->_redirect(‘/’);
}
}
?>

Criando o hello.php

Este arquivo deve ser criado na pasta views da sua aplicação.

<html>
<head>
<title><?php echo $this->escape($this->title); ?></title>
</head>
<body>
<?php echo $this->escape($this->body); ?>
</body>
</html>