Instalando o PHP no IIS 7.5 com FastCGI + SQL Server

Olá pessoas,

Este final de semana, fiquei com um pouco de saudades do PHP e resolvi ‘brincar’ com ele. Faz quase 2 anos que parei de desenvolver com PHP, foi bem “nostálgico” escrever algumas linhas (até coloquei aquela música “Purple Rain” do Prince neste momento #OLD), pois acompanhei desde a evolução da versão 3 até a 5.

A principal novidade que identifiquei foi a compatibilidade com FastCGI funcionando 100% no IIS (antes era Apache ou funcionando ‘meia-boca’ no modo CGI do IIS), código-fonte do PHP feito no Visual Studio 2008 (antes Visual C++ 6) e instalador que funciona 100% no Windows x64, conforme comprovo com o artigo, instalando no Windows 7 x64.

Como eu já tinha o ‘IIS 7.5’ instalado por causa do SSRS 2005 (ver artigo), a única opção adicional que marquei foi em Recursos de Desenvolvimento de Aplicativos a opção CGI, pois caso ela não esteja marcada, só será possível instalar no modo CGI tradicional.

Depois de baixar uma versão do PHP no site http://windows.php.net/download/ vamos à instalação, no caso estou utilizando a versão “VC9 x86 Thread Safe – Installer”:

Selecione a pasta de destino, não tem problema instalar no local sugerido:

Já que foi habilitada a opção CGI no IIS, é possível instalar no modo “IIS FastCGI”:

Determine o que as extensões e extras que deseja instalar. Como padrão as extensões já trazem marcadas as DLL do PostGreSQL e do MySQL:

Concluída a instalação vamos realizar o primeiro teste, para isso crie na pasta das aplicações web do IIS (por padrão, C:\inetpub\wwwroot ) um arquivo ‘index.php’ com o seguinte código:

<?php
phpinfo();
?>

 
E como resultado:

Agora, vamos à instalação das extensões do SQL Server. No site de downloads da Microsoft (http://www.microsoft.com/downloads) procure “SQL Server PHP”, se você encontrar o “SQL Server Driver for PHP 1.1 CTP – October 2009”, pode ficar tranqüilo que ele funciona. Mas se preferir uma versão mais segura tente o “SQL Server Driver for PHP 1.0 Cumulative Update – April 2009”.

Na instalação do SQL Server Driver for PHP (se possível, execute como administrador o instalador), recomendo informar uma pasta temporária, pois você somente precisará de uma das DLLs que serão instaladas.

Feita a instalação (normalmente ela dá erro, mas não se preocupe as DLLs vão para a pasta corretamente, mesmo com erro), copie a DLL de acordo com a versão do PHP, exemplo “PHP 5.3 VC9 x86 Thread Safe” é “php_sqlsrv_53_ts_vc9.dll” e coloque na pasta de extensões do PHP (normalmente ‘C:\Program Files (x86)\PHP\ext’) e adicione no arquivo php.ini (normalmente na pasta ‘C:\Program Files (x86)\PHP’) as linhas seguintes, conforme o nome de sua DLL:

[PHP_SQLSRV]
extension=php_sqlsrv_53_ts_vc9.dll

Procure colocar estas linhas junto às outras definições de extensões, deixando o arquivo manutenível em futuras necessidades.

Antes de testar, se caso o computador não tiver o SQL Server instalado na mesma máquina, instale o SQL Server Native Client:
http://www.microsoft.com/downloads/details.aspx?FamilyId=C6C3E9EF-BA29-4A43-8D69-A2BED18FE73C&displaylang=en

Outro detalhe antes de testar, reinicie o serviço do IIS (por desencargo de consciência), depois veja novamente aquele arquivo PHP que criado anteriormente. Se tudo der certo, procurando “sqlsrv”, você encontrará o detalhamento da extensão do SQL Server:

Para um teste (no caso utilizei um usuário “sa” com senha “123456”, o SQL Server na máquina “localhost”, com SQL Authentication habilitado – ver artigo), crei o seguinte código:

<pre>
<?php
//Definição do servidor (no caso "." pode substituir "localhost")
$serverName = ".";
//Definição de banco de dados, usuário e senha
$connectionInfo = array(
 "Database"=>"master",
 "UID"=>"sa",
 "PWD"=>"123456"
);
$conn = sqlsrv_connect($serverName, $connectionInfo);
if($conn === false)
{
 echo "Bug: Alguma coisa errada na conexão.\n";
 print_r(sqlsrv_errors());
}
else
{
 //Query modelo
 $tsql = "SELECT name FROM sys.all_views WHERE name LIKE 'dm%' ORDER BY name";
 $stmt = sqlsrv_query($conn, $tsql);
 if ($stmt)
 {
  echo "Resultado:\n";
  //Loop para os resultados
  while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC))
  {
   echo $row[0] . "\n";
  }
  //Importante: Fechar a query
  sqlsrv_free_stmt($stmt); 
 }
 else
 {
  echo "Bug: Alguma coisa errada na query.\n";
  print_r(sqlsrv_errors());
 } 
 // Importante: Fechar a conexão
 sqlsrv_close($conn);
}
?>
</pre>

