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!
Pingback: Innovation Lab: Hospendando e conectando aplicações PHP no IIS 7 e SQL Server 2008 « Sql From Hell.com
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
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.
Também estou acostumado com este problema, mas é bem simples de resolver! Use o phpinfo para identificar o caminho do php.ini utilizado pelo PHP do IIS, normalmente ele informa o caminho como “C:\Windows”, assim coloque o php.ini com as configurações corretas lá, ou melhor, adicione o caminho do diretório do seu php.ini na relação de caminhos da variável de sistema PATH do Windows. Por fim, reinicie o IIS e verifique se o problema continua.
Algumas links úteis:
http://social.technet.microsoft.com/Forums/pt-BR/winsrv2008pt/thread/6b16777b-9e41-48a7-aa40-69fc339791b4
http://www.thewebhostinghero.com/tutorials/install-iis7-php5-mysql5-win2008server-pt2.html
Se ainda não conseguir resolver, me avise, pois amanhã estarei em um ambiente com servidores PHP/IIS (Windows 2008) funcionando perfeitamente, e poderemos simular este problema.
Por um acaso tive que reiniciar o servidor e agora está funcionando sem a TAG, mas agora está dando Erro 500.0
Vou correr a procura de ver oque é.
Obrigado.
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.
Não tive a oportunidade de utilizar em um mesmo cenário as duas extensões (mssql_* e sqlsrv_*), mas acredito que haja incompatibilidades.
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.
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 🙂
Matheus, recomendo utilizar a biblioteca sqlsrv (conforme o artigo) no lugar da antiga biblioteca mssql, pois a sqlsrv trabalha muito bem com as versões recentes do SQL Server (2005, 2008+ e comporta as features novas, como FileStream).
Mas se for realmente quiser utilizar a biblioteca mssql, dê uma olhada nestes links:
http://www.php.net/manual/en/mssql.setup.php
http://www.php.net/manual/en/mssql.installation.php
Paulo, obrigado pela resposta. Não consegui, #fail. Resolvi ficar com o padrão novo mesmo, não havia me tocado que estava usando o velho. Muito obrigado e parabéns pelo blog!
Ó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!
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?
Consegui instalar usando o Web Plataform Installer, através do link http://www.microsoft.com/web/platform/phponwindows.aspx. Bem simples!
Fiz até um post para ajudar os mais iniciantes:
Grande abraço.
Boa noite Antonio! Realmente ficou bem prático com o Web Platform Installer, gostei do post!
Aqui ele continua não reconhecendo as funções “sqlsrv” ;s
Beleza, garoto! Muito obrigado e um forte abraço. 🙂
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!!