Virtual Machine – desenvolvimento PHP / NetBeans / Xdebug

Novembro 13, 2010

Download da virtual machine pré-configurada:[Download Virtual machine - Ubuntu 10.10 - NetBeans - PHP - Xdebug - phpMyAdmin]

Download do artigo em PDF: VM_PHP_NetBeans_Xdebug_MySQL.pdf

Introdução

Tentarei explicar de forma simples e o mais directa possível como criar um ambiente de desenvolvimento PHP em Linux.

O ambiente será composto por:

  1. Sistema operativo: Ubuntu Linux 10.10
  2. Apache 2
  3. MySQL 5.1
  4. IDE: NetBeans 6.9.1
  5. PHP 5.3 com Xdebug
  6. phpMyAdmin

Está disponível um disco virtual que poderão carregar numa virtual machine com o Virtual Box. Este disco será o resultado do que vai sendo dito neste documento.

Criação da VM

Não vou aqui explicar como configurar a virtual machine, não considero que seja relevante para o artigo actual. Poderei mais tarde fazê-lo, mas como o Ubuntu é tão simples de instalar não vejo razão para o fazer.

Dados dos utilizadores Linux na VM:

User: phpdev
Password: phpdev01!

User: root
Password: root01!

Configurar o servidor HTTP: Apache 2

Para instalar o Apache vou proceder ao método que para mim é o mais simples num sistema Debian based.

Abro o terminal e introduzo:

phpdev@phpdevserver:~$ sudo apt-get install apache2

e deverá surgir algo como:

Instalar o Apache 2

Fig. 1: Instalar o Apache 2



Agora faço um simples “sudo reboot” para reiniciar a máquina e ver como se comporta no arranque.

Após o arranque vamos ver se já temos servidor HTTP. E cá está ele:

Testar a instalação do Apache 2

Fig. 2: Testar a instalação do Apache 2

Configurar um servidor de base de dados: MySQL Server 5 .1

OK! Agora que temos o servidor HTTP, eu por norma gosto de ir logo para o servidor de base de dados. Assim vou instalar e configurar o MySQL Server.

phpdev@phpdevserver:~$ sudo apt-get install mysql-server

Instalar servidor MySQL

Fig. 3: Instalar servidor MySQL

Após a instalação vai ser solicitada a password para o user root.

Vai ser:  mysqlroot01! (importante lembrar mais tarde)

Definir a password de root do MySQL

Fig. 4: Definir a password de root do MySQL

Não sei se são como eu, mas por norma gosto de reiniciar a máquina sempre que instalo uma aplicação mais importante, nomeadamente aquelas que criam serviços. Sendo este um componente essencial no nosso ambiente de desenvolvimento em PHP vou reiniciar a máquina neste momento. Mais uma vez “sudo reboot”.

Neste momento já temos o MySQL instalado.

Mais à frente voltaremos ao MySQL, vamos agora ao PHP.

Instalar o PHP 5

Já estamos perto do estado final do nosso ambiente de desenvolvimento (ou não…). Não podemos ter um ambiente de desenvolvimento PHP sem termos o PHP instalado, por isso:

:~$ sudo apt-get install php5 php5-dev libapache2-mod-php5 php5-curl php5-gd

E teremos algo como:

instalar o PHP e algumas libs importantes

Fig. 5: instalar o PHP e algumas libs importantes

OK! Neste momento já temos a coisa mais ou menos orientada. Vamos só ver o que nos diz o Apache. Vamos só primeiro reiniciar o Apache.

phpdev@phpdevserver:~$ sudo apache2ctl restart

Agora vamos criar um ficheiro PHP de teste no nosso servidor.

phpdev@phpdevserver:~$ sudo nano /var/www/phpinfo.php
E uma vez aberto o nano vamos escrever a mítica linha de código:

<?php phpinfo(); ?>

Código phpinfo() no Nano

Fig. 6: Código phpinfo() no Nano

E control + X e Enter.

Ver o resultado:

Testar a instalação PHP

Fig. 7: Testar a instalação PHP

Ponto de situação neste momento:

  • Temos Linux
  • Temos Apache 2
  • Temos MySQL 5
  • Temos PHP 5.3

Vamos então avançar para o Debug. Conseguimos fazer código mas ainda não conseguimos fazer debug desse código.

