Por que estou recebendo este erro 500 do IIS?

2

Estou executando o PHP 5.3.1 no IIS 7.5 no Windows 7 Ultimate x64. Eu tenho tentado fazer o PHP se conectar à minha instalação local do SQL Server 2008 Express via ODBC usando ADODB. No começo, eu tive problemas em fazer com que ele se conectasse, porque, mesmo depois de adicionar meu servidor SQL local como um DSN de servidor no gerenciador de ODBC, continuei recebendo este erro:

[Microsoft][ODBC Driver Manager] The specified DSN contains an
architecture mismatch between the Driver and Application

Eu perguntei sobre isso em Stack Overflow e recebi uma resposta. Em retrospecto, eu provavelmente deveria ter perguntado isso aqui, mas recebi minha resposta, então não me importo. (Além disso, eu absolutamente detesto o fato de que os sites da trilogia estão divididos em primeiro lugar, mas isso é outra história ...)

De qualquer forma, depois de configurar a fonte de dados usando% windir% \ sysWOW64 \ odbcad32.exe, pareci fazer algum progresso. Eu não estou mais recebendo o erro que listei acima. Em vez disso, estou recebendo um erro aparentemente muito mais maligno, ou seja, este:

AnteseuestavaapenasrecebendoumaexceçãoPHPsimples.AgorameuscriptPHPfazoequivalenteasegfaultingporqueaparentementeeleestásendodesconectadodessedriverODBCde64bits.Socorro!Conectar-seaumSQLServerdeveserumatarefarelativamentesimplesedireta;então,oqueprecisofazerparaqueascoisasfuncionem?

ATUALIZAÇÃO:EstoucomeçandoumarecompensaporquerealmenteprecisoqueoSQLServereoPHPconversemumcomooutroembreve.UmpôstersugeriuqueeuchecasseoEventLog,masissonãomostranada,eoutropôstersugeriuqueeuhabilitasseoFailedRequestTracing,oqueeufiz,masnãotenhotantacertezadequeissoforneçaalgosignificativo.Umacópiadorastreiodeerrosfornecidopodeserencontrada aqui (somente no IE). Eu também tenho o script PHP (muito básico) mostrado aqui . Alterei o nome da conexão para "MYCOMPUTER", alterei o nome do banco de dados / catálogo específico para "MyDatabase" e ocultei a senha, mas não fiz nenhuma outra alteração.

Um pequeno histórico:

  • Meu computador é chamado MYCOMPUTER (não realmente, mas pense assim)
  • MYCOMPUTER está executando o Windows 7 Ultimate de 64 bits com o IIS 7.5
  • O MYCOMPUTER tem o PHP 5.3.1 instalado (32 bits) manipulado por meio do FastCGI
  • MYCOMPUTER tem o SQL Server Express 2008 de 64 bits instalado
  • A instância padrão do SQL é chamada MYCOMPUTER \ SQLEXPRESS
  • Existe um banco de dados chamado MyDatabase (novamente, o nome é realmente diferente)
  • Existe uma configuração DSN do sistema chamada MYCOMPUTER (configurada com o Gerenciador ODBC de 32 bits)
  • Existe uma configuração DSN do Sistema chamada MYCOMPUTER64 (configurada com o Gerenciador ODBC de 64 bits)

Se eu tentar conectar-me ao MYCOMPUTER nesse script ao qual fiz o link, recebo o erro grande e assustador 500. Se eu tentar conectar-se ao MYCOMPUTER64 nesse mesmo script, recebo o erro "incompatibilidade de arquitetura" listado acima. De qualquer maneira não está funcionando. Eu preciso disso para funcionar. Por favor ajude.

    
por SoaperGEM 23.12.2009 / 22:45

6 respostas

2

Eu acho que se você olhar para o PHP + ODBC da maneira errada ao usar o IIS7, você terá um 500 genérico. Obter um erro 500 de "0" é muito divertido.

Tenho a sensação de que você está se aproximando disso do lado do OS / IIS, pois fazer isso do lado do código PHP pode nos levar à falha mais rapidamente (agora que você descobriu o problema do driver).

O PHPInfo funciona como esperado?

Fora do script PHP referenciado, em qual linha ele está falhando? Se você não tem outro jeito, apenas comente tudo dentro das tags do PHP, veja se funciona para dar uma página em branco; em seguida, descomente linhas e seções de código (último aninhamento interno), um de cada vez, até encontrar o que causa a falha.

Como o seu script de teste é curto, será fácil e, com sorte, indicará a próxima coisa a verificar.

HTH.

    
por 19.01.2010 / 01:25
1

Você certificou-se de ativar aplicativos de 32 bits? Isso pode ser encontrado no pool de aplicativos do seu site em Configurações avançadas - > Geral.

    
por 24.12.2009 / 00:45
0

500 - Internal Server Error é um erro muito genérico e significa que há algum problema com a configuração do servidor. O código de erro: 0x00000000 significa "sem erro", você pode ativar o rastreamento de solicitação com falha no site e verifique o que está causando o problema.

    
por 24.12.2009 / 04:10
0

Parece que o manipulador PHP não funciona. Você verificou o manipulador de extensão PHP na sua configuração de manipulador http? Por favor verifique também a permissão do seu manipulador PHP.

    
por 19.01.2010 / 21:25
0

Eu tenho conselhos em outros lugares, para usar este comando para fazer o IIS rodar como 32-bit -

   cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1

- mas não posso atestar sua eficácia.

Eu recomendo não nomeando tudo de forma idêntica. Pode ser muito difícil descobrir qual MYCOMPUTER produz um erro, por exemplo ...

A sugestão anterior para revisar a saída do PHPinfo é boa. Isso irá provar se o PHP está funcionando, antes de chegar à interação do ODBC.

    
por 19.01.2010 / 23:07
0

Por que você está usando o ODBC e um DSN em vez do driver nativo do SQL Server do PHP?

Essa é a pior coisa que você pode fazer ao se conectar a um banco de dados do SQL Server.

    
por 20.01.2010 / 19:55