// 
//     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.
//

= Configurando o Ambiente de Desenvolvimento de PHP no Windows
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Configurando o Ambiente de Desenvolvimento de PHP no Windows - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Configurando o Ambiente de Desenvolvimento de PHP no Windows

Este tutorial mostra duas formas de configurar o ambiente de desenvolvimento de PHP no sistema operacional Windows. A primeira e mais conveniente é instalar e configurar um pacote AMP (*A*pache, *M*ySQL, *P*HP). Este tutorial mostra como instalar o pacote XAMPP. A segunda maneira, é instalar e configurar cada componente separadamente.


*Para seguir este tutorial, são necessários os recursos e o software a seguir.*

|===
|Software ou Recurso |Versão Necessária 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |Pacote de download do PHP 

|Um mecanismo PHP |Versão 5. Incluído no link:http://www.apachefriends.org/en/xampp-windows.html[+XAMPP-Windows+]. 

|Um servidor web |É recomendado o link:http://httpd.apache.org/download.cgi[+Apache HTTP Server 2.2+].
Incluído no XAMPP do Windows. 

|Um servidor de banco de dados |link:http://dev.mysql.com/downloads/mysql/5.1.html[+MySQL Server 5.0+] é recomendado.
Incluído no XAMPP do Windows. 

|Um depurador do PHP (opcional) |link:http://www.xdebug.org[+XDebug 2.0 ou superior.+]
 
|===

Geralmente, o desenvolvimento e a depuração são realizados em um servidor web local, enquanto o ambiente de produção está localizado em um servidor web remoto. A configuração de um servidor web remoto é descrita em link:./remote-hosting-and-ftp-account.html[+ Implantado uma Aplicação PHP em um Servidor Web Remoto com o NetBeans IDE+]. Este tutorial ensina como configurar um servidor web local. O suporte a PHP pode ser adicionado a vários servidores web locais (IIS, Xitami e assim por diante), mas, em geral, o link:http://httpd.apache.org/download.cgi[+servidor HTTP Apache+] é usado. O servidor HTTP Apache está incluído no pacote AMP do XAMPP utilizado neste tutorial. Para obter informações sobre como instalar e configurar o servidor HTTP Apache standalone, clique link:http://httpd.apache.org/docs/2.2/install.html[+aqui+].


== Software Necessário

Para criar, executar e depurar os projetos PHP, você precisa do seguinte software:

* O NetBeans IDE para PHP. Os downloads estão disponíveis link:https://netbeans.org/downloads/index.html[+aqui+].
* Um servidor Web. Geralmente, o desenvolvimento e a depuração são realizados em um servidor Web local, enquanto o ambiente de produção está localizado em um servidor Web remoto. A versão atual permite a utilização de um servidor local. A utilização de um servidor remoto com acesso a FTP terá suporte em versões futuras. O suporte a PHP pode ser adicionado a vários servidores Web (IIS, Xitami e assim por diante), mas, em geral, o link:http://httpd.apache.org/download.cgi[+Servidor HTTP Apache+] é utilizado. Clique link:http://httpd.apache.org/docs/2.2/install.html[+aqui+] para obter informações sobre como instalar e configurar o Apache 2.2. 

* O mecanismo PHP. A versão com suporte é o PHP5. Os downloads estão disponíveis link:http://www.php.net/downloads.php[+aqui+].
* O depurador do PHP. O NetBeans IDE para PHP permite que você utilize o link:http://www.xdebug.org[+XDebug+], mas a utilização de um depurador é opcional. A versão recomendada é XDebug 2.0 ou superior, pois é compatível com PHP5.
* Um servidor de banco de dados. Você pode utilizar vários servidores de bancos de dados, embora um dos mais populares seja o MySQL. Os downloads estão disponíveis link:http://dev.mysql.com/downloads/mysql/5.1.html[+aqui+]. 
NOTE:  a versão recomendada do produto é MySQL Server 5.0. Os documentos fornecidos descrevem o trabalho com essa versão.

Depois da instalação, você precisa configurar o ambiente de forma que todos os componentes de software funcionem bem juntos.

Você pode utilizar um <<XAMPP, Pacote>> que contenha o software necessário ou <<installComponentsSeparately,instalar cada componente separadamente>>.


== Utilizando um Pacote AMP

