Home > アーカイブ > 2006-08

2006-08

CakePHPでZendFrameworkを使う

この記事の所要時間: 128

CakePHPにはメールを送信するコンポーネントがありません。そこでZendFramework(以下、ZF)のZend_Mailを組み合わせてみました。

1.ZendFremeworkを設置

ZFをダウンロード・解凍し、library/以下を[app/vendors]に設置します。設置すると以下のような構成になります。

[app]
  + [vendors]
        + [Zend]
        + Zend.php

2.ZendFremework読み込み準備

ZFではクラスファイルを読み込む際にinclude_pathが通っている事を前提としています。このまま使用するとクラスファイルが読み込めずにエラーが発生するので、include_pathを設定するスクリプトを設置しておきます。

[app/vendors/zend_init.php]

<?php
ini_set('include_path', ini_get('include_path')
                                . PATH_SEPARATOR . dirname(__FILE__));
?>

3.controllerで使用する

まず2.で設置したスクリプトをvendor(zend_init)で読み込みます。あとは使用する各ファイルをvendor()で読めばOKです。

[app/controller/mail_controller.php]

<?php
vendor('zend_init'); // ZFを読む前に実行
vendor('Zend/Mail/Transport/Smtp');
vendor('Zend/Mail');

class MailController extends Controller {
  var $name = 'Mail';

  function send() {
    $encodeTo = 'ISO-2022-JP';
    $encodeFrom = 'UTF-8';

    mb_language('ja');
    $subject = 'テストメール';
    $subject = mb_convert_encoding($subject, $encodeTo, $encodeFrom);
    $subject = mb_encode_mimeheader($subject);
    $body = 'こんにちは。テストメールです。';
    $body = mb_convert_encoding($body, $encodeTo, $encodeFrom);

    $mail = new Zend_Mail($encodeTo);
    $mail->addHeader('Mime-Version', '1.0');
    $mail->setFrom('hoge@example.com', 'Admin');
    $mail->addTo('foo@example.com');
    $mail->setSubject($subject);
    $mail->setBodyText($body);

    // SMTP
    $mail->send(new Zend_Mail_Transport_Smtp('mail.example.com'));
  }
}
?>

>>

すべてがフレームワークでまかなえればそれに越したことはないのですが、足りない部分は他のライブラリなりを使って解決していけば良いと思います。CakePHPはそれを見越したような作りになっているのでわりときれいに取り込めますね。

# ちなみにZFを使うにはPHP5が必要です。ただPHP4でもPEARを使えば同じような事ができます。

「GTD ひたすらリストを書き出す会 in 関西」

この記事の所要時間: 19

前回のエントリでITmedia Biz.IDさんにトラックバックを送ったところ、取り上げて頂きました。

 Biz.IDが行ったGTD徹底研究会に言及されています。「次回のGTD徹底研究会は是非関西で」とのことですが、最近はプログラマーの方などが会議室などを借りて小規模な勉強会を開くことも珍しくないようです。ブロガー同士で「ひたすらリストを書き出す会」を開いてみてはいかがでしょうか? 場合によっては、Biz.ID編集部も応援します。

from: ITmedia Biz.ID:関西でGTD研究会!?

せっかくの機会なんで是非やりたいですね。ざっくりですが概要は以下のような感じでしょうか。(実際に人数が集まればその時にまた調整しましょう。)

  • 場所は大阪市内
  • 時期は9月中旬~10月末頃
  • 貸会議室等、集中できる環境に集まる。
  • リストを書き出していくのに3時間はいるかな
  • なので土日の午後が良いかも 
  • とにかく書き出す。
  • 雑談&意見交換会。
  • 講習会では無いです。全員が参加者です。相互扶助の精神で。

というわけで「ひたすらリストを書き出す会 in 関西」 に参加してみたいという方は、コメントなりトラックバックなりでご連絡下さいませ。

# とにかく集まって、書き出して、(できれば)GTDの情報交換をしようぐらいのノリなのでお気軽に。

