カテゴリー別アーカイブ: PHP

Lumenで簡単なAPI作ってみた

lumen-test

yterajima/lumen-test

LumenLaravel 系統の小さなフレームワークとして開発されているものらしい。routes.php の書き方を見る限りでは SilexSlim と同じようなものに見えます。

ちょうど Laravel5 を使った案件に対応しているタイミングだったので少し気になって動かしてみました。

続きを読む

PHPで送ったレスポンスヘッダを確認する -headers_list()-

先日あるPHP案件で本来送られるヘッダとは違うヘッダが送出されているらしい事案に遭遇しました。開発環境の問題で生のヘッダをそのまま確認することができない状態で、どうしたものかと。

「PHPさんなら何か関数用意してくれてるはず!!」と思い探してみると、案の定ありました。

PHP: headers_list – Manual

この関数を使うと、送り出した&送り出す予定のヘッダを配列で取得することができるので、その内容を確認することができました。単純にprint_r()やvar_dump()でプリントデバッグして確認しました。

<?php
ptint_r(headers_list());

さすがはPHPさんや!!!!

お正月休み3日目: 定形業務の時間短縮を目論む

お正月休み3日目ですが、本日からは一部担当している案件の処理が始まります。

e2esound.comでは開発以外にも地元地域のwebサイトやECサイトの運用・運営のお手伝いをさせていただいています。なかなか、地域的に人を入れて〜とか予算的に誰か追加して作業を進めるというのは難しいご時世です。

しかし、それでも作業はしなければなりません。そこで可能な限り作業時間の短縮を図っていきたいところ。今日は某案件の大量のファイル処理の見直しを行いました。

状況

月に1度アクセスや売上のデータを取りまとめる必要があります。全ファイル総数で150程度。それぞれのファイルがあまり適当ではない形で出力されてくるので、そのファイルを適当な名前に変換し特定のディレクトリに保存。さらにそこから中身を開いてExcelにまとめ直す作業もあります。

このファイル名の変更がかなりの曲者で、全部手作業でやると結構な時間がかかり、ミスも頻発します。さらにExcelへのデータの転写も非常に面倒なわけで。

ということで、すべて段階的に作業方法を切ってプログラムで対応させることにしました。

対応

  1. ファイル名の変換
  2. 不足ファイルの有無を目視チェック(集計タイミングによって条件が異なり自動化できない)
  3. ファイル名をディレクトリへ移動
  4. 集計用コマンドを用い新しいCSVを発行
  5. 発行したCSVをExcelで開いてコピペ

この程度の区切りで作業方法を変更し、それぞれコマンドを作成しました。動いているシステムのや将来的な作業者の環境を考えPHPで書いています。

結果

5時間程度の作業が1.5h以下に短縮されました。

今年は定形業務のうち、より簡素化できるものの見直しや単純化、さらにはプログラムで対応できるものはどんどんやっていこうと思います。短縮した時間で新しいことを始めたい。

あー○えむえす!!あー○えむえす!!

e2esound.netにCodeIgniter,seezoo用のblogを作りました

掲題のとおり。http://e2esound.net/

CodeIgniterやseezooネタをお気軽な閾値で、軽々しくblogに上げる、それだけのサイトです。

サーバーはさくらVPS+Ubuntu

今回はサーバーにさくらVPS512を採用しています。実は、basic認証下で他のCMSパッケージやアプリのテストをしたりと、開発用に作ったんですが、ついでにサイトも作ってみました。

久しぶりのUbuntuでしたが、相変わらずお手軽に使えて便利です。ufwには感動しますね。

構築には約2日かかりました。主に初めて入れるRubyでハマり、redmineのgem周りでハマっていました。redmine難しいですね。。。その他については、昔いじっていたことがあるので比較的楽にできました。(メールの設定忘れてたけど)

このblogとの関連

これから、こちらのblogにはその他技術的なことやRuby周りのことだったり、CodeIgniterとseezooを除いた部分を扱っていこうと思います。話題が無くなりそうだったら、また何か考えます。

とり急ぎ、seezooにRSS/Atom配信機能を付けたので、ご興味のある方はRSSリーダーへ登録してみてください。

RSS2.0:http://e2esound.net/blog/feed

Atom:http://e2esound.net/blog/feed/atom

CodeIgniterを試しに使ってもらう手っ取り早い1つの方法(PHP Advent Calendar jp 2010 Day 4)

PHP Advent Calendar 3日目です。

cakePHPやSymfonyは独立してAdvent CalendarやってるのでCodeIgniter使いの自分としてはちょっと淋しい訳で。そこで、前2日の内容がPHPネイティブな内容ではありましたが、1人でもユーザーを増やすべく、無理やりCodeIgniterネタをねじ込んでみようと思います。

タイトルの通り、できるだけ手っ取り早くCodeIgniterを使ってみます。CodeIgniter使ったことがないPHPerは週末中にこの内容で試しに使ってみるとイイと思うよ!!

CloudIgniterの準備