E como resultado:

A partir daqui, o material no site do MSDN será de grande utilidade para entender como funciona as funções do SQL Server Driver for PHP:
http://msdn.microsoft.com/en-us/library/ee229548(SQL.10).aspx

As mudanças dos métodos para trabalhar com SQL Server no PHP ficaram ótimas, creio que para quem já esta acostumado a trabalhar com o MySQL não terá muitas dificuldades. Bem que o SQL Server poderia já ser nativo no PHP já que é feito no VS2008…

Bem pessoal, acho que com este artigo pago minhas dívidas com o PHP, linguagem que me ajudou a pagar a faculdade e alguns periféricos para meu PC. Tenho algumas dívidas para com o MySQL, Oracle e PostGreSQL, mas como o blog ainda é novo, ainda vou ter muitas oportunidades de falar sobre eles.

Qualquer dúvida sobre o artigo, comentários, reclamações ou elogios, fiquem a vontade de comentar ou até mesmo me procurarem por email (se for muito urgente). Então até o próximo artigo!

18 pensamentos sobre “Instalando o PHP no IIS 7.5 com FastCGI + SQL Server

  1. Pingback: Innovation Lab: Hospendando e conectando aplicações PHP no IIS 7 e SQL Server 2008 « Sql From Hell.com

  2. Belo post, foi muito útil! Existe também outra forma de fazer isso através da WEB Plataform Instaler, que já vem junto com o IIS 7.5, basta marcar oque você quer, por exemplo o PHP e o driver para SQL Server, que ele instala e configura automaticamente.

    Abraço

  3. Gostaria primeiramente de agradecer por compartilhar os conhecimentos, aqui está funcionando exeto uma coisa se não por a TAG php Ex: não funciona, somente se botar já alterei o php.ini para short_open_tag = On como faço para ambiente do PHP no W7 e funciona, mas no ambiente 2008 server não está funcionando.
    Obs: Tenho uma aplicação bastante grande e para por o php em todas as telas ficaria MUITO complicado.
    O amigo teria uma dica para me dar?
    Agradeço desde já.
    Obrigado.

  4. Cara me responde uma coisa, as funcções mssql_connect e mssql_query irão funcionar com essa configuração que fizemos?
    Pois minha aplicação utilizam elas.

  5. Consegui uma solução, instalei uma versão do PHP para 32bits instalando o FastCGI com a extension MSSQL e minha aplicação está rodando.
    Fica ai a dica.

  6. Amigo, consegui rodar PHP no meu servidor. Só que não consigo rodar comandos como mssql_connect. alguma idéia do que pode ser?
    Grato 🙂

  7. Ótimo post amigo! Tutoriais com esta qualidade somente em inglês. Se não fosse você continuaria procurando o arquivo do issapi no diretório do PHP XD
    Um grande abraço, sucesso!

  8. Olá,
    Segui todos os passos, mas parei na etapa do teste do phpinfo().

    Aparece o seguinte erro:

    Erro HTTP 500.0 – Internal Server Error
    C:\Program Files (x86)\PHP\php-cgi.exe – O processo FastCGI foi encerrado inesperadamente

    Já pesquisei e não descobri o que pode estar errado. Pode me ajudar?

  9. Boa tarde, passei algumas horas tentando instalar corretamente para versão 5.3.5 do PHP, quando usei a extensão que vc indicou -> “extension=php_sqlsrv_53_ts_vc9.dll”, não deu certo e o phpinfo() não mostrava instalada de forma alguma a biblioteca “sqlsrv”. Eu pesquisei e descobri que é necessário instalar a “extension=php_sqlsrv_53_nts_vc9.dll” veja bem, NTS não TS, depois de descobrir isso, o php reconheceu a biblioteca instalada…fica a dica se alguem se deparar com esse problema!!

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.