PHPからファイルやフォルダを開く
- - PR -
PHPからMac OS XのAquaインターフェイスを扱うことはできませんが、コマンドを介して特定のディレクトリをFinderでオープンすることは可能です。
Mac OS Xではopenコマンドを使用しFinderでディレクトリを開いたり、また、指定したファイルをTextEditorで開くことができます。
openコマンドは、ファイルやフォルダをダブルクリックした際に実行されるデフォルトアプリケーションでのファイルオープン処理を実行しますので、アプリケーション名を指定しなくても拡張子に関連付けられたアプリケーションが自動で起動します。
サーバサイド上でこういった処理はあまり意味を成しませんが、クライアントサイドであれば利用価値は大きいです。では、先ほどのエラーハンドラと組み合わせ、エラーが発生したファイルのディレクトリをFinderで開き、ファイルをテキストエディタで開くエラーハンドラを作成してみましょう。前項と同じくexec()関数で外部コマンドとして実行します。
<?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にはCocoaやCarbon環境向けのAPIが提供されており、それらを経由してさまざまなアプリケーションからのメッセージ通知ができます。
例えば、Mail.appが電子メールを受信したタイミングで通知領域にメッセージの要約を表示したり、Safariがダウンロードを完了したタイミングで通知したりといった処理によく使われます。Growlの通知内容は画面上に表示され、数秒でフェードアウトしますので、ログや電子メールのような恒久的に残るメッセージではなく、瞬間的な告知やデバッグ時のエラーのような一時的なメッセージの通知に適しています。

Growlは、Objective-CやCの実装で通知を送るだけでなく、ソケット通信でUDPポート経由でもメッセージを受信できます。PHPでは当然Objective-Cの実装手段がないため、ソケット通信でメッセージを送出することになります。
Growlのソケット通信処理は、PEARのライブラリにパッケージがあるため、今回はこれを使用します。以下のpearコマンドでNet_Growlライブラリをインストールします。
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でパッケージがどこにインストールされたかを知るためには、以下のコマンドを実行します。
PEARパッケージはこのインストールディレクトリがインクルードパスに設定されていることが前提ですので、設定ファイルなどで適切に設定しておきましょう。
最後に以下のエラーハンドラファイルを任意の場所に配置し、auto_prepend_fileに追加すれば完了です。
<?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');
?>
エラーが発生すると図のようなメッセージがフワっと表示されて数秒で消えます。HTML中のエラーとは違い、表示が乱れたり、HTML要素に隠れてエラーを見逃したりということがありません。Apacheモジュール上でも使用できるのでWebアプリケーションの開発やデバッグ時に使ってみてはいかがでしょうか。
今回の内容は、実処理を外部のプログラムに任せ、PHPはあくまでもそれを呼び出しているに過ぎません。当然、ほかの言語でも可能な処理です。しかし、多くのPHPプログラマにとっては、これまでWebアプリケーション開発のために培ってきたPHPの知識を、クライアントアプリケーションの開発に生かせるということは、大きなメリットになります。また、サーバサイドアプリケーション開発のための補助的ツールとしてPHPを再活用できれば一石二鳥となるでしょう。
3/3 |
| Index | |
| ネイティブMacアプリをPHPで操作しよう | |
| Page1 クライアントサイド言語としてのPHP シェルスクリプトとしてのPHP |
|
| Page2 PHPからiTunesのライブラリファイルをパースする PHPからMac OS Xの外部コマンドを実行する |
|
| Page3 PHPからファイルやフォルダを開く Growlを使ってPHPからデスクトップにメッセージ通知 |
|
Mac OS X+PHPでオールインワン環境 バックナンバー
- 第1回 クライアントPCに言語環境を入れる理由
- 第2回 Mac内にPHP4、5、6を同居させるコツ
- 最終回 ネイティブMacアプリをPHPで操作しよう
| 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をスムーズに切り替えるには? |
|
TechTargetジャパン
- 派生型でもっと便利にデータを扱う (2012/4/26)
基本型を組み合せて使える派生型を学びます。派生型には構造体、共用体、配列などがあります - 実例で学ぶRailsアプリのテスト方法 (2011/12/22)
具体的なWebアプリを例に簡単なテストを使ったリファクタリングについ
て解説する - Railsの人気テストフレームワーク6選! (2011/8/18)
今回からテストを使ったリファクタリングを解説する。まずはRailsで人
気のあるテストフレームワークをいくつか紹介する - ActiveRecordの更新系操作 (2011/6/27)
Railsのモデル層を担当するActiveRecordを使った登録、更新、削除
など、更新系の機能を中心に見ていきます
|
|