CodeIgniterの設置は非常に簡単です。しかし、簡単であっても初めての人には面倒なものです。そこでホスティングサービスの無料プランを使ってみます。どれだけ手っ取り早くCodeIgniterを使って貰えるかが今回の肝な訳で。

CloudIgniter : http://www.getcloudigniter.com/

CloudIgniterは、CodeIgniter専用のホスティングサービスです。無料プランでもFTPはもちろん、SSHも使えます。登録も簡単に進みますので注意が必要なところだけ説明しておきます。

使用するプランはMistです。Mistプランの場合、独自ドメインは使えず、hoge.getcloudigniter.comのサブドメインのhoge部分が登録時に指定できます。User NameやPassword登録画面の一番下の項目、”Primary Domain Name”がこれにあたります。

以下の画面まで到達すれば準備は完了です。この時点でCodeIgniter 1.7.2インストールされ、各種設定が自動で行われます。私は屋号(e2esound)をサブドメインにしてみました。

“manage”をクリックするとサーバー情報やSSH、FTPの情報が確認できます。

設定したURLに接続すると、”Welcome to CloudIgniter!”のページが表示されます。

Hello, World!

早速、Hello, World!してみます。

/domains/hoge.getcloudigniter.com/application以下の各ディレクトリにファイルを置きます。主に使うのはこんなところ。

  • controllers
  • models
  • views
  • helpers (自作の関数置くところ)
  • libraries (自作のクラス置くところ)

まずは、Controllerから。controllers/hello.phpで用意します。

Controller、Model共通のルールとして、気をつけなければならないのは2点。

  • ファイル名とクラス名は同一
  • クラス名の最初の1文字目は必ず大文字

</p>

<p>&lt;?php<br />
 class Hello extends Controller<br />
 {<br />
 function __construct()<br />
 {<br />
 parent::Controller();<br />
 }</p>

<p>function index()<br />
 {<br />
 // viewに渡すデータは連想配列で<br />
 $data['title']     = "CloudIgniterでHello, World!";<br />
 $data['hello']     = "Hello, World!";</p>

<p>// viewを呼んで値を渡す<br />
 $this-&gt;load-&gt;view('hello_view', $data);<br />
 }<br />
 }</p>

<p>/* End of file hello.php */<br />
 /* Location: ./application/controllers/hello.php */</p>

<p>

Controllerで”Hello, World!”をechoさせても良いですが、味気ないのでViewの呼び出しをしてみます。

Views/hello.phpとして作成します。
View自体の内容はhtmlで、Controllerで渡した連想配列の添え字を変数としてechoすれば出力されます。

</p>

<p>&lt;html&gt;<br />
 &lt;head&gt;<br />
 &lt;title&gt;&lt;?php echo $title;?&gt;&lt;/title&gt;<br />
 &lt;/head&gt;<br />
 &lt;body&gt;<br />
 &lt;h1&gt;&lt;?php echo $hello;?&gt;&lt;/h1&gt;<br />
 &lt;/body&gt;<br />
 &lt;/html&gt;</p>

<p>

ここまでの手順を踏むと、http://hoge.getcloudigniter.com/helloにアクセスするとHello, World!が表示されます。

Modelも使ってみたい

Hello, World!したからいいじゃん!と私の中の怠惰なゴーストが囁きますが、ここまで来たらModelも使ってみたい!でもDBで云々すると誰も読まないはず。。。なので、Modelに無理矢理機能を1つ実装して使ってみます。

Modelは、models/sample_model.phpとして作成します。特に意味も無くunixtimeを呼んでみることに。

</p>

<p>&lt;?php<br />
 class Sample_model extends Model<br />
 {<br />
 function __construct()<br />
 {<br />
 parent::Model();<br />
 }</p>

<p>function unixtime()<br />
 {<br />
 return time();<br />
 }<br />
 }<br />
 /* End of file sample_model.php */<br />
 /* Location: ./application/models/sample_model.php */</p>

<p>

作ったModelをControllerから呼び出して使ってみます。

</p>

<p>&lt;?php<br />
 class Hello extends Controller<br />
 {<br />
 function __construct()<br />
 {<br />
 parent::Controller();<br />
 }</p>

<p>function index()<br />
 {<br />
 // modelを呼び出す<br />
 $this-&gt;load-&gt;model('sample_model');<br />
 // 呼び出したmodelはmodel名を使ってメソッドチェーン<br />
 $data['unixtime']  = $this-&gt;sample_model-&gt;unixtime();</p>

<p>// viewに渡すデータは連想配列で<br />
 $data['title']     = "CloudIgniterでHello, World!";<br />
 $data['hello']     = "Hello, World!";<br />
 $data['time_msg']  = 'UNIXTIME : ';</p>

<p>// viewを呼んで値を渡す<br />
 $this-&gt;load-&gt;view('hello_view', $data);<br />
 }<br />
 }</p>

<p>/* End of file hello.php */<br />
 /* Location: ./application/controllers/hello.php */</p>

<p>

表示項目が増えるのでviewも少しいじります。

</p>

