ドキュメント履歴: 2020-08-27 初回アップ
はじめに
私のページには、来訪者が書き込めるページとして簡易掲示板のようなページはあったが、ブログのようにページ単位でコメントする機能や、記入者のページにリンクを貼る機能はなかった。
まぁ個人的には、2003年から e日記なるブログの元になるような cgiでページ出力するシステムを自作したりして来たので、安易にブログのマネなんて・・・と言う気持ちもあったが、変更のアイデアはずっと頭の中にあったので、何とか形にしようと老骨!に鞭打って 生噛りのphpと 主体は perlによる htmlに追加できる簡易コメント機能を作ってみた。
ここでは phpで perlを呼んで perl の処理結果を phpに返して表示するワザなどを含めて習得したノウハウを披瀝する。(Web検索では 「外部プログラムの実行は exec()コマンドを使う」と言う説明が見つかるが、意外と実際の exec() の使用例のサンプルコードは見つからない)
全て phpで書けば何ていうことはないのかも知れないが、こうすることで何とか自分でスクリプトを書ける perlの処理をメインにして、自分なりに htmlファイル側への追加は最小限(約10行)にすることができた(と思う)。
<FilesMatch "\.html$"> AddType application/x-httpd-php .htm .html .php </FilesMatch>と記述しておけば、htmlファイル中に phpスクリプトを埋め込んで実行することが出来る。
AddHandler php7-script .htm .html .phpでも可能。いずれも .php .htm .html という拡張子のページに phpスクリプトがあったら文字列として表示しないでプログラムとして実行してね! という指示になる。htmlのままでプレーンな htmlタグなどのコードを記述しても静的な表示しか出来ないが、phpなどのプログラムが実行できると、例えばコメント投稿があった場合にコードを変えないでもそのコメントを表示追加出来るなど、より動的なページが実現できる。
<?php include_once("sample.txt") ?>のようにしてインクルードしていたが、今回は単に文字列を表示するだけでなく、指定したファイルをプログラムとして実行して結果を受け取って表示すると言う処理をしたかった。
/route ---- /dir1/dir2/sample.html | ---/usr/bin/test/test.pl外部スクリプトを実行する実際のコマンド行は sample.html から見た test.pl の相対的パス(../../usr/bin/test/test.pl)を指定して以下のように記述する。
$result = exec("/usr/bin/perl ../../usr/bin/test/test.pl $argv1 $argv2", $out, $rtn);最初のブロック(/usr/bin/perl) は サーバールートからの perlの実行ファイルのディレクトリ(シェバング行と同じ)、 $argv1 $argv2 は test.plに渡す引数、それぞれの区切りは半角スペース
<?php $rqurl = $_SERVER['REQUEST_URI']; // 親htmlの uri(ルートからのパス) $cgi_path = str_repeat('../', count(explode("/", $rqurl)) - 2) . 'usr/bin/comment/comment_dsp.pl'; // ルートパスまでのディレクトリ階層を "../" で遡って cgi のパスを指定する $result = exec("/usr/bin/perl $cgi_path $rqurl", $out, $rtn); if($rtn === 0){ foreach($out as $value){ print_r($value . "\n"); } }else{ echo "<br> // fail // <br> rtn: $rtn <br> route: $pcgi";} ?>以上のスクリプトを 親htmlのコメント機能を表示したい部分に追記することで、 phpから comment_dsp.plを起動して、comment_dsp.pl 内の処理でコメント記入FORMと該当htmlに対するコメントをコメントログファイルから読み出して表示することが出来る。
I-O DATA コンセントLAN PLCアダプター インターネット接続 有線LAN スターターセットモデル PLC-HP240EA-S 新品価格 |
パナソニック AV用PLCアダプター スタートパック PL-LS14KT 新品価格 |
TRENDnet Powerline 500 AV Nano アダプターキット/ 500Mbps Compact Powerline AV Adapter Kit[TPL-406E2K] 新品価格 |