目的
Windows 10 Pro x64 + httpd-2.4.46-o111h-x64-vc15 に
php_sqlsrv_80_ts、php_pdo_sqlsrv_80_ts をインストールして
SQL Server 2019 Expressにアクセスしてみる
※現在phpinfoでpdoモジュールを認識しないことを確認(解消されている)
※一度 pdo_odbc のみで認識させると php_pdo_sqlsrv_80_ts が正常に認識されるようだ・・・
※pdo周りはまだ不安定のようだ pdo_pgsql 単独指定だと phpinfoのpdo欄には表示されないが、pdo_pgsql は表示される
※pdo_odbc,pdo_pgsql の指定で、phpinfoのpdo欄にpdo_odbc,pdo_pgsql共に表示される
対象データはAdventureWorksLT2019を復元しておく
※LoadModule php_module に変更されたことに注意(php8_module ではない)
ダウンロード
PHP 8.0 (8.0.0)より
VS16 x64 Thread Safe(php-8.0.0-Win32-vs16-x64.zip)をDLして、適当なフォルダに解凍して配置する。
※自分の場合は C:\Dev\Lang\php8 とリネームして配置
※現在 ext 以下のモジュールは古い環境でコンパイルしたようだ(compiled with module API=20180731\nPHP)
SQL Server 用のドライバのインストール
microsoft/msphpsql
より Support for PHP 8.0 の最新版をDL後適当なフォルダで解凍する
php_sqlsrv_80_ts、php_pdo_sqlsrv_80_tsを C:\Dev\Lang\php8\ext 以下にコピーする
※PHP Warning: PHP Startup: Unable to load dynamic library 'php_pdo_sqlsrv_80_ts' で認識されないようだ
httpd.confの修正
C:\Apache24\conf\httpd.conf の最後に以下を追加する
LoadModule php_module C:\Dev\Lang\php8\php8apache2_4.dll
AddHandler application/x-httpd-php .php
AddHandler application/x-httpd-php-source .phps
PHPIniDir "C:/Dev/Lang/php8"
php.iniの修正
short_open_tag = On ;これは好みかなぁ・・
zend.multibyte = On
zend.script_encoding = UTF-8
extension_dir = "ext"
cgi.force_redirect = 0
cgi.fix_pathinfo = 1
fastcgi.impersonate = 1
fastcgi.logging = 0
extension=php_mbstring
extension=php_sqlsrv_80_ts
extension=php_pdo_sqlsrv_80_ts
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
mbstring.substitute_character = none
mbstring.func_overload = 0
mbstring.strict_detection = auto
動作の確認
apache を再起動する
C:\Apache24\htdocs 以下に以下を配置
> cat info.php
<?php phpinfo(); >
http://localhost:8080/info.php にアクセスすると phpinfo が表示される
※以下はリリース版が出た後に確認かな??
sqlsrv、pdo_sqlsrvが認識されていることを確認する
サンプルコード
<?php
$dsn = 'sqlsrv:server=localhost;database=AdventureWorksLT2019';
$user = 'demo';
$password = 'demo';
$dbh = new PDO($dsn, $user, $password);
$sql = "select * from SalesLT.Address";
foreach ($dbh->query($sql) as $row) {
print($row['AddressID'] . ' ' . $row['AddressLine1']);
}
$dbh = null;
?>
参考にしたのは以下のサイト
Windows 10 に Apache をインストールしてみる
Windows版PHP+PDOでSQLServerにアクセスしてみる
Ubuntu 16.04 x64 + SQL Server2017 Express で AdventureWorks2017.bak を復元してみる
httpd.conf on Windows: can't locate API model structure php8_module