<p>&lt;html&gt;<br />
 &lt;head&gt;<br />
 &lt;title&gt;&lt;?php echo $title;?&gt;&lt;/title&gt;<br />
 &lt;/head&gt;<br />
 &lt;body&gt;<br />
 &lt;h1&gt;&lt;?php echo $hello;?&gt;&lt;/h1&gt;<br />
 &lt;h2&gt;&lt;?php echo $time_msg . $unixtime;?&gt;&lt;/h2&gt;<br />
 &lt;/body&gt;<br />
 &lt;/html&gt;</p>

<p>

ページをリロードすると、はい、今そこのあなた、あなたCodeIgniterのMVC使えたよ!

その他の機能詳細、ライブラリ/ヘルパーの使い方、作り方等々の情報は、サンプルも含めて

CodeIgniter ユーザガイド 日本語版 Version 1.7.2

に全部載ってます。量も少ないので気になった人は読んでみて!使ってみて!

まとめ

  • Controller、Modelのファイル名、クラス名には注意が必要。
    • ファイル名とクラス名は同一
    • クラス名の最初の1文字目は必ず大文字
  • ControllerからViewを呼ぶ:$this->load->view(‘file_name’, $data);
  • Controllerで渡した配列は、添え字を変数にするとechoできる
  • ControllerからModelを呼ぶ:$this->load->model(‘file_name’);
  • Modelは呼び出してからメソッドチェーンで使う
  • [重要]CodeIgniter Con 2011, Tokyo Japanの開催は2/19(土)、スピーカー、LT参加者も募集中
  • CodeIgniter 2.0がもう少しで、、、

最後に

という訳で初めてのAdvent Calendar、書いてみました。簡単に使えるフレームワークなので是非使ってみて欲しいです。1度MVCフレームワークを使ったことのある方なら3日もあれば使いこなせるはずです。

明日はredsnowさんが当番です。よろしくお願いしまーす。

おまけ

vim用の辞書ファイル作ってます。
https://github.com/e2esoundcom/CodeIgniter/tree/master/dict/

USBフラッシュメモリで高速Webサーバーnginx+PHP5.3.3+CodeIgniter2.0

PHPカンファレンスのLTの中で、nginx(エンジンエックス)という軽量・高速なWebサーバーがあることを知りました。

本        家:http://nginx.org/
日本語wiki:http://wiki.nginx.org/NginxJa

Webサーバーというと、これまでApacheしか使ったことがありませんでしたが、試しに使ってみることに。軽量・高速ということはローカルで開発をする場合には重宝するかなぁと期待。とりあえず余っているUSBフラッシュメモリで試してみました。

続きを読む

cURLの挙動について調査 –file_get_contents()との比較-

ある案件で調査している時に、サンプルのコードの中でcURLが使用されていました。ほぼコピペでしか使ったことが無かったので、試しにコードを書いて、ついでにfile_get_contents()との比較をしてみたした。

サンプル1:cURLでwebサイトのhtmlを取得

元のコード:PHP の cURL モジュールを使用して example.com のホームページを取得する

元コードを実行すると、アクセス時のヘッダーも取得しているので削除。ベンチマーク用にmicrotimeを仕込んだり、メモリ使用量出したり、10回試行して平均タイムを出したり。

実行するとHTMLをそのままファイルに取得します。 続きを読む

codeigniter class diagram v1.7.2

これしっかり見ようと思っていて、ずっと忘れていて、ふと思い出したのでメモ。

http://blog.shopigniter.com/wp-content/uploads/2010/06/inclued.ci-1.7.2-300×52.png

リンク先の画像は、CodeIgniterでどのようにファイルが読み込まれrequiredしているかをまとめている画像です。こちらの画像はこのサイト。

ShopIgniter:http://blog.shopigniter.com/

時間がある時に読みたいですね。

CloudIgniter:CodeIgniterホスティングサービス(Free有)

昨日のことです。CloudIgniterというサービスを偶然見つけました。

外注先の昼休み、私はお昼を食べて携帯電話でTwitterをしておりました。偶然見つけたこのpostです。

Super CloudIgniter Ninja Secret…. We have a free heroku-style hosting plan. Does your host have that?less than a minute ago via Twitter for iPhone


CodeIgniterのheroku的サービスを始めようかと思っている?だって!!!!!

herokuとは、Rubyでお馴染みのRailsのお話ですね。先日お邪魔したMitaka.rbjishihaさんがLTをしていました。
その機能の概要は、rails専用のホスティングサービスであり、gitにcommitするだけでその変更が反映されるというもの!これは!!

「CodeIgniter始まったな。」  「ああ。」
続きを読む

[修正]CodeIgniterで$system_folderをサクッと取得する方法

CodeIgniterのドキュメントルート以下にあるindex.phpには、$system_folderが定義されています。デフォルトでは「system」として設定されています。

しかし、セキュリティ上の観点からこのファイル名を変更する場合があります。CodeIgniterで作成したWebアプリの場合、後に$system_folderの値が変更になる可能性が否定しきれません。変更が必要となってしまいます。(無いと思いたいけれど)

そこで、この$system_folderに設定される値を取得する方法。サクッと。

続きを読む