web-dev-qa-db-ja.com

IISからこの500エラーが発生するのはなぜですか?

Windows 7 Ultimatex64のPHP 7.5でIIS 5.3.1を実行しています。 ADODBを使用して、PHPをODBC経由でSQL Server 2008Expressのローカルインストールに接続させようとしています。 ODBCマネージャーでローカルSQLサーバーをサーバーDSNとして追加した後でも、次のエラーが発生し続けたため、最初は接続に問題がありました。

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

Stack Overflowでこれについて尋ねた そして答えを得た。振り返ってみると、おそらくここでそれを尋ねるべきだったのですが、答えを得たので気にしません。 (それに、そもそも三部作のサイトが分割されているという事実は絶対に嫌いですが、それは別の話です...)

とにかく、代わりに%windir%\ sysWOW64\odbcad32.exeを使用してデータソースを設定した後、私はある程度の進歩を遂げたようです。上記のエラーは発生しなくなりました。代わりに、私は一見はるかに邪悪なエラー、つまりこれを取得しています:

Click to enlarge

単純なPHP例外が発生する前。これで、私のPHPスクリプトは、この64ビットODBCドライバーでハングアップしているように見えるため、segfaultingと同等の処理を実行します。助けて! SQL Serverへの接続は比較的単純で簡単な作業である必要があるので、物事を機能させるために何をする必要がありますか?


更新:SQL ServerとPHPがすぐに相互に通信する必要があるため、賞金を獲得し始めています。ある投稿者は、イベントログを確認するように提案しましたが、何も表示されません。別の投稿者は、失敗したリクエストのトレースを有効にすることを提案しました。それが提供するエラートレースのコピーは見つけることができます ここ (IEのみ)。 (非常に基本的な)PHPスクリプトも表示されています ここ 。接続の名前を「MYCOMPUTER」に変更し、特定のデータベース/カタログの名前を「MyDatabase」に変更し、パスワードを非表示にしましたが、その他の変更は行いませんでした。

少し背景:

  • 私のコンピューターはMYCOMPUTERと呼ばれています(実際にはそうではありませんが、そのように考えてください)
  • MYCOMPUTERは、IIS 7.5を搭載した64ビットのWindows7Ultimateを実行しています。
  • MYCOMPUTERにはPHP 5.3.1がインストールされています(32ビット)FastCGIを介して処理されます
  • MYCOMPUTERには64ビットのSQLServer Express2008がインストールされています
  • デフォルトのSQLインスタンスはMYCOMPUTER\SQLEXPRESSと呼ばれます
  • MyDatabaseというデータベースがあります(ここでも、名前は実際には異なります)
  • MYCOMPUTERと呼ばれるシステムDSNセットアップがあります(32ビットODBCマネージャーでセットアップ)
  • MYCOMPUTER64と呼ばれるシステムDSNセットアップがあります(64ビットODBCマネージャーでセットアップ)

リンクしたスクリプトでMYCOMPUTERに接続しようとすると、恐ろしい500エラーが発生します。同じスクリプトでMYCOMPUTER64に接続しようとすると、上記の「アーキテクチャの不一致」エラーが発生します。いずれにせよ、それは機能していません。私はそれが機能する必要があります。助けてください。

2
soapergem

IIS7を使用しているときにPHP + ODBCを間違った方法で見ると、一般的な500が得られることがわかりました。「0」の500エラーを取得するのは非常に楽しいことです。

PHPコード側から実行すると、OS/IIS側からこれにアプローチしているように感じます(ドライバーの問題がわかったので、障害が発生する可能性があります)。 )。

PHPInfoは期待どおりに機能しますか?

参照されているPHPスクリプトのうち、どの行で失敗していますか?他に方法がない場合は、PHPタグ内のすべてをコメントアウトして、次のことを確認してください。空白のページを表示するように機能します。次に、障害がスローされる原因となるものが見つかるまで、行とコードセクション(最後に最も内側にネストされている)のコメントを解除します。

テストスクリプトは短いので簡単です。うまくいけば、次にチェックすることが指摘されます。

HTH。

2
techie007

32ビットアプリケーションを有効にすることを確認しましたか?これは、サイトのアプリプールの[詳細設定]-> [一般]にあります。

1
palehorse

PHPのネイティブSQLServerドライバーの代わりにODBCとDSNを使用しているのはなぜですか?

これは、SQLServerデータベースに接続するときに実行できる最悪のことです。

0
Massimo

500-内部サーバーエラーは非常に一般的なエラーであり、サーバー構成に問題があることを意味します。エラーコード:0x00000000は「エラーなし」を意味します。Webサイトで失敗した要求のトレースを有効にして、問題の原因を確認できます。

0
Vivek Kumbhar

PHPハンドラーが機能していないようです。httpハンドラー設定でPHP拡張ハンドラーを確認しましたか?=の権限も確認してください。 PHPハンドラー。

0
sky100