1行で書けるPHPファイルを直接実行させない方法

Webサーバーのウェブルート以下に、クラスファイルやincludeされることが前提となっているライブラリファイルのような直接実行されることを意図していないPHPファイルを置いてしまった場合、意図していなくてもブラウザから直接URLを入力された場合はPHPファイルが実行されてしまいます。

Read more

PHP5 配列をメソッドチェインで再帰処理するクラス

CakePHPを使っていると、データ構造が多階層の配列で管理されていることが多く、一括で処理をしたい場合などに度々再帰処理を実装することがあります。
通常であれば、array_map系の関数を使って再帰的に処理を記述することになりますが、

  • 毎回array_mapを使うのは面倒だし、もっと簡潔に記述したい
  • 個別のグローバル関数・各メソッドを連続して簡単に利用したい

という理由で、以下のように記述できるクラスを作成しました。
(クラスのソースコードは最後に記述しています)

PHP:
  1. // $arrの全ての要素にtrimと半角カナ変換を実施
  2. ArrayMap::create($arr)->trim()->mb_convert_kana('KV');
  3.  
  4. // $arrの全ての要素に「先頭:」という文字を追加
  5. ArrayMap::create($arr)->sprintf('先頭:%s');

※PHP5のマジックメソッドを使って実現していますので、PHP4系では使えません
※通常の手続き型で実装する場合は「array_walk_recursive」「array_map recursive」などで検索するといろいろ参考情報があります。

Read more

munin mysql_isam_space_ の division by zero エラー対策

CentOSに5.xにrpmforgeからmuninをインストールしましたが、mysql_isam_space_がエラーを吐きます。


Illegal division by zero at /etc/munin/plugins/mysql_isam_space_xxxx line 220, line 1.

で、その対策パッチ

  1. mysqlshowの結果をパースしているあたりが怪しいので修正。
  2. Max_data_lengthが0の場合の対策。

これで、munin-node-configure --suggest で、ずらずら候補が表示されればうまくいきます。
後は、munin-node-configure --suggest --shell | /bin/sh でリンクを張って、munin-nodeをreloadすればOKです。

うまくいかないときは、statefile (/var/lib/munin/plugin-state/plugin-mysql_isam_space.state)のパーミッションと更新時刻(更新時刻が1時間以内だと、処理をスキップするようです)が怪しいので、見直してください。

で、とりあえずグラフ化されるようになったのですが、なんか値が0.00ばっかりで、見ててもつまらないです。
InnoDBだと、Max_data_lengthの値が0なので、意味がないですし。。
設定ファイルでabsoluteを1にすれば、Data_lengthの値がそのまま出るので、こちらの方が実用的かもしれません。

Symfony TemplatingをCakePHPで使ってみる

CakePHPでSymfony Templatingを使ってみる

前回はSymfony Templatingを単独で利用したり、Smartyと連動させてみました。
次に何をしようかと思い、現在のsymfonyで組み込んでみようかと思いましたが、すでにOpenPNEでおなじみの手嶋屋の海老原さんがブログで実践されていました。
というわけで、あのCakePHPのViewとしてSymfony Templatingを使ってみたらどうだろうと思い試してみました。

ただし、CakePHPのViewを完全に置き換えているわけではありません。
とりあえずCakePHPのViewとして動作させることができたという感じです。

Read more

Symfony Templatingを使ってみませんか?

Symfony Componentsというのをご存知でしょうか?その名前のとおり、あのPHPのフレームワークで有名なsymfonyに関係するコンポーネントなのですが、symfonyの次期バージョンであるSymfony2で利用されるコアとなる各コンポーネントがライブラリとして公開されています。

近頃、その1つでテンプレート機能部分である Symfony Templatingが公開されましたので、さっそく使ってみました。軽量で柔軟性が高いのでsymfonyを使った事がある人も無い人も簡単に導入する事が可能だと感じました。

そこで、symfonyを使った事がある人も無い人も、「テンプレートエンジンといえばSmartyを使っているけど、PHPってテンプレートエンジンみたいなものだしPHPでテンプレートを書きたい。。」という方まで、ドキュメントとソースを読んで実際に使ってみた例を紹介したいと思います。

Read more

Gitで更新時にメールを送信する

社内のソースバージョン管理でgitも使ってみようということで、開発メンバーが利用できるようにgit環境を構築しています。

subversionで管理しているときは、commit時にcommitの概要をMLにメールを送信するようにしていました。メールが届いたから何かをするわけではありませんが、commit内容をわざわざ報告しなくてもMLで共有できるので便利です。

gitでも同様のことができまるようにしてみました。gitの場合は複数のリポジトリが存在しますが、情報が欲しい情報のはみんなが共有しているリポジトリの更新内容です。なので、共有リポジトリに対してのみ設定を行います。

Read more

DoctrineのfindBy,findOneByにorder byを追加する方法

symfonyではDoctrineが実質的な標準ORMになりました。
まだまだ使いきれていないのですが、機能が豊富にあるため知っているのと知らないのではかなりの差がでてきます。

今回は知っていると得するDoctrineの小ネタです。

Doctrineの特徴としてfindByとfindOneByメソッドがあります。
これらはマジックメソッドで実装されており、カラム名をつけて呼び出すことでより通常のDQLの記述よりも短くすっきりと書くことができます。

Read more

CakePHP IRC集会に参加しました

昨日cakephperさん主催のCakePHP第三回IRC集会に参加させて頂きました。

業務中だったこともあり、前半ほとんど発言できず、、途中開発環境の件では、みなさんの環境が立派すぎて「sakuraエディタです」とは言えませんでした。。
(社内の2名はEmacs派のようです)
結局、最後の1時間くらいでようやくご挨拶。このブログも取り上げて頂き有難うございました。

ウチの記事を知って頂いていた方もいらして、少しはCakePHP界に貢献できていることが実感できました。

IRCでも話に出ていましたが、CakePHPの素晴らしさはFWとしての機能も当然ありますが、
知識の共有が積極的に行われていることに尽きると思います。
本の執筆活動、フォーラムでのフォロー、勉強会やIRC集会、各自のブログ、etc・・
これらの活動をされている方々には本当に感謝しています。

弊社も少しずつですが、何らかで貢献していければと思っています。

CakePHP MySQLのバックアップ(mysqldump)を行うバッチ

CakePHP1.2からコマンドラインからCakeが起動できるようになりました。
この機能を使って、MySQLのバックアップを行う簡単なスクリプトを作成してみました。
データベースの接続には、/app/config/database.phpの接続情報を利用しています。

Read more

CakePHP 動的なウィジェットの作り方

CakePHPではコントローラーでの処理はビューを介してレイアウトのメインコンテンツ($content_for_layout)の部分に展開されます。
その際レイアウトに配置してあるメインコンテンツ以外の部分は基本的にはコントローラーから操作ができません。(たぶん)
一般的なサイトでは2段組みや3段組みのレイアウトを使うケースが多いと思いますが、メインコンテンツ領域以外もCakeを使って柔軟に制御する方法を検討します。
(出力されるHTMLの部品をウィジェットとします)

※今回の実装サンプルはこちらから確認できます。
※ソースコードはこちらからダウンロードできます。
※サンプルではメインコンテンツ側で指定されたカテゴリの情報をフッター部に表示しています。

Read more

Next Page →