14th Developer Camp

Similar documents
XOOPS on Internet Information Service のステップバイステップガイド 更新日 :2009 年 12 月 適用対象 :Windows Server 2008 R2,Windows XP Professional 概要 インターネットインフォメーションサービス (II

「RAD Studio XE5によるマルチ言語/マルチデバイス開発の進め方」

10th Developer Camp - B5

24th Embarcadero Developer Camp

「DataSnapユースケース研究」 多層技術の概要と最適化、実践テクニック

XAMPP で CMS のお手軽 テスト環境を手に入れよう 2011/5/21 上村崇 1

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

REX-C56EX FAX送信 第5.0版

Microsoft Word - CBSNet-It連携ガイドver8.2.doc

InstallShield FAQ < 独自の InstallShield 前提条件を作成する > 注 ) このドキュメントは InstallShield 2014 Premier Edition を基に作成しています InstallShield 2014 以外のバージョンでは設定名などが異なる場合

25th Developer Camp

17th Embarcadero Developer Camp

InstallAwareを使った Delphi/400運用環境の構築

GHS混合物分類判定システムインストールマニュアル

Windows Server 2003 におけるPrint Manager V6.0L10の留意事項

WebReportCafe

GettingStartedTK2

Si 知識情報処理

Oracle Business Intelligence Standard Edition One のインストール

アーカイブ機能インストールマニュアル

インテル(R) Visual Fortran コンパイラ 10.0

アーカイブ機能インストールマニュアル

PowerPoint Presentation

intra-mart ワークフローデザイナ

Pirates Buster Series Secure Viewer セットアップマニュアル (Web インストーラ)

作業環境カスタマイズ 機能ガイド(応用編)

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

Webコンポーネントのカスタマイズ入門

TimeTracker FX Web Edition セットアップガイド目次 はじめに... 2 第 1 章 TimeTracker FX Web Edition の概要 TimeTracker FX Web Edition とは... 3 システム構成... 3

