Mac OS X+PHPでオールインワン環境

堪能編 ネイティブMacアプリをPHPで操作しよう

繁田 卓二
株式会社 qnote

2008/6/29

PHPからファイルやフォルダを開く

 PHPからMac OS XのAquaインターフェイスを扱うことはできませんが、コマンドを介して特定のディレクトリをFinderでオープンすることは可能です。

 Mac OS Xではopenコマンドを使用しFinderでディレクトリを開いたり、また、指定したファイルをTextEditorで開くことができます。

 openコマンドは、ファイルやフォルダをダブルクリックした際に実行されるデフォルトアプリケーションでのファイルオープン処理を実行しますので、アプリケーション名を指定しなくても拡張子に関連付けられたアプリケーションが自動で起動します。

●Finderで/Usersフォルダを開く
$ open /Users
●拡張子.txtに関連付けられたアプリケーションでtest.txtファイルを開く
$ open /Users/shigeta/test.txt
●拡張子に関係なくTextEditor.appでファイルを開く
$ open -t /var/log/mail.log
●iTunesを起動する
$ oepn -a iTunes

 サーバサイド上でこういった処理はあまり意味を成しませんが、クライアントサイドであれば利用価値は大きいです。では、先ほどのエラーハンドラと組み合わせ、エラーが発生したファイルのディレクトリをFinderで開き、ファイルをテキストエディタで開くエラーハンドラを作成してみましょう。前項と同じくexec()関数で外部コマンドとして実行します。

●OpenErrorHandler.php
<?php

/**
 * ファイルオープンエラーハンドラ
 */
function open_error_handler($level, $msg, $file, $line)
{
    if ($level !== E_STRICT && $level !== E_NOTICE) {
        $cmd = sprintf('open %s',
                       escapeshellarg(dirname($file)));
        exec($cmd);// (1)エラーの発生したフォルダをオープン
        
        $cmd = sprintf('open -t %s',
                       escapeshellarg($file));
        exec($cmd);// (2)エラーの発生したファイルをオープン
    }
}
// エラーハンドラとして登録
set_error_handler('open_error_handler');

?>

 open_error_handler()関数では、PHPのエラー機構からファイルパスと行番号が引数で渡されますので、(1)ファイルパスからディレクトリパスを取得し、openコマンドに渡してFinderでフォルダを開く、(2)ファイルパスをopen -tコマンドで渡して、テキストエディタでエラーの発生したファイルを開くという2つのコマンドを実行しています。

Growlを使ってPHPからデスクトップにメッセージ通知

 次は、もう少しMac+PHPらしいエラー通知を実装してみましょう。Macユーザーの多くがインストールしているといわれるGrowlをPHPから操作してみます。

Growl

 Growlは、対応するアプリケーションからの通知メッセージを受け取り、画面上の通知領域にそのメッセージを表示するアプリケーションです。GrowlにはCocoaやCarbon環境向けのAPIが提供されており、それらを経由してさまざまなアプリケーションからのメッセージ通知ができます。

 例えば、Mail.appが電子メールを受信したタイミングで通知領域にメッセージの要約を表示したり、Safariがダウンロードを完了したタイミングで通知したりといった処理によく使われます。Growlの通知内容は画面上に表示され、数秒でフェードアウトしますので、ログや電子メールのような恒久的に残るメッセージではなく、瞬間的な告知やデバッグ時のエラーのような一時的なメッセージの通知に適しています。

●Safariのダウンロード完了通知
Safariのダウンロード完了通知

 Growlは、Objective-CやCの実装で通知を送るだけでなく、ソケット通信でUDPポート経由でもメッセージを受信できます。PHPでは当然Objective-Cの実装手段がないため、ソケット通信でメッセージを送出することになります。

 Growlのソケット通信処理は、PEARのライブラリにパッケージがあるため、今回はこれを使用します。以下のpearコマンドでNet_Growlライブラリをインストールします。

