PHP での COM の使用
John Lim 著。 Windows 上の
PHP4 は、Microsoft の COM テクノロジをサポートするように拡張されました。ただし、現時点では COM 関数に関するドキュメントは非常に少ないです。
私が試したものの例をいくつか紹介します。これがあなたのアイデアにつながることを願っています。これらは、Windows Web サーバー上で PHP を実行している場合にのみ機能することに注意してください。
PHP を使用したアクティブ データ オブジェクト (ADO)
ADO は、Microsoft のデータベース オブジェクト テクノロジです。データベースに接続するためのオブジェクト、クエリから返されたデータのレコードセット、データ要素を表すフィールド オブジェクトがあります。
ほとんどのデータベースは ADO を直接サポートしていません。代わりに、ほとんどのデータベースは 2 つの下位レベルの Microsoft データベース テクノロジ、ODBC と OLEDB をサポートしています。 ODBC をサポートするデータベースが増えています。しかし、OLEDB は ODBC よりも高速であるという評判があります。
ADO は、ODBC および OLEDB の API ラッパーです。
この例では、新しい ADO Connection オブジェクトを開き、ODBC 経由で従来の NorthWind MS-Access データベースを開きます。 SQL を実行すると、RecordSet オブジェクトが返されます。次に、レコードセットの最初の 3 つのフィールドを表示します。
$dbc = new COM("ADODB.Connection");
$dbc->Provider = "MSDASQL";
$dbc-> ;Open("nwind");
$rs = $dbc->Execute("select * from products");
$i = 0;
$fld0 = $rs->Fields(0);
$fld1 = $rs->Fields(1);
$fld2 = $rs->Fields(2);
while (!$rs->EOF) {
$i += 1;
print "$fld0- >値 $fld1->値 $fld2->値
";
$rs->MoveNext(); /*fld0、fld1、fld2 を更新します !*/
}
$rs->Close();
?>
VBScript の PHP の print $fld0->value に相当するものは、Response.Write( rs.Fields (0).値 );または、より簡潔に言うと、Response.Write( rs(0) ) です。レコードセット (rs) のデフォルトのコレクションは Fields で、Field 要素のデフォルトのプロパティは value であるためです。
PHP はデフォルトのコレクションとプロパティをサポートしていないため、次のように記述する必要があります。
PHP を使用した Microsoft Word の呼び出し
別の例を次に示します。
$word=new COM("word.application") または die("MS Word を起動できません");
print "ロードされた単語のバージョン ($word->バージョン)n";
$word->visible = 1 ;
$word->Documents->Add();
$word->Selection->Typetext("This is a test");
?>
Word の COM オブジェクト モデルのドキュメントはオンライン ヘルプで入手できますが、既定のインストールには含まれていません。 MS Office インストーラーに移動し、オプションで VBScript ドキュメントを選択すれば、楽しむ準備は完了です!
PHP COM のバグ
ADO をテストしているときに、PHP 4.02 でこのバグに遭遇しました。 COM オブジェクトを 2 番目の COM オブジェクトにパラメータとして渡すと失敗するようです。
$dbc = new COM('ADODB.Connection');
$dbc->Provider = 'MSDASQL';
$dbc->Open('NWIND'); // 標準サンプル アクセス データベース Northwind
$rs = new COM("ADODB.Recordset");
/* $dbc を $rs に渡しているため、次の行は INVOKE エラーで失敗します */
/* */
$rs->Open('製品から * を選択',$dbc,3); // 3 = 静的カーソル
?>
もう 1 つのバグは、データ型 null と通貨がサポートされていないことです。
2001 年 1 月 3 日: 上記のバグはいずれも PHP 4.0.4 では修正されていません。バグを修正できる COM C++ の専門家はいますか?結局のところ、PHP はオープンソースです。