Virtual Machine – desenvolvimento PHP / NetBeans / Xdebug
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:
- Sistema operativo: Ubuntu Linux 10.10
- Apache 2
- MySQL 5.1
- IDE: NetBeans 6.9.1
- PHP 5.3 com Xdebug
- 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:
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:
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
Após a instalação vai ser solicitada a password para o user root.
Vai ser: mysqlroot01! (importante lembrar mais tarde)
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:
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(); ?>
E control + X e Enter.
Ver o resultado:
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
E agora é só compilar. Com o trio: configure, make, make install ![]()
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:
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
Depois de fazer-mos novamente o “sudo apache2ctl restart” vemos o resultado das nossas configurações.
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:
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.
Bem parece que temos o Xdebug a funcionar correctamente.
Avançamos agora para o IDE. O grande NetBeans.
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
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.
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:
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.
Vamos agora fazer debug da aplicação. Com um breakpoint num ponto de paragem, iniciamos o Debug como mostra a seguinte imagem:
Rapidamente abre o Firefox e o NetBeans apanha o inicio da sessão de Debug e para logo na primeira linha.
Bem as coisas parecem estar encaminhadas. Vamos só ver se conseguimos ver os valores de variáveis…
E como podemos ver está tudo a funcionar correctamente
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
Fazemos:
phpdev@phpdevserver:~$ sudo apache2ctl restart
E vamos ver o resultado no nosso PHPInfo.
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
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.
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á!
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:

























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.
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.
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.
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.
Great! I only follow the commands and was able to make it working.
Thank!
Congratulations.
I’m running Netbeans 7 now. Why don’t you update this tutorial? Thank you very much.
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.
Great John. If you need any help, I also know some words in English
. I only wrote (and will write) in Portuguese, well!… I’m Portuguese… LOL
Ok, i understand. Thank you Rui Lima. How could I use Netbeans and XDebug with php-cli?
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.
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.
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?