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

堪能編 ネイティブ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】のバイナリが配備され、デフォルトで使用可能です。

【注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を開き、以下のコマンドを入力します。

$ php -v

 -vオプションは以下のようなバージョン情報を出力します。

PHP 5.2.6 (cli) (built: Sep 19 2008 11:28:54)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies

 別バージョンのPHPをインストールしている場合は、それぞれの実行バイナリをフルパスで指定する必要があります。

$ /usr/local/php-6.0.0/bin/php -v
PHP 6.0.0-dev (cli) (built: Nov 3 2008 15:11:50)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2008 Zend Technologies

 次にphpコマンドで任意のPHPコードを実行してみましょう。-rオプションでは引数で渡した文字列をPHPコードとして評価し実行されます。

$ php -r "var_dump(function_exists('is_binary'));"
bool(false)

 引数に直接PHPスクリプトファイルのパスを渡し実行することもできます。

$ php ./sample.php

 また、-lオプションでスクリプトファイル内の構文チェックをすることも可能です。構文エラーがあった場合は以下のようにエラー内容や行数も出力されます。

$ php -l ./sample.php
PHP Parse error: syntax error, unexpected '{', expecting T_STRING ./sample.php on line 25
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
next

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 記事ランキング

本日 月間