Instalar e configurar o Xdebug

Antes de mais, obter o Xdebug. Fazemos download do seguinte ficheiro.

http://xdebug.org/files/xdebug-2.1.0.tgz

Tem apenas 294KB, por isso é quase instantâneo.
Vou tentar agora ser o mais claro possível, por isso poderá parecer muito confuso mas não é. É bastante simples, vou só explicar passo a passo para que as coisas fiquem claras.

Primeiro vamos descomprimir o ficheiro acima.

phpdev@phpdevserver:/$ cd /home/phpdev/Downloads/

phpdev@phpdevserver:~/Downloads$ mkdir xdebug

phpdev@phpdevserver:~/Downloads$ tar zxvf xdebug-2.1.0.tgz -C xdebug
OK. Neste momento temos o conteúdo do ficheiro dentro da pasta xdebug. Vamos agora entrar nesta.

phpdev@phpdevserver:~/Downloads$ cd xdebug/xdebug-2.1.0/

Vamos agora preparar o ambiente de compilação para a nossa extensão PHP. E para tal utilizamos o phpize

phpdev@phpdevserver:~/Downloads/xdebug/xdebug-2.1.0$ sudo phpize

Executar phpize

Fig. 8: executar phpize

E agora é só compilar. Com o trio: configure, make, make install :D
Chamada de atenção para o “—enable-xdebug”

:~/Downloads/xdebug/xdebug-2.1.0$ sudo ./configure --enable-xdebug

:~/Downloads/xdebug/xdebug-2.1.0$ sudo make

:~/Downloads/xdebug/xdebug-2.1.0$ sudo make install

Neste momento já temos o Xdebug. Temos só que informar o PHP que tem o Xdebug. Abrimos o php.ini

phpdev@phpdevserver:~/Downloads/xdebug/xdebug-2.1.0$ sudo gedit /etc/php5/apache2/php.ini

E adicionamos as seguinte linhas:

[xdebug]

zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"

xdebug.remote_enable=On

xdebug.remote_host="localhost"

xdebug.remote_port=9000

xdebug.remote_handler="dbgp"

Estaremos a ver algo como:

Editar o php.ini com o GEdit

Fig. 9: Editar o php.ini com o gEdit

Na configuração anterior não utilizei o nano mas sim o gEdit, por duas razões. Primeiro para não parecer que o Linux é só linha de comandos, e segundo e mais importante, porque sou perguiçoso e o gEdit é mais amigável para os perguiçosos :P

Depois de fazer-mos novamente o “sudo apache2ctl restart” vemos o resultado das nossas configurações.

Testar para ver que já é reconhecido o Xdebug

Fig. 10: Testar para ver que já é reconhecido o Xdebug

Variáveis do Xdebug exibidas no phpinfo

Fig. 11: Variáveis do Xdebug exibidas no phpinfo

Bem parece que estamos encaminhados!

Vamos só configurar o Xdebug também para PHP CLI. É exactamente como anteriormente, apenas muda o caminho para o PHP.INI.

phpdev@phpdevserver:~/Downloads/xdebug/xdebug-2.1.0$ sudo gedit /etc/php5/cli/php.ini

As linhas que colocamos no PHP.INI são exactamente as mesmas do anterior, até podem fazer como eu fiz. Abri outra consola e fiz :  “gedit /etc/php5/apache2/php.ini” e depois copy paste de um para o outro.

Para testar se carrega o módulo fazemos:

phpdev@phpdevserver:~/Downloads/xdebug/xdebug-2.1.0$ php -m

E deverá surgir

[Zend Modules]
Xdebug

OK! Temos o Xdebug a funcionar… pensamos nós, mas estará mesmo?

Poderíamos instalar já o nosso IDE e ver se a coisa funcionava. É aqui que o pessoal normalmente se espalha. Vamos primeiro ter a certeza que o Xdebug está 100% operacional e só depois instalamos o NetBeans. Não vamos querer dizer que a culpa de não termos debug é do NetBeans sem que seja mesmo, não é?!

Existe uma ferramenta que vem no Xdebug para lhe fazer os testes apartir da consola, o debugclient. Antes de compilar o debugclient, vamos só buscar umas libs que são precisas.

