PHPからファイルやフォルダを開く
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でオールインワン環境 |
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をスムーズに切り替えるには? |
|
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|