ゴール
FreeTDS (php_dblib.dll 0.82 + 20110906 パッチ) Drivers for PHP 5.4.16 (VC9)を使用して、MSSQL 2008 R2サーバーに接続します。
クライアントが代替手段を使用することを決定しない限り、FreeTDS の代替手段を使用することはできません。明日、現在のバージョンの PHP (現在は 5.3.x) をアップグレードするときにこの問題に遭遇しない限り、これはありそうにありません。
問題
PHP が FreeTDS 拡張機能を読み込めません。
Apache エラー ログには、サーバーの起動時に次のように表示されます。
PHP Warning: PHP Startup: Unable to load dynamic library 'c:/wamp/bin/php/php5.4.16/ext/php_dblib.dll' - The specified module could not be found.\r\n in Unknown on line 0
私が理解している限り、拡張機能が見つからないか、間違ったバージョンですか?
php.ini 内の拡張機能ディレクトリの場所は、チェックおよびトリプル チェックされており、次のとおりです。
c:/wamp/bin/php/php5.4.16/ext/
これにより、php_dblib.dll のバージョンが間違っていると思われます。また、それを何度も確認し、PHP 5.4.X スレッド セーフのバージョンを使用するようにしました。
実行した手順
- PHP 5.4.16 および Apache 2.4.4 を使用した WAMP 2.4 のクリーン インストール
- PHP 拡張ディレクトリに配置されたスレッドセーフな php_dblib.dll
extension=php_dblib.dll
正しいphp.iniに追加extension=php_mssql.dll
およびextension=php_pdo_mssql.dll
php.ini で無効化- msvcr71.dll (DotNet フレームワーク 1.1) を PHP ルート ディレクトリに追加
- freetds.conf がサーバーのルート ディレクトリに追加されました (c:)
システム詳細
- WAMP サーバー 2.4
- アパッチ 2.4.4
- PHP 5.4.16 (VC9)
- スレッド セーフ: 有効
- FreeTDS スレッド セーフ (php_dblib.dll) 0.82 + 20110906 パッチ
- Microsoft SQL Server 2008 R2
- msvcr71.dll (DotNet フレームワーク 1.1)は、PHP ルート ディレクトリにのみ含まれています。
編集:
- WAMP 2.4 32 ビット
- OS: Windows 7 プロ 64 ビット
編集3
最後の更新は、WAMP の 64 ビット バージョンにのみ適用されます。再び 32 ビット バージョンをインストールしました--without-dblib
が、phpinfo() の configure コマンド セクションにはありません。
質問
- 与えられた情報で、状況を正確に評価するために知っておくべきことは他にありますか?
- 何も見つかりませんが、FreeTDS 0.82 と PHP 5.4.16 に関する既知の問題はありますか?
一時的な敗北
今のところ PHP 5.3.x にロールバックしました。FreeTDS はそのバージョンで正常に動作します。私が実際にクライアントに提供している小さなコードで違いが生じるかどうかはわかりません。これは、すべてが完全に機能することを確認するための「二重」チェックを目的としていましたが、インストール中に現場にいるので、問題が発生した場合は修正できます。
私が毎日使用しているシステムの多くが php 5.4 以降にアップグレードされるため、最終的には解決策を見つけたいと考えています。