堪能編 ネイティブMacアプリをPHPで操作しよう
繁田 卓二
株式会社 qnote
2008/6/29
エディタとWebブラウザさえあれば開発できる手軽さが特徴のLL言語。開発工程や環境を見直すと、もっとスマートなプログラミングが可能になる(編集部)
クライアントサイド言語としてのPHP
準備編とインストール編では、Mac OS X上にWebサーバとPHP環境をインストールし、サーバサイドでのPHP実行環境を構築しました。
今回は、クライアントサイド上でのPHP実行環境を使用して、Mac OSのネイティブなコマンドや、ネイティブアプリケーションとの連動を紹介します。
また、後半では、Mac OS Xの音声読み上げ機能を使用してPHPのエラーメッセージを読み上げたり、Growlを使用してエラーメッセージをデスクトップに通知したりする機能を持ったエラーハンドラを作成します。
CLIでPHPを実行してみよう
前回までに構築したPHP環境は、実行環境として見れば、WebサーバとWebブラウザが同一PC上にあるため、その動作はあたかもクライアントアプリケーションのように思えます。しかし、実体はサーバサイドとクライアントサイド間のHTTP通信で実現するWebアプリケーションにほかなりません。
今回は、Webサーバを経由せずにクライアントサイドだけでPHPを単独実行する方法とその用途について解説します。
PHPは本来、動的なWebサイトを表現するための言語として誕生し、成長してきたという歴史的経緯があります。このためPHPは「Webサーバ上でなければ実行できない」または「サーバサイドでなければ実行する意味がない」などと思われがちです。
しかし、PHPは古くからWebサーバ以外へのインターフェイスもいくつか提供しています。その1つにCLI(コマンドラインインターフェイス)が挙げられます。CLI版のPHPはphpコマンドとしてOS Xにインストール済みですので、Apacheが動作していなくても単体で実行できます。
ここもよく勘違いされがちなのですが、ApacheモジュールとしてのPHPとCLIのPHPはそもそもバイナリが別物ですので、Apacheがインストールされていなくても、また、httpdプロセスが起動していなくても、当然phpコマンドは動作します。
標準環境では、/usr/bin/phpに5.2.6【注1】のバイナリが配備され、デフォルトで使用可能です。
Leopard標準のPHPは5.2.4ですが、セキュリティアップデート2008-05(Mac OS X 10.5.5/2008年8月公開)で、Mac OS X付属のPHPが5.2.6にバージョンアップしています
試しに、Mac OS Xに付属のターミナルを開き、phpコマンドを実行してみましょう。/アプリケーション/ユーティリティ/ターミナル.appを開き、以下のコマンドを入力します。
-vオプションは以下のようなバージョン情報を出力します。
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
別バージョンのPHPをインストールしている場合は、それぞれの実行バイナリをフルパスで指定する必要があります。
Copyright (c) 1997-2008 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2008 Zend Technologies
次にphpコマンドで任意のPHPコードを実行してみましょう。-rオプションでは引数で渡した文字列をPHPコードとして評価し実行されます。
引数に直接PHPスクリプトファイルのパスを渡し実行することもできます。
また、-lオプションでスクリプトファイル内の構文チェックをすることも可能です。構文エラーがあった場合は以下のようにエラー内容や行数も出力されます。
Parse error: syntax error, unexpected '{', expecting T_STRING in ./sample.php on line 25
Errors parsing ./sample.php
もちろん、これらはMacだからこそできる技というわけではありませんが、Webサーバ経由でなくても簡単にPHPを実行できる環境が用意されていれば、デバッグやちょっとしたロジックの挙動確認に非常に役に立つでしょう。
シェルスクリプトとしてのPHP
次に、PHPをクライアントサイドで実行させる手段を考えてみましょう。
クライアント上で動作するPHPアプリケーションを作るうえで、ユーザーの操作を受け付けるインターフェイスをどのように提供するかが問題となります。
ローカルのApache上でPHPを実行し、Webブラウザ経由でアクセスするのであれば、HTMLとJavaScriptベースのインターフェイスでも良いでしょう。しかし、Webサーバを必要としないスタンドアロンなクライアントアプリケーションとなるとインターフェイスは限られてきます。
Windows上であれば、Win32 APIをPHPの関数で呼び出す拡張モジュールがあり、ファイルオープンダイアログやウィンドウなどがPHPから操作できますが、Mac OS Xではネイティブアプリケーション環境Cocoaとの言語ブリッジがないため、残念ながらウィンドウやボタンなどのAquaインターフェイスを制御できません。
そこでCLI版のPHPを使用し、ターミナルなどの文字端末からコマンドとして呼び出す手段が挙げられます。いわゆるCUI(Character User Interface)ベースでのシェルスクリプトです。
CUIベースでのアプリケーションは、入力も出力も比較的チープな情報に制限されますが、その分、プログラムも軽量になり、動作も軽く、安定した機能を提供できます。PHPでもCLI版のバイナリをシェルとしてPHPコードを記述し、実行権限を与えれば、単体ファイルで実行できるコマンドアプリケーションとして使用できます。
CLI版PHPでのアプリケーションとして可能な処理は、PHPの標準関数群の範囲内だけに止まりません。Mac OS X特有のコマンドや外部アプリケーションを呼び出したり、ソケットなどの一般的なプロセス間通信を使ってデーモンプロセスなどとメッセージをやりとりすることも可能です。
PHPの場合のシェルスクリプトの記述は、HTMLの中にPHPの記述を書く感覚と同じく、「<?php」でPHPの記述を始め「?>」で終わり、シェルスクリプトの中にPHPを書くようなイメージです。PHPタグの外の文字列はすべて標準出力経由で送出され、文字端末上に表示されます。
#!/usr/bin/php Hello PHP Script!! Now: <?php print date('Y/m/d');?> Thank you
もちろん一般的なシェルと同じく、print文を基本とした出力も可能です。ただし、PHP開始タグは必須です。
#!/usr/bin/php <?php print "Hello PHP Script!!"; printf(" Now %s", date('Y/m/d')); print "Thank You"; ?>
基本的にはPHPタグの中が実行コードとなり、タグの外の文字列が標準出力経由で表示されます。よく使用するような処理をスクリプトファイルにまとめ、PATH環境変数で指定されたディレクトリ下に保存すれば、常に呼び出しが可能なコマンドとして活用できます。
1/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を紹介する。※ショートカットキー、アクセスキーの解説あり
|
|