Submit Search
Upload
PHPWordを使ってレポート自動生成
•
3 likes
•
6,466 views
ichikaway
Follow
複数のサーバからデータを収集し、グラフを作成してWordファイルを生成するまでの話。
Read less
Read more
Report
Share
Report
Share
1 of 33
Recommended
脆弱性もバグ、だからテストしよう DevSummiFukuoka
脆弱性もバグ、だからテストしよう DevSummiFukuoka
ichikaway
FARO REPORT Premium Sample
FARO REPORT Premium Sample
Miyu Mito
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
Building an SSO platform in PHP (Zend Webinar Edition)
Building an SSO platform in PHP (Zend Webinar Edition)
Ivo Jansch
forteeに脆弱性検査をかけてみた VAddy編
forteeに脆弱性検査をかけてみた VAddy編
ichikaway
Understanding Computer Architecture with NES Emulator
Understanding Computer Architecture with NES Emulator
ichikaway
VAddyの課金システムを Stripeに乗り換えた話
VAddyの課金システムを Stripeに乗り換えた話
ichikaway
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
ichikaway
Recommended
脆弱性もバグ、だからテストしよう DevSummiFukuoka
脆弱性もバグ、だからテストしよう DevSummiFukuoka
ichikaway
FARO REPORT Premium Sample
FARO REPORT Premium Sample
Miyu Mito
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
Building an SSO platform in PHP (Zend Webinar Edition)
Building an SSO platform in PHP (Zend Webinar Edition)
Ivo Jansch
forteeに脆弱性検査をかけてみた VAddy編
forteeに脆弱性検査をかけてみた VAddy編
ichikaway
Understanding Computer Architecture with NES Emulator
Understanding Computer Architecture with NES Emulator
ichikaway
VAddyの課金システムを Stripeに乗り換えた話
VAddyの課金システムを Stripeに乗り換えた話
ichikaway
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
ichikaway
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
ichikaway
現場で使える脆弱性検査サービス VAddy
現場で使える脆弱性検査サービス VAddy
ichikaway
OS入門 Fukuoka.php vol.18 LT資料
OS入門 Fukuoka.php vol.18 LT資料
ichikaway
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
ichikaway
VAaddyとは VAddyミートアップvol3_20160629
VAaddyとは VAddyミートアップvol3_20160629
ichikaway
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
ichikaway
Vulnerabilities are bugs, Let's test for them!
Vulnerabilities are bugs, Let's test for them!
ichikaway
脆弱性もバグ、だからテストしよう!
脆弱性もバグ、だからテストしよう!
ichikaway
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
ichikaway
継続的Webセキュリティテスト testing casual talks2
継続的Webセキュリティテスト testing casual talks2
ichikaway
Ctf2015 ichikawa Eizoku PM2.5 dial
Ctf2015 ichikawa Eizoku PM2.5 dial
ichikaway
VAddy - CI勉強会 fukuoka
VAddy - CI勉強会 fukuoka
ichikaway
Jenkinsを使った継続的セキュリティテスト
Jenkinsを使った継続的セキュリティテスト
ichikaway
継続的セキュリティテストVaddy説明資料
継続的セキュリティテストVaddy説明資料
ichikaway
VAddy at LL Diver LT
VAddy at LL Diver LT
ichikaway
phpcon kansai 20140628
phpcon kansai 20140628
ichikaway
福岡xTwilio twilio meetup
福岡xTwilio twilio meetup
ichikaway
Nginxを使ったオレオレCDNの構築
Nginxを使ったオレオレCDNの構築
ichikaway
phpcon2013 PHP x twilio
phpcon2013 PHP x twilio
ichikaway
fukuokaphp7 PHP x twilio
fukuokaphp7 PHP x twilio
ichikaway
More Related Content
More from ichikaway
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
ichikaway
現場で使える脆弱性検査サービス VAddy
現場で使える脆弱性検査サービス VAddy
ichikaway
OS入門 Fukuoka.php vol.18 LT資料
OS入門 Fukuoka.php vol.18 LT資料
ichikaway
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
ichikaway
VAaddyとは VAddyミートアップvol3_20160629
VAaddyとは VAddyミートアップvol3_20160629
ichikaway
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
ichikaway
Vulnerabilities are bugs, Let's test for them!
Vulnerabilities are bugs, Let's test for them!
ichikaway
脆弱性もバグ、だからテストしよう!
脆弱性もバグ、だからテストしよう!
ichikaway
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
ichikaway
継続的Webセキュリティテスト testing casual talks2
継続的Webセキュリティテスト testing casual talks2
ichikaway
Ctf2015 ichikawa Eizoku PM2.5 dial
Ctf2015 ichikawa Eizoku PM2.5 dial
ichikaway
VAddy - CI勉強会 fukuoka
VAddy - CI勉強会 fukuoka
ichikaway
Jenkinsを使った継続的セキュリティテスト
Jenkinsを使った継続的セキュリティテスト
ichikaway
継続的セキュリティテストVaddy説明資料
継続的セキュリティテストVaddy説明資料
ichikaway
VAddy at LL Diver LT
VAddy at LL Diver LT
ichikaway
phpcon kansai 20140628
phpcon kansai 20140628
ichikaway
福岡xTwilio twilio meetup
福岡xTwilio twilio meetup
ichikaway
Nginxを使ったオレオレCDNの構築
Nginxを使ったオレオレCDNの構築
ichikaway
phpcon2013 PHP x twilio
phpcon2013 PHP x twilio
ichikaway
fukuokaphp7 PHP x twilio
fukuokaphp7 PHP x twilio
ichikaway
More from ichikaway
(20)
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
現場で使える脆弱性検査サービス VAddy
現場で使える脆弱性検査サービス VAddy
OS入門 Fukuoka.php vol.18 LT資料
OS入門 Fukuoka.php vol.18 LT資料
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
VAaddyとは VAddyミートアップvol3_20160629
VAaddyとは VAddyミートアップvol3_20160629
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
Vulnerabilities are bugs, Let's test for them!
Vulnerabilities are bugs, Let's test for them!
脆弱性もバグ、だからテストしよう!
脆弱性もバグ、だからテストしよう!
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト testing casual talks2
継続的Webセキュリティテスト testing casual talks2
Ctf2015 ichikawa Eizoku PM2.5 dial
Ctf2015 ichikawa Eizoku PM2.5 dial
VAddy - CI勉強会 fukuoka
VAddy - CI勉強会 fukuoka
Jenkinsを使った継続的セキュリティテスト
Jenkinsを使った継続的セキュリティテスト
継続的セキュリティテストVaddy説明資料
継続的セキュリティテストVaddy説明資料
VAddy at LL Diver LT
VAddy at LL Diver LT
phpcon kansai 20140628
phpcon kansai 20140628
福岡xTwilio twilio meetup
福岡xTwilio twilio meetup
Nginxを使ったオレオレCDNの構築
Nginxを使ったオレオレCDNの構築
phpcon2013 PHP x twilio
phpcon2013 PHP x twilio
fukuokaphp7 PHP x twilio
fukuokaphp7 PHP x twilio
PHPWordを使ってレポート自動生成
1.
レポート自動生成 PHPでWordファイルを作る pChart, PHPWord, CakePHP, ZohoAPI 2014/2/13 株式会社エイゾク 市川
2.
• ビール系エンジニア • Twitter:
cakephper / ichikaway • Fukuoka.php
3.
現状 • 毎月の運用レポートを手動で生成 • Wordで作成、PDFにして提出 •
Wordの独自テンプレート利用 • サーバ管理画面から情報、画像取得
4.
問題点 • 1レポート作成に1∼2時間かかる • サーバからデータを収集する作業 •
エクセルでグラフ作成 • レポートが増えると人を増やさないと・・
5.
ゴール • 1レポート10分程度 • 90%以上を自動生成 •
内容確認、微調整、PDF出力のみ行う
6.
レポート サンプル ※実際のレポート内容とは異なります
7.
8.
9.
10.
11.
要件 • データ自動取得、ドキュメント自動生成 • 提出前に修正できること •
目次、ページ番号 • ヘッダ、フッタ • 画像(グラフなど)、表、見出し
12.
検討したこと • htmlでレンダリングし、PDF保存 • ブラウザの機能でPDF出力までいける •
Webアプリとして全て実装 • jsのチャート表示ライブラリ
13.
NG理由 • htmlでレンダリングし、PDF保存 • Webアプリの作り込みがどこまでか 見えない(急な微調整に対応できない) •
目次が作れない • 改ページができない
14.
今回のアプローチ • サーバサイドでWord(docx)ファイル生成 • 提出前に慣れたWordで微調整できる •
目次OK • docxファイルはphpwordライブラリ • チャート画像はpChartライブラリ • 生成スクリプトはCakeShellベース
15.
全体構成図 顧客用サーバ1 MongoDB 顧客用サーバ2 MongoDB 顧客用サーバ3 MongoDB Zoho CRM 顧客情報 サーバ名 レポート契約 ZohoAPI にて取得 SSHポート フォワード にてMongoDB に接続 HTTPSで サーバ負荷 グラフ画像を取得 レポート サーバ 全ての情報が った らレポート生成
16.
情報取得フェーズ
17.
ZohoCRM API /usr/bin/curl --cipher
rsa_rc4_128_sha -s "https://crm.zoho.com/crm/private/json/Potentials/ getSearchRecords?newFormat=1&scope=crmapi&fromIndex=1&toIndex =200 &authtoken=認証トークン &searchCondition=(レポート|=|有り) &selectColumns=(顧客名,サーバ名,IPアドレス、SSL)" http://www.zoho.com/crm/help/api/
18.
顧客用サーバへの接続 • SSHトンネルで各顧客サーバのMongoDB に接続(PHPのpecl Mongo) •
各サーバのFirewallの変更不要 • サーバ間はSSHで暗号化 • サーバが増えても設定変更が不要
19.
顧客サーバの接続 exec( ‘ssh -f -C
-N -L 5555:127.0.0.1:27017 顧客サーバIP > /dev/null’ ) /dev/nullにリダイレクトしないと処理が PHP側に戻ってこない この後に、localhost:5555にMongo clientで繋ぐ
20.
サーバ負荷グラフ取得 • HTTPSにて各顧客サーバの負荷グラフ (muninとかのグラフ)を取得 • new
HttpSocket(['ssl_verify_peer' => false]); SSL証明書のエラーを無視する 推奨しないが場合によって
21.
レポート生成 フェーズ
22.
チャート生成 • pChart 2.x •
http://www.pchart.net/ • チャートや図形が簡単に生成できる • 豊富なサンプルコード • http://wiki.pchart.net/ • 日本語フォントを自分でサーバに設置
23.
pChart例
24.
今回は棒グラフ生成
25.
Wordファイル生成 • PHPWord • https://phpword.codeplex.com/ •
最新版はgithub(日本語対応済み) • https://github.com/PHPOffice/PHPWord • APIドキュメント必須 • https://phpword.codeplex.com/downloads/get/ 138036
26.
PHPWord機能 • フォーマット、タイトル、目次 • 改行、改ページ •
画像、OLEオブジェクト挿入 • ヘッダ、フッタ • テーブル(表)作成 • テンプレート
27.
PHPWord問題点 ! • 目次にページ数が出ない • 一度Wordで読み込み、PDF出力すると出る •
テンプレート機能は文字置換のみ • かなり固定された形式しか使えない • 画像の拡大縮小すると画像が出なくなる • pChartやImageMagickで事前処理
28.
PHPWordの使い方 $PHPWord = new
PHPWord(); $section = $PHPWord->createSection(); ! $section->addText(‘株式会社テスト御中’); //文字挿入 $section->addPageBreak(); //改ページ createSection()で生成したオブジェクトを使って、 積み上げていく感じ
29.
PHPWordの使い方 $section->addTOC(); //目次生成 //章のタイトル生成(目次に反映される) $section->addTitle(‘はじめに’, 1);
$section->addTitle(‘レポートの目的’, 2); //小見出し
30.
PHPWordの使い方 //画像 $section->addImage(画像パス, ['align' =>
'center']); //テーブル $table = $section->>addTable(); $table->addRow(); $table->addCell()->addText('ドメイン名'); $table->addCell()->addText('eizoku.com');
31.
PHPWordの使い方 // Wordファイルの保存 $a = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); $a->save(filepath);
32.
まとめ 色々なツールを合わせて 目標を達成 pChat + PHPWordで大体 いける
33.
Thank you Yasushi Ichikawa @cakephper