phpdev@phpdevserver:~/Downloads/xdebug/xdebug-2.1.0$ sudo apt-get install libedit-dev libedit2

Teremos algo como:

Fig. 12: instalação das libs: libedit-dev libedit2, necessárias para compilação do DebugClient

Fig. 12: instalação das libs: libedit-dev libedit2, necessárias para compilação do DebugClient

E agora sim, o debugclient.

:~/Downloads/xdebug/xdebug-2.1.0$ cd debugclient

:~/Downloads/xdebug/xdebug-2.1.0/debugclient$ sudo ./configure --with-libedit

:~/Downloads/xdebug/xdebug-2.1.0/debugclient$ sudo make

:~/Downloads/xdebug/xdebug-2.1.0/debugclient$ sudo make install

Temos debugclient. Agora vamos testá-lo.

Para testar o debugclient e a comunição com o Xdebug teremos que simular uma chamada.

Vamos ter então dois terminais. Um que corre o debugclient e recebe a sessão de debug, e um outro que inicia o pedido PHP.

No terminal 1 colocamos:

phpdev@phpdevserver:/$ debugclient

No terminal 2 fazemos a chamada ao PHP

phpdev@phpdevserver:/$ export XDEBUG_CONFIG="idekey=session001"

phpdev@phpdevserver:/$ php /var/www/phpinfo.php

E no momento da chamada PHP o terminal 1 recebe o pedido.

Fig. 13: teste ao DebugClient

Fig. 13: teste ao DebugClient

Bem parece que temos o Xdebug a funcionar correctamente.

Avançamos agora para o IDE. O grande NetBeans. :D

Instalar e configurar o NetBeans 6.9.1

Vamos fazer o download de:

http://download.netbeans.org/netbeans/6.9.1/final/bundles/netbeans-6.9.1-ml-php-linux.sh

Eu vou fazer apenas da versão PHP, no entanto podem ir à página de downloads e escolher outro bundle.
Depois do download:

phpdev@phpdevserver:~/Downloads$ cd /home/phpdev/Downloads/

phpdev@phpdevserver:~/Downloads$ sudo chmod +x ./netbeans-6.9.1-ml-php-linux.sh

Se tentarmos instalar neste momento receberemos um erro a informar da inexistência de JDK na nossa máquina Linux. Vamos antes de mais instalar o JDK e depois sim correr o instalador do NetBeans.

phpdev@phpdevserver:~/Downloads$ sudo apt-get install sun-java6-jdk

E agora sim, vamos instalar o NetBeans 6.9.1.

phpdev@phpdevserver:~/Downloads$ sudo ./netbeans-6.9.1-ml-php-linux.sh

Depois da linha de comandos anterior surgirá um instalador gráfico muito simples de utilizar, é sempre Next e Install :D ah! E concordar com a licença.

E pronto já temos o NetBeans 6.9.1 instalado. Agora é só testar o desenvolvimento PHP e o respectivo debug com o Xdebug.
Vamos garantir que o nosso utilizador consegue criar pastas e ficheiros dentro da pasta /var/www e sub-pastas destas e que consegue alterar os ficheiros nelas contidos.

phpdev@phpdevserver:~$ sudo usermod -a -G www-data phpdev

phpdev@phpdevserver:~$ sudo chgrp -R www-data /var/www

phpdev@phpdevserver:~$ sudo chmod -R g+w /var/www

phpdev@phpdevserver:~$ sudo find /var/www -type d -exec chmod 2775 {} \;

phpdev@phpdevserver:~$ sudo find /var/www -type f -exec chmod ug+rw {} \;

Vamos só fazer logout e login para assumir a alteração aos grupos.

Agora que já conseguimos criar pastas e ficheiros no nosso servidor vamos criar o nosso primeiro projecto no NetBeans e testar o ambiente de desenvolvimento PHP.

Para verificar se o ambiente está operacional vamos fazer um simples “Olá mundo!” e verificar que conseguimos efectuar debugging na nossa aplicação.

Como acima já estabelecemos as permissões necessárias para o nosso utilizador de desenvolvimento conseguir manipular a pasta www, vamos criar nesta uma pasta OlaMundo.

Fig. 14: Pasta destino para o projecto de teste ao NetBeans

Fig. 14: Pasta destino para o projecto de teste ao NetBeans

