Archive for the ‘PHP’ Category

  1. Hello, Win32 API(Quercus) World!

    Posted on 5月 3rd, 2013 by cx20

    Win32 API(Quercus)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は Quercus にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。

    ソースコード

    <?php
    import org.eclipse.swt.internal.win32.OS;
    import org.eclipse.swt.internal.win32.TCHAR;
     
    $lpText = new TCHAR(0, "Hello, Win32 API World!", True);
    $lpCaption = new TCHAR(0, "Hello, World", True);
    OS::MessageBox(0, $lpText, $lpCaption, OS::MB_OK );
    ?>

    実行方法

    C:¥> java -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;resin.jar;. com.caucho.quercus.CliQuercus hello.php

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API World!
    ---------------------------
    OK   
    ---------------------------
  2. Hello, Quercus World!

    Posted on 5月 1st, 2013 by cx20

    Quercus

    Quercus は Java による PHP 実装である。
    PHP の構文が使える他、Java のライブラリが使用できる。

    ソースコード

    <?php
    echo "Hello, Quercus World!\n";
    ?>

    ソースコード(Java ライブラリを使用した場合)

    <?php
    import java.lang.System;
    System::out->println( "Hello, Quercus World!" );
    ?>

    実行方法

    C:¥> java -cp resin.jar com.caucho.quercus.CliQuercus hello.php

    実行結果

    Hello, Quercus World!
  3. Hello, ODBC(PHP) World!

    Posted on 9月 30th, 2012 by cx20

    ODBC

    ODBC(Open Database Connectivity)は、マイクロソフト社が提唱した DBMS 接続用の API 仕様である。
    DBMS の差異は ODBC ドライバによって吸収される為、ODBC の手順にしたがってプログラムを作成すれば、基本的な差異を意識せず、プログラムすることができる。

    ODBCドライバ ファイル
    Microsoft Access Driver (*.mdb) ODBCJT32.DLL
    Microsoft Text Driver (*.txt; *.csv) ODBCJT32.DLL
    Microsoft Excel Driver (*.xls) ODBCJT32.DLL
    Microsoft dBase Driver (*.dbf) ODBCJT32.DLL
    Microsoft ODBC for Oracle MSORCL32.DLL
    Microsoft Paradox Driver (*.db ) ODBCJT32.DLL
    SQL Server SQLSRV32.DLL
    Microsoft Access Driver (*.mdb, *.accdb) ACEODBC.DLL
    SQL Server Native Client 10.0 SQLNCLI10.DLL

    ソースコード(PHP + ODBC + SQL Server)

    <?php
    $cn = odbc_connect("Driver={SQL Server};Server=(local)", "sa", "P@ssW0rd");
    $rs = odbc_exec($cn, "SELECT 'Hello, ODBC World' AS Message");
     
    while (odbc_fetch_row($rs))
    {
        $result = odbc_result($rs, "Message");
        echo "Message", "n";
        echo "-------------------n";
        echo $result, "n";
    }
    odbc_close($cn);
    ?>

    実行方法(Windows)

    C:¥> php -f hello.php

    実行結果

    Message
    ------------------
    Hello, ODBC World!
  4. Hello, ADO(PHP) World!

    Posted on 9月 29th, 2012 by cx20

    ADO(PHP)

    ADO(ActiveX Data Objects)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
    OLE DB プロバイダを介することで様々な DBMS への接続が可能となっている。
    OLE DB プロバイダとしては、以下のようなプロバイダがある。いくつかが OS 標準で付属している他、追加インストールが可能である。

    プロバイダ名 表示名 説明
    MSDASQL Microsoft OLE DB Provider for ODBC ODBC データベース
    Microsoft.Jet.OLEDB.4.0 Microsoft OLE DB Provider for Microsoft Jet Microsoft Jet データベース
    Microsoft.ACE.OLEDB.12.0 Microsoft Office 12.0 Access Database Engine OLE DB Provider Microsoft Access データベース
    SQLOLEDB Microsoft OLE DB Provider for SQL Server Microsoft SQL Server
    SQLNCLI10 SQL Server Native Client 10.0 Microsoft SQL Server
    MSDAORA Microsoft OLE DB Provider for Oracle Oracle データベース

    なお、PHP 5.4.5 / 5.3.15 より、COM サポートは既定では組み込まれていない為、使用するには、以下の設定を追加する必要がある。

    PHP 設定

    [COM_DOT_NET]
    extension = php_com_dotnet.dll

    ソースコード(PHP + ADO + OLEDB + Jet データベース)

    <?php
    $cn = new COM("ADODB.Connection");
    $cn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.Hello.mdb");
    $rs = $cn->Execute("SELECT 'Hello, ADO World!' AS Message");
     
    while (!$rs->EOF) {
        echo $rs->Fields[0]->name, "n";
        echo "-------------------n";
        echo $rs->Fields[0]->value, "n";
        $rs->MoveNext();
    }
     
    $rs->Close();
    $cn->Close();
    ?>

    ソースコード(PHP + ADO + OLEDB + ACE データベース)

    <?php
    $cn = new COM("ADODB.Connection");
    $cn->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.Hello.accdb");
    $rs = $cn->Execute("SELECT 'Hello, ADO World!' AS Message");
     
    while (!$rs->EOF) {
        echo $rs->Fields[0]->name, "n";
        echo "-------------------n";
        echo $rs->Fields[0]->value, "n";
        $rs->MoveNext();
    }
     
    $rs->Close();
    $cn->Close();
    ?>

    ソースコード(PHP + ADO + OLEDB + SQL Server)

    <?php
    $cn = new COM("ADODB.Connection");
    $cn->Open("Provider=SQLOLEDB;SERVER=(local);DATABASE=master", "sa", "P@ssW0rd");
    $rs = $cn->Execute("SELECT 'Hello, ADO World!' AS Message");
     
    while (!$rs->EOF) {
        echo $rs->Fields[0]->name, "n";
        echo "-------------------n";
        echo $rs->Fields[0]->value, "n";
        $rs->MoveNext();
    }
     
    $rs->Close();
    $cn->Close();
    ?>

    ソースコード(PHP + ADO + OLEDB + Oracle)

    <?php
    $cn = new COM("ADODB.Connection");
    $cn->Open("Provider=MSDAORA;Data Source=ORCL", "scott", "tiger");
    $rs = $cn->Execute("SELECT 'Hello, ADO World!' AS Message FROM DUAL");
     
    while (!$rs->EOF) {
        echo $rs->Fields[0]->name, "n";
        echo "-------------------n";
        echo $rs->Fields[0]->value, "n";
        $rs->MoveNext();
    }
     
    $rs->Close();
    $cn->Close();
    ?>

    実行方法(Windows)

    C:¥> php -f hello.php

    実行結果

    Message
    -----------------
    Hello, ADO World!
  5. Hello, PDO(PHP) World!

    Posted on 9月 28th, 2012 by cx20

    PDO

    SQL Server Driver for PHP はマイクロソフト社より提供されている PHP 向けの SQL Server ドライバである。
    ドライバの形式として、PHP 拡張形式と PDO(PHP Data Object)形式の2種類が存在する。
    以下は PDO 形式の SQL Server Driver の例となっている。

    なお、SQL Server ドライバは既定では組み込まれていない為、使用するには、以下の設定を追加する必要がある。

    PHP 設定(PHP 5.4 / スレッドセーフのドライバを指定した場合)

    extension = php_pdo_sqlsrv_54_ts.dll

    ソースコード(PHP + PHP 拡張 + SQL Server)

    <?php
    $dbh = new PDO('sqlsrv:server=(local);database=master', 'sa', 'P@ssW0rd'); 
    $sql = "SELECT 'Hello, PDO World!' AS Message"; 
    foreach ($dbh->query($sql) as $row) { 
        echo "Messagen";
        echo "-------------------n";
        echo $row[0]; 
    } 
    $dbh = null;
    ?>

    実行方法

    C:¥> php hello.php

    実行結果

    Message
    -------------------
    Hello, PDO World!
  6. Hello, SQL Server(PHP) World!

    Posted on 9月 27th, 2012 by cx20

    SQL Server Driver for PHP

    SQL Server Driver for PHP はマイクロソフト社より提供されている PHP 向けの SQL Server ドライバである。
    ドライバの形式として、PHP 拡張形式と PDO(PHP Data Object)形式の2種類が存在する。
    以下は PHP 拡張版の SQL Server Driver の例となっている。

    なお、SQL Server ドライバは既定では組み込まれていない為、使用するには、以下の設定を追加する必要がある。

    PHP 設定(PHP 5.4 / スレッドセーフのドライバを指定した場合)

    extension = php_sqlsrv_54_ts.dll

    ソースコード(PHP + PHP 拡張 + SQL Server)

    <?php
    $serverName = "(local)";
    $connectionInfo = array( "UID"=>"sa", "PWD"=>"P@ssW0rd", "Database"=>"master" );
    $conn = sqlsrv_connect( $serverName, $connectionInfo );
    $stmt = sqlsrv_query( $conn, "SELECT 'Hello, SQL Server(PHP) World!' AS Message" );
    while( $row = sqlsrv_fetch_array( $stmt ) ) {
        echo "Messagen";
        echo "-------------------n";
        echo $row[0]; 
    }
    sqlsrv_free_stmt( $stmt );
    sqlsrv_close( $conn );
    ?>

    実行方法

    C:¥> php hello.php

    実行結果

    Message
    -------------------
    Hello, SQL Server(PHP) World!
  7. Hello, Windows Forms(Phalanger) World!

    Posted on 6月 12th, 2012 by cx20

    Windows Forms(Phalanger)

    Windows フォーム(Windows Forms)は .NET Framework におけるユーザーインターフェイス基盤である。Windows アプリケーションにおけるウィンドウやダイアログに対応する。
    以下は Phalanger における Windows フォーム の例となっている。

    ソースコード

    <?
    use System;
    use SystemWindowsForms;
    use SystemDrawing;
     
    class HelloForm extends SystemWindowsFormsForm
    {
        public function __construct()
        {
            $this->Size = new SystemDrawingSize( 640, 480 );
            $this->Text = 'Hello, World!';
     
            $label1 = new SystemWindowsFormsLabel();
            $label1->Size = new SystemDrawingSize( 320, 20 );
            $label1->Text = 'Hello, Windows Forms(Phalanger) World!';
            $this->Controls->Add( $label1 );
        }
        static function Main()
        {
            FormsApplication::Run(new HelloForm());
        }
    }
    ?>

    ソースコード(アプリケーション設定ファイル)

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <phpNet>
            <classLibrary>
                <add assembly="mscorlib" />
                <add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
                <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
                <add assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            </classLibrary>
        </phpNet>
    </configuration>

    実行方法

    C:¥> phpc /pure /target:winexe Hello.php

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Windows Forms(Phalanger) World!    |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  8. Hello, COM(PHP) World!

    Posted on 5月 25th, 2012 by cx20

    PHP

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    以下は PHP による COM クライアントの例となっている。
    なお、PHP 5.4.5 / 5.3.15 より、COM サポートは既定では組み込まれていない為、使用するには、以下の設定を追加する必要がある。

    PHP 設定

    [COM_DOT_NET]
    extension = php_com_dotnet.dll

    ソースコード

    <?php
    $shell = new COM("Shell.Application");
    $folder = $shell->BrowseForFolder(0, "Hello, COM(PHP) World!", 0, 36 );
    ?>

    実行方法

    C:¥> php -f hello.php

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(PHP) Wolrd!                 |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+
  9. Hello, Win32 API(PHP) World!

    Posted on 4月 29th, 2012 by cx20

    Win32 API(PHP)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は PHP にて COM ライブラリである DynamicWrapper を経由した Win32 API の呼出し例である。

    なお、PHP 5.4.5 / 5.3.15 より、COM サポートは既定では組み込まれていない為、使用するには、以下の設定を追加する必要がある。

    PHP 設定

    [COM_DOT_NET]
    extension = php_com_dotnet.dll

    ソースコード

    <?php
    $win32 = new COM("DynamicWrapper");
    $win32->Register( "user32.dll", "MessageBoxA", "i=hhsu", "f=s", "r=l" );
    $win32->MessageBoxA( 0, "Hello, Win32 API(PHP) World!", "Hello, World!", 0 );
    ?>

    なお、上記の “i=hhsu” は各引数の型を、”f=s” は呼び出し規約を、”r=l” は戻り値の型を表している。以下は主要なタイプ一覧である。詳細は「An Automation Object for Dynamic DLL Calls | Dr Dobb’s」を参照のこと。

    タイプ 説明
    a オートメーションオブジェクト(IDispatch*)
    c 符号なし文字型(unsigned char)
    d 倍精度浮動小数点数(double)
    f 単精度浮動小数点数(float)
    k COM オブジェクト(IUnknown*)
    h ハンドル(handle)
    l 整数型(long)
    p ポインタ(pointer)
    s 文字列(string)
    t 整数型(short)
    u 符号なし整数型(unsigned int)
    w ワイド文字列(wide string)

    実行方法

    C:¥> php -f hello.php

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API(PHP) World!
    ---------------------------
    OK   
    ---------------------------
  10. Hello, Smarty World!

    Posted on 2月 20th, 2012 by cx20

    Smarty

    Smarty は PHP 用のテンプレートエンジンである。名前の由来は「スマート(smart)」から。
    ページにアクセスするとテンプレートはコンパイルされ PHP スクリプトに展開される。

    ソースコード(テンプレート)

    <html>
      <head>
         <title>Hello, World!</title>
      </head>
      <body>
        <p>Hello, {$message} World!</p>
      </body>
    </html>

    ソースコード(PHP)

    <?php
    require_once 'libs/Smarty.class.php';
    $smarty = new Smarty();
    $smarty->template_dir = 'templates/';
    $smarty->compile_dir  = 'templates_c/';
    $smarty->assign('message', 'Smarty');
    $smarty->display('template.html');
    ?>

    上記の PHP コードならびにテンプレートは実行時に以下の PHP スクリプトに展開される。

    コンパイル結果(PHP)

    <?php /* Smarty version Smarty-3.1.7, created on 2012-01-31 00:10:09
             compiled from "templates/template.html" */ ?>
    <?php /*%%SmartyHeaderCode:10960230224f26b28ceec5c3-38524326%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
    $_valid = $_smarty_tpl->decodeProperties(array (
      'file_dependency' => 
      array (
        '41d3b4a4b71afe0c223778e57c23244caee1baec' => 
        array (
          0 => 'templates/template.html',
          1 => 1327936205,
          2 => 'file',
        ),
      ),
      'nocache_hash' => '10960230224f26b28ceec5c3-38524326',
      'function' => 
      array (
      ),
      'version' => 'Smarty-3.1.7',
      'unifunc' => 'content_4f26b28d05af0',
      'variables' => 
      array (
        'message' => 0,
      ),
      'has_nocache_code' => false,
    ),false); /*/%%SmartyHeaderCode%%*/?>
    <?php if ($_valid && !is_callable('content_4f26b28d05af0')) {function content_4f26b28d05af0($_smarty_tpl) {?><html>
      <head>
         <title>Hello, World!</title>
      </head>
      <body>
        <p>Hello, <?php echo $_smarty_tpl->tpl_vars['message']->value;?> World!</p>
      </body>
    </html>
    <?php }} ?>

    実行方法

    ディレクトリ構成
    /doc               … 公開用フォルダ
        /libs          … ライブラリ配置場所
        /templates     … テンプレート配置場所
        /templates_c   … テンプレートコンパイル結果配置場所
     
    1. ライブラリ(Smarty.class.php)を libs に配置
    2. テンプレート(template.html)を templates に配置
    3. ソース(hello.php)を公開フォルダに配置
    4. ブラウザで表示
       http://localhost/doc/hello.php

    実行結果

    Hello, Smarty World!