PHPで対話型アプリケーションを扱うには
- [更新日]2020/11/18
- [公開日]2016/07/20
- 2295 view
目次
PHPで対話型アプリケーションを扱うには
PHP
PHPはプロセス間通信やスレッドなどといった処理には本来は向いていません。 そもそものPHPの設計思想がサーバーサイドスクリプトとして用いられているためです。 しかし、PHP 5.4.x以上からビルトインサーバー、いわゆるPHP自体をウェブサーバー化するための仕組みが提供されました。 ※ 現状のPHPの最新版は7.0.xです。 上記を踏まえると、PHPはサーバーサイドスクリプトというポジションを超えて、 サーバーとして扱えるようになってきたと考えられます。 ※ RubyやPythonなどが出来てきてから、PHPもこういった考え方になってきたのではないかと思います。
プロセス間通信
PHPでは、上述しているように、プロセス間通信やスレッド処理などには不向きですが、 扱えないわけではなく、Unixでインストールした際にデフォルトで制約はあるものの、 プロセス間通信を行うための関数が用意されています。(POSIXやPCNTLなどと呼ばれるものです。) プロセス間通信とは、たとえばAプログラムとBプログラムがあったときに AプログラムとBプログラムが互いに通信(分かりやすく言うと、コマンドの送受信)を行うことです。 プロセス間通信では、 シグナルと呼ばれるプログラム間の合図のようなものや、標準入出力と呼ばれるもので、 読み込み(stdin, input)・書き込み(stdout, output)・エラー(stderr)の3種類のパイプが存在します。 基本的には読み込みと書き込みしか使用しません。
標準入出力
シグナルはPHPのプロセスを扱う関数で基本的に制御するため、ここでは関係はありませんが、 標準入出力が、対話型アプリケーションでは必要になります。 標準入出力で身近なものでいえばキーボードです。 キーボードで入力(input)されたものが画面に出力(output)されるものです。 身近なところでいうとキーボードで何か文字を入力しようとするとカーソルが点滅すると思います。 プログラム側もカーソルの点滅と一緒で、何か入力されるまで待機している状態です。 しかし、何かしら入力されたとしても、それをどこまで取得していいのかプログラム側にはわからないため、1文字でも入力されたら、出力されたという扱いになるため、 コマンドを送信後、どこまでが出力の範囲なのかを見る必要性が有ります。さらに、プロセス間通信を行っているプログラムが必ずしも定まった形でレスポンスを返す とは限らないため、ダミーのコマンドを送信し、ダミーのコマンドの位置までの出力を取得するなどといったような一工夫が必要です。
WEBサービス開発の依頼先探しなら、
リカイゼンにおまかせください!
相談するだけ!プロがあなたにぴったりの会社をご紹介いたします!
WEBサービス開発の依頼先探しでこんなお悩みはありませんか?
- 会社の選び方がわからない
- 何社も問い合わせるのが面倒くさい
- そもそも依頼方法がわからない
- 予算内で対応できる会社を見つけたい
発注サポート経験豊富な専任スタッフが
あなたのご要望をお聞きし、最適な会社をご紹介いたします!
ご相談から会社のご紹介まで全て無料でご利用いただけます。
お気軽にご相談ください!
WEBサービス開発の
依頼先探しなら
リカイゼンにおまかせください!
相談するだけ!プロがあなたにぴったりの会社を無料でご紹介いたします!
まずはご質問・ご相談なども歓迎!
お気軽にご連絡ください。