Já a temos, vamos agora criar um novo projecto. O passo acima não totalmente necessário, mas serviu também para confirmar que efectivamente as nossas permissões estavam garantidas.

Os passos para criar o OlaMundo:

Fig. 15: Criar projecto no NetBeans - Seleccionar o tipo de projecto

Fig. 15: Criar projecto no NetBeans - Seleccionar o tipo de projecto

Fig. 16: Criar projecto no NetBeans -  Seleccionar localização

Fig. 16: Criar projecto no NetBeans - Seleccionar localização

Fig. 17: Criar projecto no NetBeans - Definições de execução

Fig. 17: Criar projecto no NetBeans - Definições de execução

Vou apenas deixar os print, não me vou extender a explicar os passos todos para a criação de um projecto NetBeans. Mais tarde, quem sabe…

Após a criação do projecto, criamos um novo ficheiro PHP. Este ficheiro tem um conteúdo muito simples, afinal não queremos desenvolver uma aplicação, queremos validar primeiro o nosso ambiente de desenvolvimento.

Fig. 18: Código de teste "Olá Mundo"

Fig. 18: Código de teste "Olá Mundo"

Vamos agora fazer debug da aplicação.  Com um breakpoint num ponto de paragem, iniciamos o Debug como mostra a seguinte imagem:

Fig. 19: Iniciar o Debugger no NetBeans

Fig. 19: Iniciar o Debugger no NetBeans

Rapidamente abre o Firefox e o NetBeans apanha o inicio da sessão de Debug e para logo na primeira linha.

Fig. 20: NetBeans em Debug, apanha a execução da primeira linha

Fig. 20: NetBeans em Debug, apanha a execução da primeira linha

Bem as coisas parecem estar encaminhadas. Vamos só ver se conseguimos ver os valores de variáveis…

Fig. 21: Debug no NetBeans, valores das variáveis

Fig. 21: Debug no NetBeans, valores das variáveis

E como podemos ver está tudo a funcionar correctamente :D

Já temos o NetBeans a funcionar como deve ser. Temos o MySQLServer, PHP, Apache… bem estamos prontos! Não! Ainda não terminámos de criar o nosso ambiente.

Se fossemos tentar ligar à base de dados MySQL neste momento não conseguiríamos apartir do PHP. E também não conseguimos ligar a uma SQLite. Assim vamos já adicionar o suporte para estes drivers, dão sempre jeito, sendo o MySQL quase essencial.

Instalar drivers MySQL e SQLite.

Vamos abrir uma consola e:

phpdev@phpdevserver:~$ sudo apt-get install php5-mysql php5-sqlite

Fig. 22: Instalar o suporte para MySQL e SQLite

Fig. 22: Instalar o suporte para MySQL e SQLite

Fazemos:

phpdev@phpdevserver:~$ sudo apache2ctl restart

E vamos ver o resultado no nosso PHPInfo.

Fig. 23: phpinfo com o suporte para MySQL e SQLite

Fig. 23: phpinfo com o suporte para MySQL e SQLite

E pronto estamos finalmente preparados!

Vou só instalar o phpMyAdmin, gosto de o ter por perto, há quem prefira o WorkBench o qual aconselho para a criação do modelo de dados de raiz, mas para já vou só instalar o phpMyAdmin, parece-me que se enquadre melhor com este pequeno manual, sendo esta uma aplicação Web podemos instalá-la no nosso servidor partilhado.

Instalar e configurar o phpMyAdmin

Consultando o site http://www.phpmyadmin.net/ encontramos:

phpMyAdmin 3.3.8 is released (Mon, 25 Oct 2010 16:28:45 GMT)

Boa! É já este que vai. Mesmo fresquinho :D

Vou fazer download do:

phpMyAdmin-3.3.8-all-languages.tar.bz2           3.5 MiB   7a5b26f37f3f2fa1e2335ce9c2d36944 5868

Este ficheiro tem no seu interior uma pasta, descompacto o conteúdo desta para /var/www/phpMyAdmin. (tive que criar a pasta – mkdir /var/www/phpMyAdmin)

Entrando no http://localhost/phpMyAdmin/ damos de caras logo com um problema.

Fig. 24: Problema no phpMyAdmin, "Cannot load mcrypt extension..."

