メシのタネ

Webプログラミング 備忘録

  • DOMをPHPで操作できたらいいよね

    そうだよね。そう思うよね。JavaScriptでやると、画面がガタついたりするもんね。そうならないようにする方法もあるかもしれないけど、僕はできませんので、サーバー側でなんとかできたらええなぁと思って挑戦したけど、できませんでしたよ。PHP標準でHTMLをDOMにできるらしい今、技[...]

    続きを読む
  • 設計書ってなんで書くの?

    設計書をなぜ書くのかから始めてかれこれ3年近くこの禅問答をやっているわけですが、いまだに答えは出ません。ただ、その禅問答をやる中で設計書に対する取り組み方は大きく変わったので、その一部でも書いていきたい。基本設計はとにもかくにも必要だと思う設計書はいらぬ!という話をよく聞くし、自分[...]

    続きを読む
  • 書ききってやる。

    久々に書いてみる。久々に文章を書くということをやってみようと思う。伝える作業を観察したいと思ったからそうしたいと考えた。情緒的な文章は基本的にゴミ箱にぽいしてきましたが、情緒的なのも自分だと思う。「文章をかくという作業は、とりもなおさず自分と自分をとりまく事物との距離を確認すること[...]

    続きを読む
  • 普通の会社で2年普通に働いて思う事

    えらい寒くなりました。文句言いながらも現職を続けて2017年12月1日にめでたく2年がたちました。分かりやすいが乱暴に言えばITドカタと呼ばれる業界に入って案件のヒエラルキーの無慈悲さを痛感しながらも、それでもしょうがないと頑張る人たちに心を打たれながら「じゃあ俺も」と頑張れない自分に挫折して、とあ[...]

    続きを読む
  • jQueryUiのDatepicker利用時にminDate設定するとバグる件

    題名の通りなんですが、DatepickerでminDate使うとバグります。また後でキャプチャ見て貰いますけど、灰色の部分が、minDateで設定した日付が反復して出るようになるんですね。こういうの気が付かない人がいるかも知れませんが、ChoromeでminDate設定してる人は気にしてみてくだ[...]

    続きを読む

PHPで標準入力を行う方法

PHP_Logo

追記:2014/11/7 : ほぼ説明されていないストリームについてや、名前すら出てこないファイルディスクリプタについて追記しました。多分前よりは分かりやすくなってるはずです!多分!PHPで標準入力を受け取る方法とかのがタイトルとして正しいのかな・・・なんか行うってのは違う気がします。とにかく修正しました。

プログラミングで使われる言葉ってややこしい。これが結構ネックになって経験無い人は、興味持ってても勉強しなくなると思うんです。

例えば、、、言葉知らないから検索する→知らない言葉が2つに増える→2つとも説明見たけどぜんぜんわかんない→youtubeを見る→良い時間なので寝るって言う流れに僕はよくなります。

この標準入力を調べた時だって、

PHPでは様々な入出力ストリームを提供しています

って言われてあんじゃストリームってってなって検索すると

データの入力または出力の機能を提供する抽象データ型である

で、なにその抽象データ型ってって検索すると

データ構造とそれを直接操作する手続きをまとめてデータ型の定義とすることでデータ抽象を実現する手法またはそのひとまとまりとして定義されたデータ型を言う。

もはやただ日本語であるだけの日本語になって理解できなくなる。だから僕は、頭の中でどういう事かイメージできる段になったらその事についてその時はもう調べません。

必要な事はちゃんと調べるようにしてます。

ストリームとは?

ストリームとは流れです。稼動しているプログラムがファイルへとアクセスする際バイトのデータが流れていきます。その流れていくデータが通る道の名前をストリームと言います。このストリームという奴はカーネルっていうOSの基本機能を実装したソフトウェアによって制御されています。

標準入力

標準入力とは何か。データの入力または出力の機能を提供する抽象データ型である
これWikipediaでぐぐったんですが、続きがありまして、特にファイルの入出力には、標準ストリームと呼ばれる特別なストリームが用意されていることもある。って部分があります。これについて調べてみると、

プログラムとその環境(通常は端末)を実行前から接続している入出力チャネルである。
標準入力 (standard input)、標準出力 (standard output)、標準エラー出力 (standard error) と呼ばれている。

とあります。

つまり、標準入力とは、ストリームの種類の標準ストリームの標準入力、標準出力、標準エラー出力この実行前から接続しているチャネルの中の1種類なのです。何をするのかといえば、キーボードから入ってくるデータ読み込みます。

ちょっとこの説明だと乱暴過ぎる気がします。

ちょっとこの記事から時間がたった僕の思う標準入力っていうのは、プログラムが稼動した時点でファイルディスクリプタによって予約されている0番stdin標準入力と1番stdout標準出力と2番stderror標準エラーのうちの0番標準入力をストリームが流れていく様子を標準入力ってゆうんじゃないかなと思います。

ちなみにstdinはstandardinputの略です。決してすたじんとか変な風に覚えないようにしましょう。僕はそう覚えました。すたじんって覚えました。

ファイルディスクリプタ

プロセスに引っ付くint型の整数ですが、コマンドを実行した際にプロセスで使われると意味合いが代わってくる物です。ストリームはkarnelが管理しているので、ファイルディスクリプタからの管理が出来ません。なので、プロセス(稼働中のプログラム)に引っ付いて入り口や出口の役割を果たしています。この入り口や出口には番号があって、0番が入力、1番が出力、2番がエラー出力っていう役割を持ってます。

標準入力についての説明記事

標準入力、標準出力とは何か?
絵で見てわかるファイルディスクリプタ・パイプ・リダイレクト

標準入出力の仕組みが凄い分かりやすく載ってます。参考にしてみてください。

PHPから標準入力

PHPでも、cuiの作成が出来るといわれています。なぜそういわれるのかといえば、

PHPでは様々な入出力ストリームを提供しています

からだと思います。

そのストリームを利用して、文字をコンソールに表示させます。コンソールを立ち上げて、php -vを打ってください。パスが通ってたら、準備完了です。touch でファイルを作ります。touchはLinuxのファイル作成コマンドです。

</p>
<p>&lt;?php<br />
//sample.php<br />
$l = trim(fgets(STDIN));<br />
?&gt;<br />

このプログラムを

<br />
php filename.php<br />

2014/11/7: 修正

で実行すると、何か入力しないといけない雰囲気になります。この雰囲気の中aを$lに代入した場合string型のサイズが1でaとなります。で今はtrimつけてるのでそのようになりますが、

<br />
&lt;?php<br />
//sample.php<br />
$l = fgets(STDIN);<br />
?&gt;<br />

このコードでaを$lに代入した場合stringは2でa\nになります。標準入力は1行を$lに保存します。1行なのでエンター押された時の改行も入るんだと思います。trimで\nを取ってます。

2行以上標準入力を行う場合

この方法だと1行だけしか標準入力を行えません。2行以上やる場合繰り返しをする必要があります。

<br />
&lt;?php<br />
$myarray = array();<br />
for($i=0; $i&lt;5; $i++)<br />
{<br />
  $l = trim(fgets(STDIN));<br />
  $myarray[$i] = $l;<br />
}</p>
<p>var_dump($myarray);<br />

あんまし使うとこないでしょうけど、僕はpaizaってサイトでコード試験するのにこれが必要になったので、その時に覚えました。他には競技プログラミングとかcui作りたいとかそういう人は覚えておいた方が良いんではないでしょうか!

関連記事

  1. PHPサムネイル
  2. 2012.12.07

    【PHP】Cakephp
  3. PHPサムネイル