Install / Protect / Monetize InstallShield 全機能 データシート プロフェッショナルなインストールの作成 PREMIER PROFESSIONAL EXPRESS MSIX パッケージ サポート フレームワークをサポート Windows Installer(

MotionBoard Ver. 5.6 パッチ適用手順書

<4D F736F F F696E74202D F56504E90DA91B1835C CC834E838A B838B837D836A B2E >

一般社団法人ビジネス機械・情報システム産業協会

Delphi/400開発ノウハウお教えします 情報を守ろう!安全性を高めたWebシステムの構築

JP-2-Develop Websites and Components in AEM v6x_(V3_after QA)_1111

20th Embarcadero Developer Camp

基礎からの MySQL 改訂版 は Windows10 や Windows8.1 にも対応しています Windows10 および Windows8.1 をお使いの読者が 基礎からの MySQL 改訂版 を読み進めると きの補足説明 1. 基礎からの MySQL 改訂版 の Windows10 および

ServerViewのWebアクセス制限方法

CodeGear Developer Camp

Microsoft PowerPoint - はじめてのDataSnapアプリケーション_

Acronis® Backup & Recovery™ 10 Server for Windows, Acronis® Backup & Recovery™ 10 Workstation

CLUSTERPRO MC StorageSaver for BootDisk 1.2 (for Windows) インストールガイド 2014(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール

Team Foundation Server 2018 を使用したバージョン管理 補足資料

目次 目次 準備いただくもの 準備 SQLServer2008 R2 ExpressEdition のインストール インストールの前に インストール 設定一覧 機

PowerPoint Presentation

CLUSTERPRO MC RootDiskMonitor 1.0 for Windows インストールガイド 2013(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール

CLUSTERPRO MC StorageSaver for BootDisk 2.1 (for Windows) インストールガイド 2016(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール

intra-mart e-Builder ver 5

Source Insight

インストール要領書

知って得する!現役ヘルプデスクが答えるDelphiテクニカルエッセンス 8.0

8th CodeGear Developer Camp

BOM for Windows Ver

Microsoft Word - CBESNet-It連携ガイドver8.1.doc

Microsoft Word combine.doc

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成

C1Live

Control Manager 6.0 Service Pack 3 System Requirements

Maple 18 スタンドアロン版インストール手順

03 Podium Walkerのインストール方法およびアンインストール .docx

内容 1 はじめに インストールの手順 起動の手順 Enterprise Architect のプロジェクトファイルを開く 内容を参照する プロジェクトブラウザを利用する ダイアグラムを開く 便利な機能.

統合開発環境CubeSuite+ V へのバージョンアップのお知らせ

ArcGIS Runtime SDK for WPF インストールガイド (v10.2.5)

Microsoft Word - XOOPS インストールマニュアルv12.doc

1. Windows Server 2012 および Windows Server 2012 R2 へのマネージャーインストール手順 1.1 概要 本書は inetsec Smart Finder V2.0 マネージャーを 下記の OS の動作する環境にインストールするための手順を公開するものです

目次 Windows 2003 への新規インストール... 3 Windows 2008 への新規インストール... 4 Windows 2012 への新規インストール... 6 Microsoft SQL のサポート... 8 IPv4/IPv6 のサポート... 8 制限事項... 9 Web

メール設定

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

21st Embarcadero Developer Camp T9

PHP 開発ツール Zend Studio PHP アフ リケーションサーハ ー Zend Server OSC Tokyo/Spring /02/28 株式会社イグアスソリューション事業部

厚生労働省版ストレスチェック実施プログラムバージョンアップマニュアル (Ver2.2 から Ver.3.2) 目次 1. プログラム概要 バージョンアップ実施手順 要注意 zip ファイル解凍の準備 Windows によって PC が保護されました と

SketchUp2017 以上のバージョンからプラグインのインストールや管理を行うための 拡張機能マネージャー が追加され Ruby ファイル (*.rbz) の管理が簡単に行えるようになりました SketchUp2016 以下のバージョンは環境設定の 拡張機能 (Extensions) メニューよ

Transcription:

T4 PHP テクニカルセッション DelphiでPHP - 拡張モジュールの作成からWAMP/WIMP 環境の構築まで - エンバカデロ テクノロジーズ エヴァンジェリスト高橋智宏

アジェンダ 使い慣れた開発環境で PHP Extension Module を作成して WAMP / WIMP 環境を拡張でき 日本語対応も デバッグも OK だとしたら うれしくないですか? し か も 超超超カンタンに PHP 拡張モジュールの作成 VCL for PHP でカスタムコンポーネントを作成 WAMP / WIMP 環境の構築 2

PHP 拡張モジュールの作成

PHP 拡張モジュールとは? PHP 拡張モジュールを新規に作成したことがある人いますか? PHP 言語から呼び出し可能な関数を実装した OS ネイティブなライブラリ Windows なら php_mysql.dll など php.ini に extension=php_mysql.dll と記述してロードする 良いところ PHP だけでは実現が難しい処理も実装可能 あまり良くないところ 一般的に 開発環境の構築がメンドクサイ UNIX 系と Windows とで 構築方法がゼンゼン違う 4

じつは 意外と誰でも作成できる Windows 向けですが 誰でも超超超カンタンに PHP 拡張モジュールを開発できる環境があります! < 用意するもの > Delphi for Win32 Delphi 5 ~ Delphi 2009 php4delphi Delphi for Win32 向けのフリーのプラグイン <PHP 環境 > Delphi for PHP - PHP アプリケーションの開発 デバッグ WAMP / WIMP - 配布環境 5

開発環境の準備 Delphi for Win32 をインストール 例 : Delphi 2007 php4delphi をダウンロードし 展開 http://cc.embarcadero.com/item/26233 例 : "C: CodeGear RAD Studio 5.0 php4delphi" php4delphi を IDE に統合 プロジェクトを開く 例 : "C: CodeGear RAD Studio 5.0 php4delphi php4delphi2007group.groupproj php4delphir2007.bpl, php4delphid2007.bpl をビルド php4delphid2007.bpl をインストール これだけ!! 6

はじめての PHP 拡張モジュール プロジェクトの新規作成 [ ファイル ]-[ 新規作成 ]-[ その他 ]-[Delphi プロジェクト ]-[PHP Extension] [ プロジェクトオプション ]-[ ディレクトリ / 条件 - 検索パス ] を設定 例 : "C: CodeGear RAD Studio 5.0 php4delphi" 関数の定義と実装を行う ビルド xxxx.dll ( 例 : Project1.dll) を生成 PHP 環境に配布 7

はじめての関数 echostr 関数 動作 文字列を受け取り その文字列を返す TPHPFunction を 1 つ追加 TPHPExtension クラスの Functions プロパティ FunctionNameプロパティ echostr TFunctionParamを1つ追加 TPHPFunctionクラスのParametersプロパティ ParamTypeプロパティ tpstring OnExecuteイベントを追加 procedure TPHPExtension1.PHPExtension1Functions0Execute(Sender: TObject; Parameters: TFunctionParams; var ReturnValue: Variant; ZendVar: TZendVariable; TSRMLS_DC: Pointer); var str: AnsiString; begin str := AnsiString(Parameters.Items[0].Value); ReturnValue := str; end; これだけ!! 8

関数を実行 Delphi for PHP Project1.dll を <D4PHP> php ext" にコピー <D4PHP> php php.ini.template" に extension=project1.dll を追加 実行時に php.ini が更新される [Windows2000, WindowsXP] C: Documents and Settings ユーザ名 Application Data CodeGear Delphi for PHP 2.0 php php.ini [Vista] C: Users ユーザ名 AppData Roaming CodeGear Delphi for PHP 2.0 php php.ini コマンドライン php.exe コマンドの -c オプションで php.ini のフォルダを指定 例 php.exe -c "C: Users codegaer AppData Roaming CodeGear Delphi for PHP 2.0 php" c: tmp test.php 9

PHP 拡張モジュールのデバッグ php.exeを実行して DLL 内のブレークポイントで止める 日本語文字列は? プロジェクトオプションを設定 [ リンカ ]-[ リモートデバッグシンボルを含める ] ON [ デバッガ ]-[ ホストアプリケーション ] <D4PHP> php php.exe [ デバッガ ]-[ パラメータ ] -c "C: Users codegaer AppData Roaming CodeGear Delphi for PHP 2.0 php" c: tmp test.php [ デバッガ ]-[ ソースパス ].pas のある場所 ビルド DLL(Project1.dll) とデバッグシンボル (Project1.rsm) を <D4PHP> php ext にコピー これだけ!! 10

もう少し複雑な関数 divint divint 関数 整数値を2つ受け取り 割り算した商を返す TFunctionParamを2つ追加 TPHPFunctionクラスのParametersプロパティ ParamType tpinteger procedure TPHPExtension1.PHPExtension1Functions0Execute(Sender: TObject; Parameters: TFunctionParams; var ReturnValue: Variant; ZendVar: TZendVariable; TSRMLS_DC: Pointer); var c: Integer; begin c := Integer(Parameters.Items[0].Value) div Integer(Parameters.Items[1].Value); ReturnValue := c; end; ゼロ除算はどうなる? echo divint(10, 2); 5 echo divint(10, 0);? 11

もっと複雑かつ Windows 向けの実装 - proclist proclist 関数 配列 (array) を返す サーバー内のプロセス名一覧を返してみます Boolean パラメータを受け取る True / False True ならプロセス ID も追加する TFunctionParam を 1 つ追加 TPHPFunction クラスの Parameters プロパティ ParamType tpboolean < 注意点 > 配列を返すには Zend API を利用する _array_init, add_next_index_string など OnExecute イベントの var ReturnValue: Variant; は使用しない!! 12

proclist 関数の実装 procedure TPHPExtension1.PHPExtension1Functions0Execute(Sender: TObject; Parameters: TFunctionParams; var ReturnValue: Variant; ZendVar: TZendVariable; TSRMLS_DC: Pointer); var retval: pzval; hsnap: THandle; proc: TProcessEntry32; pid: Boolean; data: AnsiString; begin retval := ZendVar.AsZendVariable; _array_init(retval, nil, 0); pid := Boolean(Parameters.Items[0].Value); proc.dwsize := Sizeof(TProcessEntry32); hsnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0); try if Process32First(hSnap, proc) then begin data := proc.szexefile; if pid then data := data + '(' + IntToStr(proc.th32ProcessID) + ')'; add_next_index_string(retval, PAnsiChar(data), 1); while Process32Next(hSnap, proc) do begin data := proc.szexefile; if pid then data := data + '(' + IntToStr(proc.th32ProcessID) + ')'; add_next_index_string(retval, PAnsiChar(data), 1); end; end; finally CloseHandle(hSnap); end; Copyright end; 2009 Embarcadero Technologies, Inc. All Rights Reserved. 13

VCL for PHP でカスタムコンポーネントを作成

proclist 関数を実際に利用する proclist 関数に True/False を渡して リストボックスに一覧表示フツーに使うと リストボックスに関する処理だけで Delphi for PHP と VCL for PHP を使えば もっと使い易くて もっと再利用可能性のある もっとオブジェクト指向的な コンポーネント / パッケージが作成できます 15

proclist 関数を実際に利用する ( 続き ) proclist をコンポーネント化すると 非ビジュアルコンポーネントとして 標準のビジュアルコンポーネントと連携 + 16

非ビジュアルコンポーネントの作成 メインメニューから [ コンポーネント ]-[ 新規コンポーネント ] を選択 継承元のクラス Component クラス名 パレットページ名 ProcList Ken パッケージの作成 ON コンポーネント / パッケージは VCL for PHPの配下に置く コンポーネントの.phpを vcl/ken/proclist.inc.php として保存 パッケージの.phpを vcl/ken/ken.package.php として保存 まずは ProcListコンポーネントにpublicな読み取り専用プロパティ PArray を追加してみよう function readparray() { return proclist(true); } コンポーネントをIDEに統合する [ コンポーネント ]-[ パッケージ ]-[ 追加 ] で ken.package.php を選択 17

published なプロパティ published なプロパティは IDE 上でのフォームデザイン時にも設定可能 プロセス ID の表示 / 非表示を設定する Boolean 型プロパティ Pid の追加 [ 編集 ]-[Published プロパティの追加 ] プロパティ名 Pid デフォルト値 true protected $_pid=true; function getpid() { return $this->_pid; } function setpid($value) { $this->_pid=$value; } function defaultpid() { return true; } プロパティ "PArray" の実装を変更し Pid プロパティに連動させる function readparray() { return proclist($this->_pid==true); } Pid が Boolean 型のプロパティであることを IDE に通知する ken.package.php に registerbooleanproperty('proclist','pid'); を追加 コンポーネントの変更を IDE に通知する [ コンポーネント ]-[ パッケージ ]-[ インストール済みパッケージ ] で ken.package.php の選択を ON OFF ON 18

WAMP 環境の構築

WAMP(Windows + Apache + MySQL + PHP) 8/13 の時点で PHP5.2.x 系が利用可能な WAMP 環境 WampServer 2.0h http://sourceforge.net/projects/wampserver/files/ PHP 5.2.9-2 Apache 2.2.11 MySQL 5.1.33 XAMPP for Windows 1.7.1 http://sourceforge.net/projects/xampp/files/ PHP 5.2.9 Apache HTTPD 2.2.11 MySQL 5.1.33 WAMPStack 1.1-5 http://bitnami.org/stack/wampstack PHP 5.2.10 Apache to 2.2.11 MySQL 5.1.30 20

特徴 WampServer 2.0h オススメ! PHP が常に最新!! とても使い易いサービス管理用の GUI ツール有り サービス名として wampapache wampmysqld を使用 XAMPP for Windows 1.7.1 PHP がちょっと古い サービス管理用のGUIツール有り サービス名として Apache2.2 mysql を使用 1.7.1 のインストーラには my.cnf,my.ini の読み込み設定に不具合あり WAMPStack 1.1-5 PHP が最新!! サービス管理用のGUIツール無し サービス名として wampstackapache wampstackmysql を使用 21

WAMP 環境の構築 Windows Server 2008 SP2 上の WampServer 2.0h で試す WampServer 2.0h のインストール DLL( 例 : Project1.dll) を C: wamp bin php php5.2.9-2 ext にコピー php.ini の設定 ( パスに注意!!) C: wamp bin apache Apache2.2.11 bin php.ini extension=project1.dll サービス (Apache) の再起動 PHPアプリの転送 サブフォルダにVCL for PHP コンポーネントは vcl/ に 22

WIMP(Windows + IIS + MySQL + PHP) IIS で PHP を実行するには? FastCGI + 非スレッドセーフな PHP エンジン (32bit) によるハイパフォー マンスなPHP 環境の構築が機能 php-cgi.exe - FastCGIで再利用されるプロセスモジュール php5.dll - 非スレッドセーフなPHPコアモジュール Windows Server 2003 の IIS6.0 FastCGI 拡張のセットアップを手動で Windows Server 2008 の IIS7.0 ハンドラマッピングでカンタンセットアップオススメ! た だ し php4delphi で作成した拡張モジュールは スレッドセーフな PHP コアモジュール php5ts.dll を参照するため IIS での利用には注意が必要! スレッドセーフ版の PHP エンジンを使用します php4delphi を書き換えれば対応は可能でしょう 23

WIMP 環境の構築

IIS + FastCGI + PHP WI?P 環境の構築手順 Windows Server 2008 SP2 を用意する PHP5 のインストール スレッドセーフ版の php-5.2.x-win32.zip をダウンロードし C: PHP に展開 http://www.php.net/downloads.php php.ini の編集 DLL( 例 : Project1.dll) を C: PHP ext にコピー IIS7.0 のインストール [ コントロールパネル ]-[ 管理ツール ]-[ サーバーマネージャ ]-[ 役割 ]-[ 役割サービスの追加 ]-[Web サーバー ]-[ アプリケーション開発 ]-[CGI] IIS マネージャで FastCGI のハンドラマッピングの追加 [ ハンドラマッピング ]-[ モジュールマップの追加 ] 要求パス - *.php モジュール - FastCGIModule 実行可能ファイル - C: PHP php-cgi.exe IIS マネージャでアプリケーションプールの追加 25

ここまでの流れ 1. 2. 3. 参考資料 ( 英語 ): http://www.microsoft.com/japan/opensource/php/learning/default.mspx 26

Web サイトの追加 IIS 向け Web サイトの構築手順 Web アプリケーション実行専用のユーザー & グループの追加 例 : グループ - WebUsersGroup 例 : ユーザー - WebUser Webサイト用のフォルダを作成 アクセス許可を特定のユーザーグループに制限する IISマネージャで [Webサイトの追加] アプリケーションプールの選択 物理パスの選択 [ 接続 ]-[ パス資格情報 ]-[ 特定のユーザー ] WebUser [ テスト接続 ] ボタンでアクセスの可否を確認 IISおよびWebサイトの ( 再 ) 起動 PHPアプリの転送 サブフォルダにVCL for PHP コンポーネントは vcl/ に 27

ここまでの流れ 完了! 1. 3. 2. 参考資料 ( 英語 ): http://www.microsoft.com/japan/opensource/php/learning/default.mspx 28

まとめ Windows 版 PHP5 向けの拡張モジュールの作成.DLLを作成すれば PHP 環境を強化できる Delphi for Win32 を使えば とてもカンタンに作成できる PHP 関数のカプセル化 コンポーネント化することで 開発を効率化できる Delphi for PHP / VCL for PHP の強力なフレームワークとの連携 WAMP / WIMP 環境の構築 Apacheベースのスタックを使えば 素早くWebサイトを構築可能 IIS ベースの Web サイト構築は基本的に手動だが FastCGI が利用可能 29

ご静聴ありがとうございました Q&A 30