CakePHP ViewHelperの使い方

この記事の所要時間: 256

ViewHelperはHTML表示や数値表現、日付判定などviewで役立つコンポーネントです。controllerで使用するHelperを指定しておくとフレームワークにてインスタンス化され、view内で使用できるようになります。ViewHelperには以下のようなものがあります。

    [cake/libs/view/helpers]

  • AjaxHelper [ajax.php]
  • CacheHelper [cache.php]
  • FormHelper [form.php]
  • HtmlHelper [html.php]
  • JavascriptHelper [javascript.php]
  • NumberHelper [number.php]
  • SessionHelper [session.php]
  • NumberHelper [number.php]
  • TextHelper [text.php]
  • TimeHelper [time.php]

デフォルトではHtmlHelperが有効になっています。

ViewHelperを指定する

controllerの$helpersに使用するHelper名を配列で渡します。Helper名はクラス名をそのまま指定するのではなく、HogeHelperのHogeの部分を小文字にして指定します。(HogeHelperならhoge)ちなみにこの指定方法はHelper以外でもCompenent、Modelなどでも使うで覚えておくとおいしいケーキが焼けます。:)

[app/controller/sample_controller.php]

< ?php
class SampleController extends Controller {
  // HtmlHelper,TimeHelper 
  var $helpers = array('html', 'time');
}
?>

ViewHelperを使用する

viewでは$hogeでHogeHelperインスタンスが使用できます。(HtmlHelperなら$html、TimeHelperなら$time)

[app/view/sample/index.thtml]

<!-- 日付判定:更新時間が1週間以内ならNew!!を表示 -->
<?php if (!$time->wasWithinLast("1 weeks", $sample['modified'])) { ?>
<strong>New!!</strong>
<?php } ?>

<!-- フォームタグ -->
<?php echo $html->formTag() ?>
<p>< ?php echo $html->submit('投 稿') ?></p>

>>

ViewHelperは自作する事もできます。

ViewHelperを作成する

自作ViewHelperは以下を満たすように作成します。

  • クラス名を[%Helper名% + Helper]にする
  • Helperクラスを継承する
  • ファイル名を[%helper名% + .php]にし、[app/views/helpers]に配置する。
    %helper名%はクラス名の%Helper名%を小文字に変換し、単語の区切りを[_]でつなげます。(FooBarHelperならfoo_bar)

[app/views/helpers/hello.php]

<?php
class HelloHelper extends Helper {
  function hello($name) {
    return $this->output(sprintf("Hello, %s", $name));
  }
}
?>

あとはcontrollerの$helpersに’hello’を加えれば、viewで$hello->hello()が使用できます。

>>

■参考サイト
http://manual.cakephp.org/chapter/helpers

PHP 5 Power Programming

  • 2006-08-29 (火)
  • PHP
この記事の所要時間: 045

PHP 5 Power Programming (Bruce Perens Open Source)

