Try PHP on IBM i V6R1 in ISUC 2009 with Zend Core for i5/OS

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Try PHP on IBM i V6R1 in ISUC 2009 with Zend Core for i5/OS - Presentation Transcript

    1. 【実習】PHP on IBM i OpenSource協議会 System i 2009/10/22
    2. 講師紹介  ゼンド・ジャパン株式会社 吉田 悟  1999年からRPGプログラマー  2000年から、ColdFusionというスクリプ ト言語でAS/400のDBに接続するWebアプ リケーションも担当  2007年より現職にてテクニカルサポートお よび日本語化を担当。 #2
    3. 目的  IBM i に蓄積してきたデータをイントラネッ トやインターネットで活用する方法をご検討 されている事かと思います。  PHPはその方法のうちの一つです。  PHP から IBM i への接続方法や、取得した データを Excel およびPDF などで利用する 方法を実習します。 #3
    4. アジェンダ  実習環境について  Excelへの出力  クライアント環境  PHPExcelとは?  Zend Studioの利用  Excelファイル作成例  IBM i 環境  実習  DB2への接続  PDFへの出力  接続の基本  TCPDFとは?  データ取得  PDFファイル作成例  実習  実習  発展 #4
    5. 実習環境について 実習を行う環境について説明します。
    6. クライアント環境  Zend Studio for i5/OS  PHPスクリプトを編集します。  ExcelおよびAcrobat Reader  出力結果を確認します。  System i ナビゲータ  5250エミュレータ ディレクトリ構造やデータ内容を確認します。 #6
    7. Zend Studio とは?  PHP専用の統合開発環境で、エディタ、デバッグおよ びプロファイラ、ソース管理などを装備  Zend Studio for i5/OS版では、i5/OS上でのデ バッグやプロファイラを行えます。  当実習では主にエディタ機能を利用します。  Zend Studio for i5/OS画面の左上、ファイルマ ネージャタブのファイルシステムビューをご覧下 さい。 実習用のPHPスクリプトファイルが表示されま す。 #7
    8. IBM i 環境  お一人様ごとに用意  PHPスクリプトの場所 /www/zendcore/htdocs/zphpNN  NNはお一人様ごとの番号です。例:zphp19  Zend Studio for i5/OS ではFTP接続してファイルシ ステムビューに表示しています。  データベースライブラリー ZPHPNN  同じくお一人様ごとの番号です。例:ZPHP19  得意先マスターTOKUIMがあります。  CRTLIBではなく、SQLのCREATE COLLECTIONで 作成したものです。 #8
    9. IBM i 環境  共通のもの  Zend Core for i5/OS PHPの実行エンジンです。 /usr/local/Zend にあります。  PHPExcelおよびTCPDF それぞれExcelとPDFファイルを作成するために使 うライブラリです。 コード補完機能が利用できるように、みなさんの PCにも格納しました。 Zend Studioのプロジェクトビューで isuc2009 フォルダーとして確認できるように設定済みです #9
    10. DB2への接続 初めに、IBM i のDB2への接続方法を実習しま す。
    11. 接続の種類  DB2関数  情報入手しやすく、お勧めです。  ODBC関数  接続時のオプション指定などができません が、DB2も扱えます。  i5関数  DB2関数をラッパしたファイル操作関数があ ります。RPGでのSETLLやREAD命令に似 た使い方や、オブジェクト操作向き。 # 12
    12. DB2接続フロー  db2_connectで接続開始  db2_prepareでSQL文準備  任意でdb2_bind_paramで引数指定  db2_executeで実行  db2_fetch_* で結果取り出し  最後にdb2_close  途中でエラーで終了する場合も # 13
    13. DB2への接続  db2_connectを利用  第1引数はリレーショナル・データベース 名。DSPRDBDIREで確認。 *LOCALも使えます。  第2、第3引数にそれぞれ IBM i へのログイ ンユーザーおよびパスワード。 # 14
    14. DB2への接続  第4引数は任意で指定。例えば。。  i5_lib SQL文でライブラリを省略した場合の、 既定ライブラリを指定  autocommit, i5_commit トランザクション制御方法を指定 詳しくは「発展」をご覧下さい # 15
    15. DB2への接続例  db2_connect(        '*LOCAL', $userId, $pwd      );  db2_connect(       'S123456A', $userId, $pwd,     array('i5_lib' => 'ZPHP99')      ); # 16
    16. 接続が失敗・成功したとき  db2_connectが falseを返すことを利用して 判断  db2_conn_errormsg で接続エラーメッセー ジを取得できます。  ちなみに、後で使う db2_stmt_errormsg は SQL文(ステートメント)のエラーを返します。  接続に成功した場合は、使い終わったら db2_close で閉じましょう。 # 17
    17. SQLの準備と実行  db2_prepare及びdb2_executeを利用  SQL文の可変部分を?で指定可能。セキュ リティーを強くできます。  ?部分を db2_bind_param で指定。 ?1個につきdb2_bind_param1個必要です が、その代わり桁精度など細かく指定できま す。  または簡易的に db2_execute の第2引数 で配列として指定。 # 18
    18. SQL結果取り出し  db2_fetch_* を利用  * の部分は、array, assoc, both の3種類 です。 rowもありますが、IBM i では非推奨  array では SQL文での項目記述順で0番か ら始まる配列、assoc では項目名をキーに する連想配列を返します。 bothは両方のデータを含む連想配列を返 します # 19
    19. SQL結果取り出しイメージ  db2_fetch_array  $row[0] = 'A001', $row[1] = '吉田'  db2_fetch_assoc  [0]の代わりに['CODE'], [1]の代わりに ['NAME']がキーの連想配列  db2_fetch_both  [0]と['CODE']、[1]と['NAME']の両方を キーとして含む連想配列 # 20
    20. 実習  対象のPHPスクリプト  /www/zendcore/htdocs/zphpNN の db01.php 及び db01.inc.php  得意先マスターTOKUIMのデータを UPDDTAで追加・変更したり、  db01.inc.php 39行目の$minTokuiCdや その次の$maxTokuiCdを変更して、検索 結果に反映されることを確認しましょう # 21
    21. 実習で接続が不調の場合  どのような結果が表示されるか、確認できるよ うに、DB2に接続したフリをするファイルを 用意しました。  もし万が一不調の場合、db01.inc.phpを呼び 出す箇所をdb99.inc.php に書き換えてくださ い。  ラッパ関数 my_db2_fetch_array でレコー ドを取得したフリをします。 # 22
    22. Excelへの出力 IBM i 上でExcelファイルを作成しましょう。 PHPExcelというライブラリを使用します。
    23. PHPExcelとは?  取得したデータからExcelファイルを作 る手段の一つ。他には。。。  CSVファイルを作ってExcelで開く 詳細な設定は無理  COM関数で作成 Windows限定  PEARのSpreadsheet_Excel_Writer Excel2007不可、97から2003までは日本語 表示するために自己責任でパッチ当て必要 # 24
    24. PHPExcelの特徴  Excel97-2003にも2007にも対応  読み込みも作成もできます  日本語にも対応  サンプルが多数添付され、始めやすい  29種類あります  IBM i のIFSに配置してinclude_path設 定すると利用可能 # 25
    25. 前提条件  PHP 5.2.x  Zend Core for i5/OS Ver 2.0.1以降に 該当します  PHPエクステンション  Excel2007形式での出力を利用する場合 はzip および XmlWriter が有効になって いる必要があります。  Excel2003以前の形式なら xmlが有効に なっていればOK # 26
    26. 入手と導入方法  入手  www.codeplex.com から無償で入手可能  最新は今年の8月にリリースされた1.7.0  導入  解凍結果のClassesフォルダの中身を include_pathで設定されたパスに移動 PHPExcel.php PHPExcelフォルダ # 27
    27. 当実習での導入先  IBM i 側  /usr/local/Zend/Core/share/pear の PHPExcel 上記以外の任意のパスに導入して、そのパスを include_pathに追記してもOKです。  各端末側  プロジェクトビューで下記で参照できます。 isuc2009/PHPExcel # 28
    28. Excelファイル作成フロー1  require_once 'PHPExcel.php';  require_once 'PHPExcel/IOFactory.php';  $obj = new PHPExcel();  この間にシート内容作成 「Excelファイル作成フロー2」で説明  $obj->PHPExcel_IOFactory::createWriter($obj, “Excel5”);  Excel2003以前の場合 Excel2007の場合はExcel2007と指定  $obj->save(“test.xls”); # 29
    29. Excelファイル作成フロー2  $obj->setActiveSheetIndex(0);  $sheet = $obj->getActiveSheet();  対象シートを指定します。  $sheet->setCellValue('C5', $val);  $sheet->setCellValueByColumnAndRow(2, 5, $val);  上の2行はセルC5に同じ内容を出力します。列 A=0番目、列C=2番目の列です。  列の場合と異なり、行は1から始まります。 # 30
    30. データ型  データ型も一緒に指定する場合、関数名に Explicitが必要です。  setCellValueExplicit, setCellValueExplicitByColumnAndRow  データ型は PHPExcel_Cell_DataType:: に続け て下記定数を指定します。 TYPE_STRING(文字列:デフォルト値) TYPE_FORMULA(数式) TYPE_NUMERIC(数値) TYPE_BOOL(ブール値) # 31
    31. 色と塗りつぶし設定  各種の書式設定は getStyle関連の関数で行いま す。現在の状態を表すオブジェクトを取得して から書き換えます。  フォントの色  $sheet->getStyle('A1')->getFont()- >getColor->setARGB(色) PHPExcel_Style_Color:: に続けて COLOR_RED(赤)などを指定 色定数についてはコード補完候補リストで確 認できます。 # 32
    32. 色と塗りつぶし設定  塗りつぶしの色  $sheet->getStyle('A1')->getFill- >getStartColor()->setARGB(色) 色の指定方法はフォントの色と同様  塗りつぶし状態  $sheet->getStyle('A1')->getFill- >setFillType(塗りつぶし方法) PHPExcel_Style_Fill:: に続けて FILL_PATTERN_DARKDOWNなどを指定 # 33
    33. 色と塗りつぶし設定  塗りつぶし状態定数の例  FILL_NONE (なし:デフォルト値)  FILL_SOLID (色のみ)  FILL_PATTERN_DARKDOWN(右下がり斜線)  FILL_PATTERN_DARKUP(左下がり斜線)  FILL_PATTERN_DARKGRID(格子)  以上DARKをLIGHTに変えると実線を利用  FILL_PATTERN_GRAY125 (12.5%灰色)  FILL_GRADIENT_LINIEAR (グラデーション)  etc.. # 34
    34. 寄せ設定  現在の寄せ方向を表すオブジェクトを取得して 書き換えます。  $sheet->getStyle('A1')->getAlignment- >setVertical(PHPExcel_Style_Alignment::縦方 向定数) VERTICAL_BOTTOM (下寄せ) VERTICAL_TOP (上寄せ) VERTICAL_CENTER (中央揃え) VERTICAL_JUSTIFY (両端揃え) # 35
    35. 寄せ設定  横方向はsetHorizontalを使います。縦方向と 同じく、PHPExcel_Style_Alignment:: に横方向 の定数を続けます。  HORIZONTAL_GENERAL (標準) 文字列は左詰め、数値は右詰め  HORIZONTAL_LEFT (左詰め)  HORIZONTAL_RIGHT (右詰め)  HORIZONTAL_CENTER (中央揃え)  HORIZONTAL_JUSTIFY (両端揃え) # 36
    36. 罫線設定  上下左右の現在の罫線状態を表すオブジェクト を取得して書き換えます。  $sheet->getStyle('A1')->getBorders()- >getTop()->setBorderStyle(種類) セルの上下左右の状態をそれぞれ getTop, getBottom, getLeft, getRight で取得。 PHPExcel_Style_Border:: に続けて BORDER_THICK(太線)などの種類を指定 # 37
    37. 罫線設定  罫線種類定数の例  BORDER_NONE (なし:デフォルト値)  BORDER_THIN (細線) BORDER_HAIR (極細線)  BORDER_MEDIUM (中太線) BORDER_THICK (太線)  BORDER_DOUBLE (二重線)  BORDER_DOTTED (点線) BORDER_DASHED (破線)  BORDER_DASHDOT (一点鎖線)  BORDER_DASHDOT (二点鎖線)  etc.. # 38
    38. 書式のコピー  一箇所設定して、他のセルにコピーするこ ともできます  duplicateStyle(元の書式、コピー先)  duplicateStyle($sheet->getStyle('A1'), 'A1:B10'); 上記では、A1の書式を A1からA10と B1からB10までの合計20個のセルに コピーします # 39
    39. 実習その1  対象のPHPスクリプト  /www/zendcore/htdocs/zphpNN の excel01.php  得意先マスターTOKUIMの締日と与信額に あたる部分を数値型ではなく、文字型での 出力に変えてみましょう。  項目名部分の寄せの方向を変えてみましょ う。 初期状態では縦横共に中央揃えです。 # 40
    40. 実習その2  対象のPHPスクリプト  /www/zendcore/htdocs/zphpNN の excel02.php  罫線の種類、色を変えてみましょう # 41
    41. PDFへの出力 IBM i 上でPDFファイルを作成しましょう。 TCPDFというライブラリを使用します。
    42. TCPDFとは?  PDFファイルを作成する手段の一つ。 他には。。? Zend_Pdf (Zend Framework) 残念ながらIBM i 上ではiconv関数の問題で 日本語不可  PHPExcel 実は内部でTCPDFを呼び出すため、PDFも 出力可能。ただし、日本語フォントを使う ためにパッチあてなどが必要 罫線の印刷に難あり # 44
    43. TCPDFの特徴  各種フォントに対応  日本語3種類のほか、ハングル、簡体中国語 、繁体中国語にも対応  サンプルが多数添付され、始めやすい  54種類あります  既にPHP5.3対応  頻繁に機能向上されています。 # 45
    44. 前提条件  php.ini の memory_limit を増やす  デフォルトの8MBでは足りないので、例えば 128MBなどに増やします。  memory_get_peak_usage でスクリプト内で のピーク時の使用量を調べられます。 # 46
    45. 入手と導入方法  入手  sourceforge.net/projects/tcpdf/ から 無償で入手可能  導入  解凍するとできるtcpdfフォルダを丸ごと 任意のパスに移動します。  include_path で設定されたパスで無くて もかまいません。 # 47
    46. 当実習での導入先  IBM i 側  /usr/local/Zend/Core/share/pear の PHPExcel/shared/PDF 上記以外の任意のパスでももちろんOKです。 PHPExcelと一緒に含まれるTCPDFライブラ リの内容を新しいVersionに置き換えました。  各端末側  プロジェクトビューで下記で参照できます。 isuc2009/PHPExcel/shared/PDF # 48
    47. PDFファイル作成フロー1  TCPDFインストール先の下記を読み込む。  config/lang/eng.php  tcpdf.php  $obj = new TCPDF(用紙方向, 単位, 用紙);  この間に内容作成 「PDFファイル作成フロー2」で説明  $obj->Output(“test.pdf”, 方法); # 49
    48. TCPDFインスタンス作成  $obj = new TCPDF(用紙方向, 単位, 用紙);  用紙方向 P (縦:デフォルト値)、L (横)  単位 mm ミリメートル:デフォルト値 pt(ポイント)、cm(センチ)、in(インチ)  用紙 デフォルト値は A4。他、下記などに対応 A0~A10、4A0, 2A0 B0~B10 # 50
    49. 出力関数  $obj->Output(ファイル名、方法)  方法  I(アイ) ブラウザに出力:デフォルト値 ファイル名はブラウザ上でファイル保存を 選んだときに表示されるデフォルトファイ ル名になる。 D ブラウザでダウンロード F ファイルとして出力 S PDF内容を文字列として返します。 ファイル名は無視されます # 51
    50. PDFファイル作成フロー2  $obj->setFont(フォント, スタイル, サイズ);  文字の設定。最初に設定  $obj->addPage();  ページ作成。各セルを書き出す前に必要。  $obj->Cell(セル幅、セル高さ、テキスト、罫線 、移動、寄せ方向);  $obj->Ln();  改行。一行分書き終わるたびに必要。 # 52
    51. フォント設定  $obj->setFont(フォント, スタイル, サイズ);  日本語用フォントとして下記が使えます。 kozminproregular (小塚明朝Pro M) kozgopromedium (小塚ゴシックPro M) arialunicid0 (Arial Uni CID0)  スタイル 空文字(標準:デフォルト値) B(ボールド)、I(イタリック) U(下線)、D(取り消し) # 53
    52. セル書き出し  $obj->Cell(セル幅、セル高さ、出力内容、   境界線、出力後の移動方向、寄せ方向);  境界線 0(境界無し:デフォルト値)、1(有り) またはT(上)、B(下)、L(左)、R( 右)を組み合わせて指定。 例)'LR' 左右の線有り。上下は無し  移動方向 0((日本語や英語など)右に移動)、1( 次の行)、2(下のセル) # 54
    53. セル書き出し  $obj->Cell(セル幅、セル高さ、出力内容、   境界線、移動方向、寄せ方向);  寄せ方向 L または空文字(左:デフォルト値) R(右) C(中央揃え) J(両端揃え) # 55
    54. 実習  対象のPHPスクリプト  /www/zendcore/htdocs/zphpNN の pdf01.php  出力方法を変えてみましょう。  項目名部分の寄せの方向を変えてみましょ う。 # 56
    55. 発展 今回のハンズオンからさらに深く学びたい方の ために
    56. 他のDB2接続方法1  ODBC関数  関数名の先頭をodbc_に置換したような記 述です。例:db80.php  注意点  データ更新を行うには下記のいずれかが必 要です ライブラリを SQL の CREATE COLLECTION で作成 ライブラリにジャーナルを設定 # 58
    57. 他のDB2接続方法2  i5関数  全件データ取得例です。 この場合、DB2関数やODBC関数と異な り、SQLが登場しません。 例:db81.php # 59
    58. トランザクション制御  db2_connectの第4引数の配列に下記を指定  'autocommit' => DB2_AUTOCOMMIT_OFF  さらに、下記のいずれかが必要です。  i5_commit値も上記と一緒に指定  php.iniでibm_db2.i5_allow_commit = 1 を指 定  SQL の SET TRANSACTION ISOLATION LEVEL READ COMMITTED を実行 # 60
    59. PHPExcelでPDF出力  PHPExcel/Shared/PDF の置換を推奨  PHPExcel Ver1.7.0 内蔵の TCPDFは Ver4.6.022と、やや古いです。  フォント設定箇所を変更  PHPExcel/Writer/PDF.php の132行目の setFont('freesans')を下記のいずれかに変更 kozminproregular (小塚明朝Pro M) kozgopromedium (小塚ゴシックPro M) arialunicid0 (Arial Uni CID0) # 61
    60. PHPExcelでPDF出力する場合  中国語や韓国語を出力したい場合  hysmyeongjostdmedium ハングル  msungstdlight 繁体中国語  stsongstdlight 簡体中国語  出力形式を Excel5からPDFに変更  PHPExcel_IOFactory::createWriter($obj, 'PDF'); # 62
    61. 参考文献とURL  PHPExcelについて  Excel+PHP Webデータベース開発(西沢 直木著 毎日コミュニケーションズ刊)  TCPDFについて  www.monzen.org/Refdoc/tcpdf/  個人による、とても詳しい解説で、マニュ アル日本語訳もあります。 # 63
    62. お疲れ様でした! ゼンド・ジャパン株式会社 http://www.zend.co.jp/ 吉田 悟  yoshida@zend.co.jp 〒150-0041 渋谷区神南1-15-8 兼仲ビル2F TEL 03-6275-2002 FAX 03-3462-1365
    SlideShare Zeitgeist 2009

    + Satoru YoshidaSatoru Yoshida Nominate

    custom

    320 views, 0 favs, 0 embeds more stats

    PHP 実行環境 Zend Core for i5/OS を IBM i と more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 320
      • 320 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 0
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories