Innovation Lab: Hospendando e conectando aplicações PHP no IIS 7 e SQL Server 2008

Boa noite pessoas,

Ontem saiu o Innovation Lab de “PHP, IIS 7 e SQL Server 2008”. Dei uma boa olhada em todo material e posso dizer ficou muito bom e completo. Depois desta iniciativa da Microsoft, creio que os que aderiram o movimento LAMP (Linux, Apache, MySQL e PHP) pode migrar tranquilamente para um mundo “WIPS” (Windows, IIS, PHP e SQL Server) principalmente pela integração com Spatial Data e o Bing Maps que ficaram “show”.

Download do material:
http://bit.ly/ctVhPH

Instalando o PHP no IIS 7.5 com FastCGI + SQL Server:
https://sqlfromhell.wordpress.com/2009/12/21/instalando-o-php-no-iis-7-5/

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!