Para que todas as definições de configuração do mecanismo PHP, do servidor HTTP Apache e do servidor de banco de dados MySQL sejam especificadas automaticamente, utilize o pacote AMP. Este tutorial fornece instruções somente para o pacote link:http://www.apachefriends.org/en/xampp-windows.html[+XAMPP-Windows+]. Para obter ajuda com o pacote WAMP, consulte a link:http://wiki.netbeans.org/HowToConfigureXDebug[+wiki do XDebug do NetBeans+].


=== Instalando e Configurando o Pacote XAMPP

A seção descreve como fazer download, instalar e configurar o pacote XAMPP.

*Advertência:* NÃO use XAMPP 1.7.0. Há problemas significativos com o XDebug nessa versão. Use a versão 1.7.1 ou superior, em que esses problemas foram corrigidos.

NOTE: a partir do XAMPP 1.7.2, o XAMPP vem com PHP 5.3, não PHP 5.2.x. O NetBeans IDE para PHP, versão 6.7.x, não oferece suporte às novas funções do PHP 5.3. O NetBeans IDE para PHP 6.8, atualmente disponível como construtor de desenvolvimento, oferece suporte total ao PHP 5.3. Observe também que a instalação do Xdebug difere entre o PHP 5.2.x e o PHP 5.3.

1. faça download do pacote de instalação do link:http://www.apachefriends.org/en/xampp-windows.html[+XAMPP+]. (O XAMPP Lite não inclui o XDebug.)
2. Quando o download tiver sido concluído, execute o arquivo  `` .exe `` .

No Microsoft Vista, a funcionalidade Controle de Acesso do Usuário impede que o instalador do PHP atualize a configuração do httpd Apache. Desative o UAC ao instalar o XAMPP. Consulte o link:http://support.microsoft.com/kb/922708[+Suporte da Microsoft+] para obter mais informações.



. Você tem a opção de instalar o servidor Apache e o servidor de banco de dados MySQL como serviços. Se instalar o Servidor Apache e o MySQL como serviços, não terá que iniciá-los manualmente pelo Painel de Controle do XAMPP. Observe que você tem a opção de instalar ou desinstalar esses serviços no <<xamppConstolPanel,Painel de Controle do XAMPP>>.


. Se estiver utilizando o arquivo compactado autoextraível, depois de ele ter sido extraído, execute o arquivo  ``setup-xampp.bat``  para configurar os componentes do pacote. (O instalador do XAMPP executa automaticamente o arquivo).


. Após configurar, abra o Painel de Controle do XAMPP. (Você pode abri-lo manualmente executando o arquivo  ``XAMPP_HOME/xampp-control.exe``  ou a partir do ícone Painel de Controle do Xampp, que é automaticamente colocado em sua área de trabalho.) Ao abrir o Painel de Controle do XAMPP, observe que os módulos instalados como serviços já estão em execução.

*Advertência: *algumas vezes, no Windows Vista, o  ``xampp-control.exe``  não será executado. No lugar dele, você pode executar o  ``xampp-start.exe`` .

*Advertência: *o  ``arquivo winmysqladmin.exe`` , que é iniciado pelo botão Admin para o MySQL, não funciona. Aparece uma sequência de mensagens de erro, que pode ser parada somente de forma manual, pelo encerramento do processo  ``winmysqladmin`` . Você também não pode acionar o  ``winmysqladmin.exe``  a partir da linha de comandos. Consulte link:http://bugs.xampp.org/view.php?id=71[+http://bugs.xampp.org/view.php?id=71+].

image::images/xampp-control-panel.png[]



. As caixas de seleção Svc indicam que um módulo está instalado como um serviço do Windows e será automaticamente iniciado na inicialização do sistema. Você pode instalar ou desinstalar os serviços do Windows marcando ou desmarcando a caixa de seleção Svc. A desinstalação de um serviço do Windows não desinstala o módulo, mas requer a inicialização manual do módulo. O painel de controle do XAMPP inclui botões para parar e iniciar módulos e para abrir seus consoles de administração.


=== Verificando a Instalação do XAMPP

1. Execute o browser e digite o seguinte URL:  ``http://localhost`` . A página de boas-vindas do XAMPP será aberta:

image::images/xampp-welcome-page.png[]



. Para garantir que os servidores Apache e MySQL tenham sido instalados como serviços do sistema, reinicie o sistema operacional, execute o browser e digite o URL  ``http://localhost``  novamente. A página de boas-vindas do XAMPP será aberta. Observe se a página de boas-vindas do XAMPP inclui um menu na margem esquerda, por meio do qual você pode verificar o status dos componentes do XAMPP e executar o  ``phpinfo()`` , entre outras funcionalidades úteis. O  ``phpinfo()``  retornará uma tela com informações de configuração sobre os componentes do XAMPP. 

