#contents *PHP概要と現行業務における使用例 [#w4f29c4b] **PHPとは [#k02c9ada] PHP:Hypertext Preprocessor を再帰的に略したもので、htmlのプリプロセッサーという意味 **PHPの使われ方 [#od8d451c] PHPは基本的にCGIとして実行される → サーバーサイドで実行される PHPは用途としてはWEBオンリー、基本的にCGIとして実行される→ サーバーサイドでの実行 一般的なCGIのように、WEBサーバーからshell経由でphpが起動される経由されるのが基本であったが、WEBサーバーに統合されて高速なしくみで実行するのが一般的になっている。 lighttpdなど:常駐する php プロセスにスクリプトを渡して出力を得る fastcgi apacheなど:組み込みモジュールとして実行される(mod_php) 一般的に、拡張子phpのファイルはphpスクリプトとして処理されるようにWEBサーバーを設定する。 **phpファイル [#d434dedc] 一般的に、WEBサーバーの設定で拡張子phpをPHPスクリプトのファイルと定義し、phpファイルにスクリプトを記述する。 phpファイルは、形式的にはhtmlそのものであり、JavaScriptと同じように「<?php」と「?>」で囲まれた範囲にPHPのスクリプトを記載します。(開始終了の形式は複数あり) 例 http://hoge.com/sample.php <html><head><title>PHP Test</title></head> <body> <?php echo '<p>Hello World</p>'; ?> </body> </html> http://hoge.com/sample.php にブラウザからアクセスすると、WEBサーバーは sample.php をphpインタープリターに渡し、その出力をWEBブラウザに返す。 例 WEBブラウザに返されるデータ <html><head><title>PHP Test</title></head> <body> <p>Hello World<p> </body> </html> HTMLの記載部分はそのまま出力されている。 phpスクリプト部分はサーバー側で解釈されてhtmlに置き変わっているので、ユーザーにphpの実装が見られることはない。(C言語のdefineがプリプロセッサで置き換わるのと同じような挙動) なお、*.html に「<?php」と「?>」で囲まれたPHPのスクリプトを記載しても、WEBサーバーはphpに渡さずにそのまま出力されてしまう。 **プログラムのサンプル [#s2ab344e] 構文は、C/C++やJavaライクなものになっている。 「<?php」と「?>」で囲まれた部分が上から順番に実行されるが、関数を使用することもできるし、C++のようにクラスとインスタンスを用いたオブジェクト志向なプログラミングも使用できる。 ***関数を用いたコードの例 [#cb2d073e] 例) <?php function outputName( ){ $name = “山田”; echo “私の名前は” . $name . “です。<br>”; } outputName( ); ?> 実行結果 私の名前は山田です。 ***クラスを用いたコードの例 [#l3bb2c58] 例) <?php // クラスの定義 class abc { public $a = null; public function b() { echo "Class abc, Method b", PHP_EOL; return "abc->b"; } public function __construct() { echo "abc: constructor", PHP_EOL; } } // クラスabcを継承したクラスdefを定義 class def extends abc { public function __construct() { parent::__construct(); // 親クラスのコンストラクタを呼ぶ echo "def: constructor", PHP_EOL; } // 親クラスのメソッドbをオーバーライドする public function b() { echo "Class def, Method b", PHP_EOL; } public function c() { parent::b(); } } $c = new abc(); $c->b(); $f = new def(); $f->b(); $f->c(); 実行結果 abc: constructor Class abc, Method b abc: constructor def: constructor Class def, Method b Class abc, Method b **PJ/FPでのPHP使用例 [#cd8e7b3f] ***Projector [#sb386998] コンテンツエディターのGUIがWEBブラウザアプリとして実装されている。(MMS作) ***Flat Panel [#had8becd] 上記のコードを流用し、複数台監視アプリからのコンテンツアップロード、及び PC版のコンテンツエディタのコンテンツアップロードを実装している。 #dwrite(){{ <img width=320 height=200 src="http://hirai.cc/index.php?plugin=attach&pcmd=open&file=WS000005.JPG&refer=php"> }} ***アップロードの実装 [#lb707905] フォームのPOST実行で指定する送信先にphp拡張子のURLが指定されている。 <html><head><title>フォームからデータを受け取る</title></head> <body> <form action = “upload.php” method = “post”> <input type = “text” name =“comment/“><br/> <input type = “submit” value =“送信/“> </form> </body></html> 送信ボタンが押されると、html の作法に従ってWEBサーバーにPOST送信され、送信されたファイルはテンポラリディレクトリに格納される 送信が成功すると、送信されたファイル名か$_FILESに格納された状態で、upload.php が実行される。 upload.php のサンプル <?php $uploadfile = '/var/www/uploads/' . basename($_FILES['userfile']['name']); if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "successfully uploaded.\n"; } else { echo "failed upload.\n"; } ?> 現在開発中のsf2では、PCアプリによってコンテンツや再生スケジュールなどがtar形式でアーカイブされ、1つのファイルでPOST送信されてくるので、受け取り側のphpプログラムは所定の位置(USBメモリ)に展開する。 その際、認証処理や本体機能との排他、書き込み後の sync 処理なども php プログラムによって行われる。 その際、認証処理や本体機能との排他、書き込み後の sync 処理なども php プログラムによって行っている。 ** C/C++ユーザー的に興味深い phpの特徴 [#i34a975e]