PHP 5 Power Programming」という書籍のPDF版が100万ダウンロードを突破したそうです。この本の出版社では他にも数冊がPDFで配布されています。(Bruce Perens’ Open Source Series

私は気に入った本ならPDF版が配布されていても書籍として購入したいタイプなのですが、やはり検索や持ち運びを考えるとPDF版もあると便利です。PDF版は無料で配布せずとも、書籍に添付したり、書籍購入者のみダウンロードできるといった仕組みを作るなりすれば良いと思うのですがいかがでしょうか。

ちなみに記事によるとPHP使用者は450万人(!)もいるそうです。

via Andi Gutmans’ Weblog: PHP 5 Power Programming passes 1 Million downloads!

GTD 全てを書き出したい

この記事の所要時間: 139

GTDを実践したいなと思いつつ、はじめの「頭の気になることを全て書き出す」で止まっています。なかなか数時間を他からの割り込みなしに確保するのは難しいですね。日頃一人で仕事している私なんかは環境的には恵まれている方だとは思うのですが、時間があるとついついやりたい事に手をつけてしまいます。

あとこれは後で考えれば良いと思うのですが、書き出して、分類して、週次レビューして、という流れをどのように行うか(ノートに書くのか、PCに記録するのか、Webに記録するのか、ツールは何を使うのか・・・)を考えてしまい中々進みません。
# まあ、これは「とにかくどんな方法でもいいからやる」という方向で良いんだとは思うのですが。

なので

 ただ少しでもこの数時間を気楽なものにするには、数人で集まって行ってみるといいのかもしれません。今回の研究会でも、「書くことがなくなってしまったけど、周りの人がたくさん書き出しているのを見てまた書き出すことができた」という方もいらっしゃいました。機会があればこの研究会も第2回を開催してみたいと思います(次回は休日に5時間ぐらいかけてやりたいですね……)。

from: ITmedia Biz.ID:GTD徹底研究会でわかったこと (1/3)

というのはとても良い方法だと思います。数人で一緒に時間・場所を取ってやれば、他の事はやれないでしょうし、邪魔が入る心配もありません。周りががんがん書いてる中、自分だけやめるのも何なんで、無理矢理絞り出してでも書く、というのが良いんでしょうね。

もんもんとしたものを絞り出してすっきりとしたいので、次回のGTD徹底研究会は是非関西で(笑)。

>>

追記(2006/09/01):「ひたすらリストを書き出す会 in 関西」をやってみようかと考えています。興味のある方は「ひたすらリストを書き出す会 in 関西」をどうぞ。一緒に頭の中を書き出してしまいませんか。:)

Google Apps for Your Domainベータ版を提供開始

この記事の所要時間: 056

Googleがまたまた新サービスを始めたようです。

from: グーグル、企業向けサービス「Google Apps for Your Domain」ベータを提供開始へ – CNET Japan

Googleがこの日発表するのは「Google Apps for Your Domain」というサービスのベータ版。このサービスには、2Gバイトのストレージ容量を利用できるGmail、Google Calendar、Google Talk、Page Creatorなどのアプリケーションが含まれる。

メールにIM、簡易グループウェア、Webサイトが自分のドメインで運用できるのは良いですね。(GoogleAnalyticsでアクセス解析もできるし)次はPage Creatorがホスティングサービスになって、任意のファイルがアップできて、PHPが動かせて、DBも使えて、SSHでログインとかできたらバッチリです。。。

これは既存のサービスの組み合わせですが、次から次へと新サービスを発表するGoogleのスピード感はわくわくします。スピード感、大事ですね。

まるごとPerl vol.1

この記事の所要時間: 123

まるごとPerlが出てますね。普段はPHPを主に扱っていて、Perlは以前少し触った程度なのですが、ノウハウは転用できるものが多いのでたまに参考にしています。はてなブックマーク、livedoor Readerの内部が紹介されているようなので購入してみました。

ざっと読んでみた感想は、はてなのnaoyaさんが書かれておられるように「濃い」です。確実にPerlをこれから始めようという人は眼中にありません(笑)。逆に他言語でWeb開発をしている人にはPerlを知らなくても大いに参考になります。特にこれからWeb2.0系サービスを構築したい人には必読の書と言っても良いかもしれません。

まるごとPHPもそれなりに濃かったですが、ここまでの濃さではなかったですね。本の作り方(ターゲット?)が異なるので違うのは当然なのですが、やはり事例にもとずいた情報がもっと欲しいかな、と思います。国内でPHPを使った中規模以上のシステムの構築事例をあまり見ないので、フレームワークなどの記事もやや説得力に欠ける印象があります。(Web2.0系だとGREE(Ethna)くらいでしょうか。)PHPでもフレームワークが盛り上がっていますので、これからもっとPHPを使った事例が見られるようになると嬉しいですね。

次はまるごとRubyでしょうか。。。

まるごとPerl! Vol.1
まるごとPerl! Vol.1

posted with amazlet on 06.08.28
小飼 弾 宮川 達彦 伊藤 直也 川合 孝典 水野 貴明
インプレスコミュニケーションズ (2006/08/24)