$ sudo pear install net_growl-beta
downloading Net_Growl-0.7.0.tgz ...
Starting to download Net_Growl-0.7.0.tgz (5,176 bytes)
.....done: 5,176 bytes
install ok: channel://pear.php.net/Net_Growl-0.7.0

 pear installでパッケージがどこにインストールされたかを知るためには、以下のコマンドを実行します。

$ sudo pear config-show system | grep 'php_dir'
PEAR directory php_dir /usr/local/php-5.2.x/lib/php

 PEARパッケージはこのインストールディレクトリがインクルードパスに設定されていることが前提ですので、設定ファイルなどで適切に設定しておきましょう。

include_path = ".:/usr/local/php-5.2.x/lib/php"

 最後に以下のエラーハンドラファイルを任意の場所に配置し、auto_prepend_fileに追加すれば完了です。

●GrowlErrorHandler.php
<?php

require_once 'Net/Growl.php';

/**
 * Growl通知エラーハンドラ
 */
function growl_error_handler($level, $msg, $file, $line)
{
    switch ($level) {
    case E_STRICT:
        return;
    case E_WARNING:
        $title = 'PHP Warning';
        break;
    case E_NOTICE:
        $title = 'PHP Info';
        break;
    default:
        $title = 'PHP Exception';
        break;
    }

    $app = new Net_Growl_Application('PHP', array('PHP Error'));
    $growl = new Net_Growl($app);
    $growl->notify(
        'PHP Error',
        $title,
        sprintf("%s: %s\n\n%s", basename($file), $line, $msg)
    );
}
// エラーハンドラとして登録
set_error_handler('growl_error_handler');

?>
●Growlエラーハンドラ
Growlエラーハンドラ

 エラーが発生すると図のようなメッセージがフワっと表示されて数秒で消えます。HTML中のエラーとは違い、表示が乱れたり、HTML要素に隠れてエラーを見逃したりということがありません。Apacheモジュール上でも使用できるのでWebアプリケーションの開発やデバッグ時に使ってみてはいかがでしょうか。

 今回の内容は、実処理を外部のプログラムに任せ、PHPはあくまでもそれを呼び出しているに過ぎません。当然、ほかの言語でも可能な処理です。しかし、多くのPHPプログラマにとっては、これまでWebアプリケーション開発のために培ってきたPHPの知識を、クライアントアプリケーションの開発に生かせるということは、大きなメリットになります。また、サーバサイドアプリケーション開発のための補助的ツールとしてPHPを再活用できれば一石二鳥となるでしょう。

prev
3/3
 

Index
ネイティブMacアプリをPHPで操作しよう
  Page1
クライアントサイド言語としてのPHP
シェルスクリプトとしてのPHP
  Page2
PHPからiTunesのライブラリファイルをパースする
PHPからMac OS Xの外部コマンドを実行する
Page3
PHPからファイルやフォルダを開く
Growlを使ってPHPからデスクトップにメッセージ通知
index Mac OS X+PHPでオールインワン環境

 Mac OS X関連記事
プログラマーを引き付けるMac OS Xの魅力
続々移行するそのワケとは
 Mac一筋という熱狂的なユーザーだけでなく、「面白いことをしたい」と考えるエンジニアもMac OS Xを利用し始めている。いったいなぜだろう
Mac OS XでAMP構築
3通りの方法で整備できる開発環境
 Mac OS Xの上にWebアプリケーションの定番、AMP(Apache+MySQL+PHP)環境を3通りの方法で導入してみましょう
Mac OS Xで動かす軽量プログラミング言語
導入からPHP拡張モジュール組み込みまで
 Leopardでは、インストール直後からいくつかの軽量プログラミング言語が利用できます。早速試してみませんか?
Objective-Cは特殊な言語?
Cocoaの素、Objective-Cを知ろう(1)
 iPhone用アプリケーション開発で注目を集める言語「Objective-C」。C++とは異なるC言語の拡張を目指したこの言語の基本を理解しよう
Mac内にPHP4、5、6を同居させるコツ
Mac OS X+PHPでオールインワン環境(インストール編)
 PHP4の開発は終了したが、移行の問題は残されている。異なるバージョンのPHPをスムーズに切り替えるには?
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

>

Coding Edge 記事ランキング

本日 月間