Fig. 24: Problema no phpMyAdmin, "Cannot load mcrypt extension..."


sudo apt-get install php5-mcrypt

e

sudo apache2ctl restart

e fica o problema resolvido.

Vamos que posso dizer, para começar a trabalhar já está! :D

Entramos com o nosso user: root / mysqlroot01! (ainda se lembravam desta password, certo?!)

Conclusão

Desta forma termina este pequeno manual. A máquina virtual vai ficar disponível online para download e execução imediata. Vai ficar no formato *.vdi, disco virtual para o VirtuaBox.

Resumo da minha máquina:

Fig. 25: resumo da VM no VIrtualBox

Fig. 25: resumo da VM no VIrtualBox

12 Responses to “Virtual Machine – desenvolvimento PHP / NetBeans / Xdebug”

  1. Excelente tutorial, pelo menos no que respeita ao xDebug a instalação não é propriamente a mais simples. Espero que o blog tenha continuação. Obrigado.

  2. Rui, antes de mais obrigado pelas tuas palavras.
    Estou a preparar outros tutoriais, mas o próximo não será relacionado com esta temática. Estará mais ligado à área de sistemas de informação geográfica Open-Source.
    Abraço.

  3. A versão do NetBeans 2.9.1 seria bastante antiga :) , aparece assim no início do documento.

    Parece-me que complicaste demasiado o que é simples. É uma forma possível mas existem formas bem mais simples, como utilizar o tasksel, ou pedir a instalação dos pacotes todos na mesma execução do apt-get e assim fazer todas as configurações de uma só vez, muitas delas automaticamente. Mesmo o phpMyAdmin está nos repositórios e é configurado correctamente se instalado por eles.

    Com tantas configurações faltou a parte de configurar correctamente um servidor de MySQL e o PHP para que se comportem como se estivessem num servidor de produção, dessa forma evitam-se os clássicos erros provocados pelas diferenças de configurações.

  4. Sérgio, obrigado pela chamada de atenção… ooops 2.9.1 para 6.9.1 ainda é uma diferença grandita.

    Tens razão quando dizes que podemos usar os repositórios, mas nem sempre estão lá disponíveis as ultimas versões, e das últimas vezes que instalei o XDebug com os repositórios a coisa não funcionava lá muito bem… (ou não funcionava mesmo)

    Isto é um pequeno tutorial para criar um ambiente de desenvolvimento, não de produção, aliás se alguém precisar deste tutorial essa mesma pessoa não deverá configurar um ambiente de produção (ou pelo menos não deveria). Daí eu não me preocupar muito com o aprofundar das configurações dos servidores.

    No fim a intenção mesmo era mostrar que não é assim tão complicado fazer isto mesmo sendo feito “manualmente”, além do mais basta fazer download da VM e já está um ambiente de desenvolvimento pronto a usar.

    Abraço.

  5. Great! I only follow the commands and was able to make it working.
    Thank!

  6. Congratulations.
    I’m running Netbeans 7 now. Why don’t you update this tutorial? Thank you very much.

  7. Thom, thank you. I’m also working with NetBeans 7.0 B2. But is still in beta version. I work with 7, and until now only one problem when working with Symfony framework. But I guess the guys already fixed this little issue.

    When final version comes I will do it for sure.

  8. Great John. If you need any help, I also know some words in English :P . I only wrote (and will write) in Portuguese, well!… I’m Portuguese… LOL

  9. Ok, i understand. Thank you Rui Lima. How could I use Netbeans and XDebug with php-cli?

  10. Thom, please refer to: http://ruilima.com/2011/03/php-cli-xdebug-with-netbeans/. I really hope the video is helpful.

    Thank you for the question.

  11. Boas,

    Tenho um problema com a minha instalação, se me poderes ajudar, agradecia.

    Consigo fazer o debug normalmente, mas quando quero fazer unittesting com code coverage, recebo a mensagem:

    “PHPUnit 3.5.13 by Sebastian Bergmann.

    The Xdebug extension is not loaded.”

    Cumpts.

  12. Boas, olha o que acontece quando fazes:
    $ phpunit –report ….

    Eu não tenho agora aqui forma de testar isso, mas assim que tiver um bocadito vejo.
    Já agora como “instalaste” o PHPUnit?