image::images/xampp-phpinfo.png[]


=== Instalando e Ativando o Depurador XDebug

É necessário configurar a pilha PHP para utilizar o XDebug. Se você estiver utilizando o <<xdebug-xampp-171,XAMPP 1.7.1>>, incluído com o PHP 5.2.6, ou o <<xdebug-xampp-172,XAMPP 1.7.2>>, incluído com o PHP 5.3 o processo apresenta diferenças.

Muitos usuários têm tido dificuldades para fazer com que o XDebug funcione em seus sistemas. Consulte a link:http://wiki.netbeans.org/HowToConfigureXDebug[+nossa wiki+] e o link:http://forums.netbeans.org/viewforum.php?f=13&sid=5b63e6774fe7859b5edd35b1192d8efd[+Fórum de Usuários do Editor PHP do NetBeans+] para obter ajuda.


[[xdebug-xampp-171]]
==== XDebug no XAMPP 1.7.1 (PHP 5.2)

É necessário fazer download do XDebug, colocar o arquivo .dll no diretório das extensões php e configurar php.ini para que localize e utilize esse arquivo.

1. Faça download do _thread-safe_ link:http://www.xdebug.org/download.php[+XDebug+] mais recente compatível com sua versão do PHP. Os links para download estão listados em Releases. Copie o arquivo  ``.dll``  para seu diretório  ``XAMP_HOME/php/ext`` . ( ``XAMPP_HOME``  se refere ao seu diretório de instalação do XAMPP ou do XAMPP Lite, como  ``C:\Arquivos de Programas\xampp``  ou  ``C:\xampplite`` .)
2. Localize e abra o arquivo  ``php.ini``  ativo para seu XAMPP. Ele está localizado por default no diretório `` XAMPP_HOME/apache/bin`` . Confirme qual arquivo  ``php.ini``  está ativo executando  ``phpinfo()``  e procurando o Arquivo de Configuração Carregado.
3. Como o otimizador Zend bloqueia o XDebug, é necessário desativar o otimizador Zend. No arquivo  ``php.ini `` ativo, localize as linhas a seguir e as delete ou as marque como comentários (Para estar seguro, procure e comente todas as propriedades relacionadas ao Zend):

[source,ini]
----

[Zend]
;zend_extension_ts = "C:\Program Files\xampp\php\zendOptimizer\lib\ZendExtensionManager.dll"
;zend_extension_manager.optimizer_ts = "C:\Program Files\xampplite\php\zendOptimizer\lib\Optimizer"
;zend_optimizer.enable_loader = 0
;zend_optimizer.optimization_level=15
;zend_optimizer.license_path =

----


. Para anexar
 XDebug ao mecanismo PHP, remova o comentário das linhas a seguir nos arquivos  ``php.ini``  (diretamente abaixo da seção [Zend], adicione-os caso não estejam presentes). Algumas notas adicionais foram acrescentadas.

[source,ini]
----

[XDebug]; Only Zend OR (!) XDebug
zend_extension_ts = "./php/ext/php_xdebug<-version-number>.dll"
; 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.xdebug.remote_enable=1xdebug.remote_host=127.0.0.1xdebug.remote_port=9000
; Port number must match debugger port number in NetBeans IDE Tools > Options > PHPxdebug.remote_handler=dbgpxdebug.profiler_enable=1xdebug.profiler_output_dir="<XAMPP_HOME>\tmp"
----

Defina a propriedade  ``xdebug.remote_enable``  como 1, não "true" ou qualquer outro valor.

NOTE:  certifique-se de que os caminhos especificados coincidam com o local dos arquivos correspondentes, conforme determinado durante a instalação.



. Salve o  ``php.ini`` .


. Execute a <<xamppConstolPanel,Aplicação Painel de Controle do XAMPP>> e reinicie o servidor Apache.
Consulte link:http://wiki.netbeans.org/HowToConfigureXDebug[+nosso wiki+] e a link:http://www.xdebug.org/docs/install[+documentação do XDebug+] para obter mais informações sobre como configurar o XDebug.


[[xdebug-xampp-172]]
==== Xdebug no XAMPP 1.7.2 (PHP 5.3)

O XAMPP 1.7.2 está incluído com o arquivo .dll apropriado do Xdebug. Você só precisa configurar o  ``php.ini``  para utilizar esse arquivo. Observe que todas as definições do Xdebug apresentam um texto explicativo.

