ラベル Install Maniax2008 IIS7 の投稿を表示しています。 すべての投稿を表示
ラベル Install Maniax2008 IIS7 の投稿を表示しています。 すべての投稿を表示

2009年5月15日金曜日

SQLServerDriver for PHP

PHP用の SQL Server ドライバは何種類かあるが、 Code Conversion 機能があるものはない(?)ようであるが、この確認にあたり、環境により接続できたり 、出来なかったり苦労したため、再度無駄な時間を費やさないための記録。
extension=php_sqlsrv.dll
extension=php_sqlsrv_ts.dll
extension=php_mssql.dll
extension=php_dblib.dll
接続 / Connect
  • php_mssql.dll ** では ntwdblib.dll のバージョンが古いと接続できない (バージョン 2000.80.194.0 は OK, 2000.80.0 は NG) という不具合があるので注意。
  • また、デフォルトの Windows認証 モードでは SQL Server認証によるログインはでない。
    (SQL Server Management Studio でサーバのプロパティ(セキュリティ)を変更)
  • そして SQL Server構成マネージャにて TCP/IP も有効にしておく必要がある。

文字コード変換 / Code Conversion

  • php_sqlsrv.dll ( php_sqlsrv_ts.dll  この dll はThread Safe版についてはファイル名を変えているが、同じファイル名のまま thread と no thread のものがあるので注意) は Vesion1.1 にて UTF-8 ハンドリング対応予定であるが、April 2009 Cumulative Update のバージョンは 1.0 の状態であり、 1.1 が待たれる。

  • php_dblib.dll (Free TDS)を利用することで SugarCRM *1 や moodle *2では SQL Server を UTF-8 で使用する説明がされている。 しかし、どうやら Windows ではうまく接続ができない。

    - 参考 -
Re: FastStack Windows Installer for 5.2.0c with SQL Server: Is FreeTDS necessary or not
Free TDS is necessary when installing SugarCRM in a Linux/Unix Machine and MS SQL in a Windows Machine.
Actually Free TDS is a connector for MSSQL in Linux.
So you do not need Free TDS in a WAMP stack.
---
Yes, your problem is due data conversion between MySQL and SQL Server.
The current version of SQL Server does not support Unicode charset, so you need to dump the mysql database, convert the file from Unicode to Iso-8859-1 and import it into SQL Server.

@odbc_connect

Driver

ODBC driver to use:
{SQL Server} – Legacy SQL Server driver
{SQL Native Client}SQL 2005 Native Client
{SQL Server Native Client 10.0}SQL 2008 Native Client

PHP.ini

php_mssql.dll にてWindows認証を利用する場合 On

; Use NT authentication when connecting to the server
mssql.secure_connection = Off
;mssql.secure_connection = On
Linux などで FreeTDS(php_dblib.dll ?) を利用して Code Conversion する場合に設定

; Specify client character set.
; If empty or not set the client charset from freetds.comf is used
; This is only used when compiled with FreeTDS
mssql.charset = "ISO-8859-1"
;mssql.charset = "utf-8"

Test Script


C:\>sqlcmd -U test -P test -S TEST\SQLEXPRESS

utf-8 / Shift-JIS

$dbhost = 'test\SQLEXPRESS' ;
$dbuser = 'test' ;
$dbpassword = 'test' ;
$dbname = 'test';
$query = "SELECT name FROM test.dbo.accounts";

// php_mssql.dll http://www.mmdb.net/m_kaneko/php/mssql.htm
$db = mssql_connect($dbhost, $dbuser, $dbpassword);
$res = mssql_query($query,$db);
while($row = mssql_fetch_array($res)){
echo $row['name']."
" ;
}
mssql_free_result($res);
mssql_close();

// http://www.agtech.co.jp/html/v8manuals/linux/linuxcon6.html
$db = @odbc_connect("Driver={SQL Server Native Client 10.0};Server=$dbhost;Database=$dbname;", $dbuser, $dbpassword);
$result = odbc_exec($db, $query);
$i = 0 ;
$numcols = odbc_num_fields($result);
while(odbc_fetch_row($result))
{
while ($i < $numcols)
{
$i++;
$row = odbc_result($result, $i);
echo $row . "
" ;
}
$i = 0;
}
odbc_close($db);
?>


