// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

.PHP Tutorials
************************************************
- link:configure-php-environment-ubuntu_pt_BR.html[Configurando o Ambiente de Desenvolvimento de PHP em Ubuntu Linux]
- link:configure-php-environment-windows_pt_BR.html[Configurando o Ambiente de Desenvolvimento de PHP no Windows]
- link:configure-php-environment-mac-os_pt_BR.html[Configurando PHP, Apache, MySQL e Xdebug para desenvolvimento de PHP no MAC OS X]
- link:project-setup_pt_BR.html[Configurando um Projeto PHP]
- link:flickr-screencast_pt_BR.html[Construindo uma apresentação de slides do Flickr com o PHP]
- link:wish-list-tutorial-main-page_pt_BR.html[Criando uma Aplicação Orientada a Banco de Dados com o Editor NetBeans IDE PHP]
- link:wish-list-lesson1_pt_BR.html[Criando uma Aplicação Orientada pelo Banco de Dados com o PHP]
- link:wish-list-lesson2_pt_BR.html[Criando uma Aplicação Orientada pelo Banco de Dados com o PHP]
- link:wish-list-lesson3_pt_BR.html[Criando uma Aplicação Orientada pelo Banco de Dados com o PHP]
- link:wish-list-lesson4_pt_BR.html[Criando uma Aplicação Orientada pelo Banco de Dados com o PHP]
- link:wish-list-lesson5_pt_BR.html[Criando uma Aplicação Orientada pelo Banco de Dados com o PHP]
- link:wish-list-lesson6_pt_BR.html[Criando uma Aplicação Orientada pelo Banco de Dados com o PHP]
- link:wish-list-lesson7_pt_BR.html[Criando uma Aplicação Orientada pelo Banco de Dados com o PHP]
- link:wish-list-lesson8_pt_BR.html[Criando uma Aplicação Orientada pelo Banco de Dados com o PHP]
- link:wish-list-lesson9_pt_BR.html[Criando uma Aplicação Orientada pelo Banco de Dados com o PHP]
- link:wish-list-oracle-lesson1_pt_BR.html[Criando uma Aplicação Orientada pelo Banco de Dados com o PHP]
- link:php-variables-screencast_pt_BR.html[Declarando Variáveis em Comentários e Funcionalidades Autocompletar Código Associadas no Editor PHP do NetBeans 6.7]
- link:project-config-screencast_pt_BR.html[Demonstração do Suporte ao PHP no NetBeans 6.5 - Parte I: Projetos e Configuração]
- link:editor-screencast_pt_BR.html[Demonstração do suporte PHP no NetBeans 6.5 - Parte II: Funcionalidades do Editor]
- link:debugging_pt_BR.html[Depurando o Código-Fonte do PHP no NetBeans IDE]
- link:screencast-phpdoc_pt_BR.html[Gerando Documentação PHP com NetBeans IDE]
- link:remote-hosting-and-ftp-account_pt_BR.html[Implantando uma Aplicação PHP em um Servidor Web Remoto Utilizando o NetBeans IDE]
- link:ajax-quickstart_pt_BR.html[Introdução ao Ajax para Aplicações Web PHP]
- link:code-templates_pt_BR.html[Modelos de Código no NetBeans IDE para PHP]
- link:php-editor-screencast_pt_BR.html[O Editor PHP no NetBeans IDE 6.9-7.0 (Visualização)]
- link:index_pt_BR.html[PHP Tutorials]
- link:screencast-rename-refactoring_pt_BR.html[Renomear a Refatoração e Outros Aprimoramentos do Editor no NetBeans IDE 7.0 para PHP]
- link:section_pt_BR.html[]
- link:screencast-smarty_pt_BR.html[Suporte à estrutura Smarty no NetBeans IDE para PHP]
- link:namespace-code-completion-screencast_pt_BR.html[Suporte ao Namespace PHP no NetBeans IDE]
- link:zend-framework-screencast_pt_BR.html[Suporte a Zend Framework no NetBeans IDE para PHP]
- link:screencast-continuous-builds_pt_BR.html[Suporte para PHP em Servidores de Construção Contínua]
- link:phpunit_pt_BR.html[Testando com o PHPUnit e Selenium]
- link:quickstart_pt_BR.html[Tutorial para Início Rápido em PHP do NetBeans IDE]
************************************************