1. Localize e abra o  ``XAMPP_HOME\php\php.ini``  para edição. Trata-se do único arquivo  ``php.ini``  no XAMPP 1.7.2.
2. Localize e elimine o comentário da linha  ``zend_extension = "XAMPP_HOME\php\ext\php_xdebug.dll"`` .
3. Localize e elimine o comentário da linha  ``xdebug.remote_host=localhost`` . Altere o valor da definição de  ``localhost``  para  ``127.0.0.1`` .
4. Localize e elimine o comentário da linha  ``xdebug.remote_enable=0`` . Altere de 0 para 1.
5. Localize e elimine o comentário da linha  ``xdebug.remote_handler="dbgp"`` .
6. Localize e elimine o comentário da linha  ``xdebug.remote_port= 9000`` .
7. Salve o  ``php.ini`` .
8. Execute a <<xamppConstolPanel,Aplicação Painel de Controle do XAMPP>> e reinicie o servidor Apache.

Consulte link:http://wiki.netbeans.org/HowToConfigureXDebug[+nosso wiki+] e a link:http://www.xdebug.org/docs/install[+documentação do XDebug+] para obter mais informações sobre como configurar o XDebug.


== Instalando os Componentes Separadamente


=== Servidor HTTP Apache

1. Faça download do link:http://httpd.apache.org/download.cgi[+servidor HTTP Apache2+].
2. Execute o arquivo de instalação  ``.msi`` . O assistente de instalação é iniciado. Siga as instruções.

No Microsoft Vista, não instale o Servidor Apache na localização default, que é Arquivos de Programas. Todos os arquivos em Arquivos de Programas estão protegidos contra gravação.



. Quando a instalação tiver sido concluída, reinicie o servidor Apache.


. Para verificar se a instalação foi bem-sucedida, execute o browser e insira o seguinte URL:

[source,ini]
----

  http://localhost/
----
A página de teste de boas-vindas do Apache será aberta: 

image::images/install-apache-it-works-port80.png[]


==== Solução de Problemas

Como default, o servidor Apache escuta a porta 80. Essa porta pode já estar sendo utilizada por outros serviços, por exemplo, o Skype. Para solucionar o problema, altere a porta que o servidor escuta:

1. Abra o arquivo de configuração do servidor web Apache  ``httpd.conf`` . Por default, o arquivo está localizado em  ``C:\Arquivos de Programas\Apache Software Foundation\Apache<version>\conf\`` 
2. Localize a linha  ``Listen 80``  e altere o número da porta, por exemplo,  ``8080`` . Salve o arquivo.
3. Reinicie o servidor web Apache.
4. Para verificar se o servidor web está funcionando, execute o browser, insira o URL e especifique o número da porta de forma explícita:  ``http://localhost:8080`` 

Você também pode interromper os processos que possivelmente ouvem a porta 80. No Gerenciador de Tarefas, selecione o nome de arquivo relevante e clique em Encerrar Processo.

Encontre mais informações sobre como instalar e configurar o servidor link:http://httpd.apache.org/docs/2.2/install.html[+aqui+].


=== Mecanismo PHP



. Faça download do link:http://windows.php.net/download/[+instalador binário do Windows+] para a versão PHP5 de sua escolha.

*Importante: *se não houver um instalador disponível na versão do PHP que você deseja instalar, instale-o manualmente pelo arquivo .zip. Consulte link:http://php.net/manual/en/install.windows.manual.php[+Etapas de Instrução Manual+] na documentação do php.net.



. Quando o download estiver concluído, execute o arquivo de instalação  ``.msi`` . O assistente de instalação é iniciado.


. No painel Diretório de Configuração do Apache, especifique o diretório onde o arquivo  ``httpd.conf``  está localizado, a definição default é  ``C:\Arquivos de Programas\Apache Software Foundation\Apache<versão>\conf\`` . O processamento do PHP será ativado automaticamente.


. Se você desejar utilizar o servidor de banco de dados MySQL, escolha a opção de instalação Completa ou selecione os itens MySQL e MySQLi na lista Extensões.


. Depois que a instalação tiver sido concluída, reinicie o servidor Apache.


. Para verificar se o mecanismo PHP foi instalado com êxito e o processamento do PHP foi ativado na configuração do Apache:
* Abra o Bloco de Notas ou outro editor de texto. Crie um arquivo e digite o texto a seguir:

[source,php]
----

<?php 
     echo "PHP has been installed successfully!";