*1 SugarCRM は SQL Sever対応しているが nvarcharタイプを使用していないことから、 Free TDS を利用してコード変換、あるいは php_sqlsrv.dll が UTF-8ハンドリング対応したとしても列の属性変更が必要と思われる。
 関連 SQL Serverを使う場合はUCS-2への変換が必要

*2 SQL Server 2000 だと接続できるか(?)

SQL Server 2008 Express に IIS7+FasdtCGI で mssql_connect(php_mssql.dll) するときは ntwdblib.dll は不要

2009年4月15日水曜日

Rails on IIS7 + FastCGI

Ruby on Rails on IIS7 + FastCgi

Windows 2008 Server Web Editoin x86 の IIS7 の FastCgi を利用し、Ruby on Rails 2.2.2/2.3.2 を動かす。
IIS7 での Rails はリンク切れの情報が多いが、以下の最近(2009/03)の回答から
 http://forums.iis.net/t/1156239.aspx
すると、 IIS7 でも問題なく稼動していると考えられる。

当初 Error 500 にて動作しなかったのは、log ファイルなどへの書き込み権限が不足していたのが原因であった。

しかし、実際に稼動させることができたが、他の PHP アプリケーションと同じサイトでそのまま稼動させることはできないことに気がついた。

Root / 以下の URL が Rails の管理下になるため、 このサイトに仮想ディレクトリを作成した他の PHP などアプリケーションなどの利用はできない。 ( router.rb により対応可能か(?) )



1. 仮想ディレクトリでの対応でなく、サイトを追加により対応する。





2. 以下の資料を参考に作業をすすめる

10 steps to get Ruby on Rails running on Windows with IIS FastCGI
http://mvolo.com/blogs/serverside/archive/2007/02/18/10-steps-to-get-Ruby-on-Rails-running-on-Windows-with-IIS-FastCGI.aspx

上記の資料は IIS6 の環境の例であるため、 IIS7固有の部分の以下の示す。









3. RubyforIIS についてはここより取得

Where is RubyforIIS (rubyforiis.sosukodo.org) has disappeared!
http://forums.iis.net/p/1154234/1889560.aspx#1889560


4. URL Rewiter を設定

Ruby on Rails in IIS 7.0 with URL Rewriter
http://blogs.iis.net/ruslany/archive/2008/08/07/ruby-on-rails-in-iis-7-0-with-url-rewriter.aspx



・ c:/InstantRails/rails_apps/myapp/publick/web.config


<?xml version="1.0" encoding="UTF-8"?>


<configuration>


<system.webServer>


<handlers>


<add name="ROR" path="dispatch.fcgi" verb="*" modules="FastCgiModule" scriptProcessor="C:\ruby\bin\ruby.exe|C:\InstantRails\rails_apps\myapp\public\dispatch.fcgi development" resourceType="Unspecified" requireAccess="Script" />


</handlers>


<rewrite>


<rules>


<rule name="Imported Rule 1">


<match url="^$" ignoreCase="false" />


<action type="Rewrite" url="index.html" appendQueryString="true" />


</rule>


<rule name="Imported Rule 2">


<match url="^([^.]+)$" ignoreCase="false" />


<action type="Rewrite" url="{R:1}.html" appendQueryString="true" />


</rule>


<rule name="Imported Rule 3" stopProcessing="true">


<match url="^(.*)$" ignoreCase="false" />


<conditions logicalGrouping="MatchAll">


<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />


</conditions>


<action type="Rewrite" url="dispatch.fcgi" appendQueryString="true" />


</rule>


</rules>


</rewrite>


</system.webServer>


</configuration>




5. 組み合わせにより動作しない

msvcrt-ruby18.dllがAPPCRASHとなる
http://home-mg.que.ne.jp/20080216.html
今回の稼動環境
Ruby version 1.8.6 (i386-mswin32)
RubyGems version 1.3.1
Rails version 2.2.2
Active Record version 2.2.2
Action Pack version 2.2.2
Active Resource version 2.2.2
Action Mailer version 2.2.2
Active Support version 2.2.2

6. 権限が不足している場合、500 エラーとなる

http://forums.iis.net/t/1156239.aspx

その他

以上