lighttpd+PHPでファイルダウンロード

  • 2006-08-26 (土)
  • PHP
この記事の所要時間: 318

ThinkPHPでlighttpd+PHPを使ったファイルダウンロードが紹介されていました。PHP側で特定のヘッダを付けておけば、lighttpdがファイルを出力してくれる、という内容です。

ファイルが大きい、サーバ( or クライアント)の帯域が細い等でダウンロードに時間がかかるとその間FastCGI-PHPが占有されることになります。この方法であればPHPはヘッダだけを出力すればスクリプト実行を終了できるので、ダウンロード完了を待たずに他のリクエストを処理できます。PHPは必要な箇所だけ処理して、あとはlighttpdに任せるというわけですね。
# 餅は餅屋の発想ですな。

方法は以下になります。

  1. lighttpdの設定ファイルにallow-x-send-fileを記述
  2. PHPでX-LIGHTTPD-send-fileヘッダを出力

1.lighttpdの設定ファイルにallow-x-send-fileを記述

fastcgi.server = ( ".php" =>
                        ( "localhost" =>
                          ( "socket" => "/tmp/php-fastcgi.socket",
                            "bin-path" => "/home/shin/php5/bin/php-fcgi",
                            "broken-scriptfilename" => "enable",
                            "allow-x-send-file" => "enable"
                          )
                        )
                      )

2.PHPでX-LIGHTTPD-send-fileヘッダを出力

PHPではX-LIGHTTPD-send-fileヘッダ(lighttpd1.5まではX-Sendfileヘッダ)で出力するファイルパスを出力します。この時にContent-LengthやContent-Dispositionヘッダなど他のヘッダを出力しても問題無いです。

<?php
$path = "/path/to/file";
header("X-LIGHTTPD-send-file: " . $path);
header("Content-Disposition: attachment; filename=\"" . basename($path) . '"' );
header("Content-Length: " . filesize($path));
?>

ちなみに上記方法とPHPでファイルを出力させる方法を試してみたところ明らかに前者の方がPHPの負荷が小さかったです。(前者はヘッダを出力するだけなので当たり前ですが)

ただlighttpdはディスク上のファイルを出力するだけなので、ダウンロードデータをPHPで動的に生成する場合はデータを一度ディスクに書き込む必要がありますね。

これはPHPじゃなくてもfastcgi経由で起動するものならPerlでもRubyでもPtyhonでもいけるでしょう。

>>

■参考サイト
ThinkPHP
X-Sendfile fro lighty’s life
HowToFightDeepLinking – lighttpd – Trac

>>

テスト用にlighttpdをインストールした時につまった箇所をメモ。(CentOS4.2)

  • pcre-develをインストールしておく
  • fastcgi+PHPを使う時は–enable-fastcgiでfastcgi対応のphpをインストールしておく。(php -v で(cgi-fcgi)が出ればOK)
  • /usr/local/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.confで動作確認

天才少年ライダー・中上貴晶君の挑戦

この記事の所要時間: 026

FNNがこれまで放送した中上君のVTRをWebで公開しています。これまで見れなかった回もあったので有り難いです。インターネットって便利ですね。(笑)

MotoGPは民放で取り上げられる事はほとんど無いので嬉しいです。中上君の活躍も楽しみですが、これを機にMotoGPがもうちょっとメジャーになれば良いかなと思います。

# 自宅にプーチからtelがあったのは驚きだが。(笑)

>>

天才少年レーサーの挑戦

PHP5.1.6リリース

  • 2006-08-25 (金)
  • PHP
この記事の所要時間: 018

先日リリースされたPHP5.1.5に一部適用されていなかった修正分(64bitシステムでのmemory_limit修正)があったようで、そちらを含んだものがリリースされています。

http://www.php.net/

# まあありがちなミスかと。

PHPは最近なんだか慌ただしいですね。

Home > アーカイブ > 2006-08

検索
フィード
メタ情報

Return to page top