?>
----
* Salve o arquivo na pasta htdocs como `test.php`. O caminho padrão é  ``C:\Program Files\Apache Software Foundation\Apache<version>\htdocs\test.php`` 
* Execute o browser e digite o seguinte URL:  ``http://localhost:<porta>/test.php`` . A página a seguir será aberta:

image::images/install-php-test.png[]


==== Solução de Problemas

Se a página não abrir:

1. Reinicie o servidor Apache.
2. Verifique se o arquivo de configuração do servidor Apache httpd.conf contém as seguintes linhas:

[source,ini]
----

  AddType Application/x-httpd-php .php 
  LoadModule php5_module "c:/php/sapi/php5apache2_2.dll"
----


. Se as linhas estiverem ausentes, adicione-as, salve o  ``httpd.conf``  e reinicie o Apache.


. Atualize a página http://localhost:<port>/test.php.


=== Servidor de Banco de Dados MySQL

Encontre informações detalhadas em link:../ide/install-and-configure-mysql-server.html[+instalando e configurando o servidor de banco de dados MySQL+].


=== XDebug

1. Faça download do link:http://www.xdebug.org[+XDebug+].
2. Instale o XDebug na pasta  ``php/`` . Você precisará do caminho para a pasta para <<settingUpEnvironment,configurar o ambiente>>.


=== Configurando o Ambiente

1. Se a sua instalação seguir as definições default, o processamento do PHP será ativado automaticamente.
2. Para anexar o 
 XDebug ao mecanismo PHP, localize o arquivo  ``php.ini``  e adicione as seguintes linhas a ele:

Para um mecanismo PHP 5.2 *seguro para thread*:


[source,ini]
----

zend_extension_ts="<path to the php folder>/php_xdebug-<version-number>.dll"
xdebug.remote_enable=1
----

Para um mecanismo PHP 5.2 *não seguro para thread*:


[source,ini]
----

zend_extension_nts="<path to the php folder>/php_xdebug-<version-number>.dll"
xdebug.remote_enable=1
----

Para *qualquer* mecanismo PHP 5.3:


[source,ini]
----

zend_extension="<path to the php folder>/php_xdebug-<version-number>.dll"
xdebug.remote_enable=1
----

Alguns usuários observam também que podem precisar incluir as seguintes linhas, embora outros usuários não precisem:


[source,ini]
----

xdebug.remote_host=127.0.0.1xdebug.remote_port=9000
; Port number must match debugger port number in NetBeans IDE Tools > Options > PHPxdebug.remote_handler=dbgp
----

Clique link:http://www.xdebug.org/docs/install[+aqui+] para obter mais informações sobre como configurar o XDebug.

NOTE:  certifique-se de que os caminhos especificados coincidam com os nomes e os locais dos arquivos correspondentes, conforme determinado durante a instalação.



. Para ter certeza de que o mecanismo PHP instalado anteriormente suporte a utilização do servidor de banco de dados MySQL:

1. Clique em Iniciar > Painel de Controle.
2. No Painel de Controle, selecione Adicionar ou Remover Programas.
3. No painel Adicionar ou Remover Programas, selecione a área PHP <número de versão> área e clique em Alterar. O Assistente Configuração do PHP será Iniciado. Clique em Próximo.
4. No painel Alterar, reparar ou remover instalação, selecione Alterar e clique em Próximo.
5. No painel Configuração do Servidor Web, selecione a versão do servidor Apache: no nosso exemplo é o Módulo Apache 2.2.x. Clique em Próximo.
6. No painel Diretório de Configuração do Apache, especifique o diretório onde o arquivo de configuração do Apache  ``httpd.conf``  está localizado. Clique em Próximo.
7. No painel Escolher Itens para Instalar, expanda o nó Extensões e selecione os itens MySQL e MySQLi. Clique em Próximo.
8. No painel Pronto para alterar PHP <número de versão>, clique em Alterar.
9. No painel Assistente de Configuração do PHP <número de versão> Concluído, clique em Finalizar.

link:/about/contact_form.html?to=3&subject=Feedback:%20Configuring%20PHP%20on%20Windows[+Enviar Feedback neste Tutorial+]


Para enviar comentários e sugestões, obter suporte e manter-se informado sobre os desenvolvimentos mais recentes das funcionalidades de desenvolvimento PHP do NetBeans IDE, link:../../../community/lists/top.html[+junte-se à lista de correspondência users@php.netbeans.org+].

link:../../trails/php.html[+Voltar à Trilha do Aprendizado PHP+] 

