php - みる会図書館


検索対象: 教えて!鉄ニャン先生β
17件見つかりました。

1. 教えて!鉄ニャン先生β

「で、これを simple. php として保存して、それじゃ、これを "php simple. php" で起動してプラウザで " http : 〃 192.168.33.10 : 8080 / " にアクセスしてみるにや。 もし、ちゃんと動かないようなら、 " php-lsimp . php " とするとタイプミス とかは教えてくれるにや」 「おお、プラウザに " にやーん " って出た。ん、これ、世界中がアクセスでき る場所に置いたら、世界中に " にやーん " を返せるってことか ? 」 「そうにや」 「 fwrite って、アレだよね ? print みたいなもので、ファイルに書き込むんだっ け ? でも、こで返す先って通信相手のプラウザじゃないのか ? 」 「そうにや。 UN Ⅸの世界ではなんでもファイルとして見做そうとしている にや。つまり、ソケット ( 通信 ) もファイルにや」 「ふーん、分かるような分からないような。あれ ? このプログラム、リクエス トヘッダとして送ってきてるはずの、 GET とか POST とか一切出てこないぞ ? その辺は読まないのか ? 」 「良いところ気付いたにや。それじゃ、 GET の時だけファイルを返せるように $ 「 equest = buildRequest($conn); 〃リクエストの内容を解析する $buffe 「 s = while ($conn = stream_socket accept($socket)) { 〃リクエスト来るまで待ち } else { echo "$errstr ( $ e 「「 no ) く b 「 / > \ n " if (!$socket) { $socket = stream_socket_se 「 ve 「 ("tcp://0.0.0.0:8080" 〃サーパー待ち受けでソケットオープン く ?php php してみるかにや ? 」 $content= null; $path = 引 R $ 「 equest-

2. 教えて!鉄ニャン先生β

だとだけ考えておいてコードそのものは " おまじない " だと思っておいてくれ れば良いにや。それじゃ、このサーバーの有るディレクトリと同じ階層に、 , のファイルを置いてみるにや」 く ?php if (getenv( ・ QUERY_STRING ・ )) { pa 「 se—str(getenv( ・ QUERY—STRING'). $—GET); <?php if (isset($_GET['hoge ・ ]) & & $—GET[ihoge ・ ] = ー・ fuga ・ ):?> <P> にやーんく /P> く ?php else:?> く P> にやーにやーく /P> く ?php endif;?> 「これで、 "http: 〃 192.168.33.10/index. php?hoge=fuga" にアクセスしてみるにや」 こうやって条件分岐で HTML の内容を変えて出力すれば、画 「おーなるほど。 面に変化を出せるってことか・・・・・・無茶苦茶単純なんだな。じゃあ、これを元に 最強の Web サーバーを作るぞ ! ! 」 2 8

3. 教えて!鉄ニャン先生β

″ここからは区切り文字くるまでひたすら読む while (($char = fgetc($conn)) ! = = false) { $line . = $char; ″ \r\n\ 「 \n までがヘッダ foreach (explode("\n". $line) as $heade 「 ) { 〃ラベルと内容で分ける $label = strtouppe 「 ()t 「 t 「 ($tmp[l], ・ $request → $label = t 「 im($tmp[2]); 〃リクエストボディがあるようなら、ボディを読む if (isset($ 「 equest → CONTENT—LENGTH)) { $ 「 equest → b0dy = fread($conn, intval($ 「 equst- >CONTENT_LENGTH)); b 「 eak; 「 etu 「 n $ 「 equest; 「それじゃ、これを simple. php として保存して、 php simple. php として起動する。 プラウザで " http : 〃 192.168.33.10 : 8080 / simple. php " にアクセスしてみるにや」 「お、今書いたソースコードが降ってきた」 「 simple. php を保存したディレクトリに適当に HTML ファイル作って遊んでみ たり、メソッドが POST の場合を作ってみて curl で post を送ってみたりして、 $request->body の中身を見てみると良いにや」 「ふう・・ ・・なるほど、 buildRequest 関数の中がちょっと難しいけど、ググりな

4. 教えて!鉄ニャン先生β

t 「 y_files \$u 「 i /index. php?\$a 「 gs; location ~ \.PhP\$ { /etc/nginx/fastcgi—params; include fastcgi—pass unix:/va 「 / 「 un/php5-fpm. sock; fastcgi_index index. php; fastcgi—pa 「 am SCRIPT—FILENAME \$document_ 「 oot\$fastcgi_ script_name; fastcgi—「 ead timeout 600 ; > /etc/nginx/sites-available/test. 0 「 g sud0 ln /etc/nginx/sites-available/test. 0 「 g /etc/nginx/sites-enabled/ sudO service nginx resta 「 t 「 nginx の設定については、 こでは説明しないにや。こでは、こんなもん だと思っておくと良いかにや。もし、この先興味を持ったらドキュメントを 読んで弄り倒してみてくれにや。もし、打ち間違いとか有って再起動に失敗 するようなら、 "nginx -t" って打っとダメそうなところを教えてくれるにや。 ちゃんと再起動できたら、そこで OK にや。そうしたら、 hosts ・・・・・・ん一と、 Windows だと windows\system32\drivers\etc の中かにや。 192.168.33.10 と test.org を結びつけて、 http: 〃test.org/index.php にアクセスしてみるにや。さっ きみたいにクエリストリングとか弄ってみると良いにや」 「おや、さっきとほぼ一緒だし。頑張って自分でサーバー作ることないのか ・・なんか悔しいなあ・・・・・・でも、確かにこうしてれば、 PHP を書くことに集 中できるし、全然こっちの方が良いのか・・ ・・うーん、なるほど・・ だ・・・・・・て、もう 2 時じゃねーか。寝るぞ寝るぞ」 これは便利 布団を敷き終わって眠りに着くと、猫耳どもが、なにやら冷蔵庫の前でガサ ゴソ始めた。まあ、今日の授業料くらい良いか・ ・・と思って気にせず眠ること にした。しかし、ヤツらは加減を知らなかった。翌朝起きてみれば買い置きの 食糧と、全ての酒を飲み尽くされていた。

5. 教えて!鉄ニャン先生β

0N7 凹 D 5 # CGI 「そういえば、 Web サーバー作っている時に拡張子が php だったら PHP を起動するのを作る時に、 CGI がどうのって言っていたけど、ど ういう意味なの ? 」 「 CGI は Common Gateway lnterface の略にや。あそこではややこしい ことしたくなかったから拡張子 php の時に、 PHP を決め打ちで起動し ていたけど、本来は CGI という Web サーバーから外部のプログラムに データを渡しながら起動するための規格があるにや。って言っても環境 変数と標準入力を使ってデータを渡して、標準出力をそのままクライア ントへ返してやることが決まってるだけにや。たとえばにや」 # !/bin/sh echo "HTTP/I.1 200 OK\r\n" ech0 "Content-Length:2\r\n" echo "Content-Type: text/html\ 「 \n" echo "\r\n" echo "OK" 「こういうシェルスクリプトを " index. cgi " という名前で置いて、パー ションを chmod で 755 にしておくにや。」 「ふむふむ」 「そうしたら試しに . /index. cgi とシェルに打つにや。」 「うん、想像通りリクエストヘッダとリクエストボディが出たね。 この このプログラムで実行してね " って意味 1 行目の # ! から始まるのが、 だったよね ? 」 「そうにや、具体的にはソースコードの 1 7 行目の拡張子で制限してい るところを直して、 25 行目の php を直接起動しているところを $path で動くようにすれば良いにや。これでサーバーにアクセスすると OK っ て出るにや。まあ、要するに本当は言語とかどうでも良くて、シェルで 実行出来るものなら、シェルで実行した結果をそのままクライアントへ 返せるということにや。詳しいことは RFC3875 を読むにや」 ツ 3 3

6. 教えて!鉄ニャン先生β

〃 [NTÉに凹 D = # HTML 工ンティティエンコード・デコード 2 9 SPECIALCHARS, ENT_QUOTES)); ・ php ー「・ va 「 dump(get_html t 「 anslation_table(HTML の文書に当たってみる。それと色々実際に試すのをクセにするにや」 ル " という問題が出てきたら、ググってみる。可能な限りオフィシャル してるかは、次のコマンドを打ってみると良いにや。なんにせよ、 " ルー 「そういうのは実際に試してみるのが良いにや。どういうルールで変換 "&amp;amp;" になるのか。ん、混乱してきたぞ ? ? 」 「なるほど、 " & " が "&amp;" になるのか、この "&amp;" を表現したい場合、 php -「・ echo htmlspecialcha 「 s("&lt;". ENT_QUOTES); ・ & を処理すれば良いだけだっていうのは分かるにや」 プログラマは先に作り込んでるに決まっているにや。普通に考えれば、 「なにドヤ顔してるにや。旦那様の思いっきそうなことくらい、世界の 「なるほど。そんじゃ、 & にを HTML で表現したい場合はどうするの ? 」 php - 「・ ech0 htmlspecialcha 「 s decode("&lt;html&gt;");' 「実際に有るんだけど、先回りするじゃないにや ! 」 これを戻す関数があるんだね ? 」 て NIess than で "&gt;" って、 greater than だよね。意外と安直だな。で、 「 &lt;html&gt; って、人間の目には見辛いけど、よく見てみると " & に ; " っ php - 「•echo htmlspecialcha 「 s(" く html>", ENT_QUOTES); ・ を表現したい場合は、こうするにや」 「じゃあ、さっきの話の続きにや。 HTM L の中のコンテンツで "<html>"

7. 教えて!鉄ニャン先生β

## 今回は ubuntu を使うにや config. vm. box = "ubuntu/t 「 usty64" config. vm. netwo 「 k ・ p 「 ivate—netwo 「 k", ip: " 192.168.33.10 " . "/va 「 /www/html/webapp" config. vm. synced f01de 「 " end 「 Ubuntu って聞いたことある。 Linux だよね ? 」 「そうにや。 Ubuntu は Linux のディストリビューションのひとつにや。 Ubuntu にしたのは単に好みだにや。シンプルで扱い易いから気に入ってる にや。 "vagrant up" で起動したら "vagrant ssh" で中に入るにや」 「あ、本当に Linux の中みたいだ。これどうなってるの ? 魔法みたいなんだけ 「さっきも説明したけど、元々 VirtualBox という仮想 OS を扱う仕組みがある にや。それを Ruby のツールでラップしたのが Vagrant にや。予めインストー ル済みの OS の box をインターネット経由でダウンロードしてきて、ネット ワークの設定とか共有ディレクトリの設定とかを自動的にやってくれるにや。 この VagrantFile と紐付けて個別に管理してくれるから、複数の開発環境を取 り扱う時に事故り難いのも特徴にや。本領を発揮するのは複数人で開発する 時だけど、その辺は端折るにや。さて、 PHP でも遊ぶかにや。『 sudo apt-get install php5-cli 』」 「ん ? PHP ってプログラミング言語だよね ? ちょっとだけ触ったことあるよ。 プログラムするの ? 」 「なにが『プログラムするの ? 』にや ? ぼくは、何を隠そう天才猫耳プログラ マ『鉄ニャン』だにや ! ! プログラムのことならなんでも聞けにや ! ! 」 「うわっ、自分で自分のことを天才とか言っちゃうイタい子だ ! ! ただでさえ、 イタい格好した工ロ猫なのに ! ! 」 「旦那様は、失礼なャツだにや。あとで、ぼくの実力を思い知って吠え面をか くことになるにや」 「ごめんごめん。前に PHP の入門書みたいなのを読んで少し書いてみたんだけ ど、全然ピンとこなくて結局やめちゃったんだよね。文法くらいなら分かるけ ど、結局、これで何が出来るのか分からないんだよね・・・・・・ちゃんと使えるよう になるためにはどうしたら良いのかな ? 」

8. 教えて!鉄ニャン先生β

「え ? bot ってプログラムでしょ ? プログラムが猫耳ショタ ? えっ ? どういう メカニズム ? 」 説明を受けたら、より一層混乱をしていると部屋の隅に、派手で悪趣味な格 好をした猫耳が座って芋焼酎を飲んでいた。 「いちいち、うるせえなー。 bot が猫耳ショタになるくらい、よく有ることだろ。 そんなことイチイチ気にしてるんじゃねえよ」「え ? 二人目、プログラムって 猫耳ショタになるものなの ? えっ ? どういうメカニズム ? 」 「そっちは、おだいった。そっちは元々はモバファクがやっていた wassr って いうサービスで、大喜利のお題を出すための bot だったんだけど。今は止まっ ているし、このパソコン借りて呼び出しておいたにや。よろしくにや。ところ で、昨日の Web サーバーの続きなんだけど。 CGI が動くようにしてみたにや」 $ 「 equest = buildRequest($conn); $buffers = while ($conn = stream socket_accept($socket)) { } else { ech0 "$errstr ( $ e 「「 no ) く b 「 / > \ n " ・ if (!$socket) { $er 「 str); $socket = st 「 eam_socket se 「 ve 「 ( " tcp : / / 0.0.0.0 : 8080 " く ?php php $content = null; $path = >path); 引 R 2 5 if (p 「 eg-match( ・ #\. php# ・ . $path)) { if ($request → method = = ・ GET ・ & & is_file($path)) { putenv( ・ QUERY_STRING=• . $que 「 Y[1ル 〃ファイル名の " ? " よりあとがクエリストリングだよ $ 「 equest-

9. 教えて!鉄ニャン先生β

( H ム P す第 . イ じゃあ、 HTTP サーバーを作ってみるにや fo 「 ()i = 0 ; $i く 1000 : $ i + + ) { $content = while ($conn = st 「 eam socket accept($socket)) { } else { echo "$er 「 st 「 ( $ e 「「 no ) く b 「 / > \ n " if (!$socket) { $e 「 rstr); $socket = stream—socket—se 「 ver("tcp://O. 0.0.0:8080" く ?php php 鉄ニャンはそう言うと、ⅵに凄い勢いでコードを打ち込み始めた。 「じゃあ、 HTTP サーバーを作ってみるにや」 fclose($socket); fclose($conn); fw 「 ite($conn. $content); fwrite($conn. "Content-Type: text/html\r\n"); 〃 HTML 固定にするよ fw 「 ite($conn, "Content-Length: ・ . st 「 len($content) . "\ 「 \n"); fwrite($conn. "HTTP/I.1 200 OK\r\n"); 〃さっきの cu 「 [ で返ってきたレスポンスへッダそっくりなのに注目 $content . "<P style= ・ C0[0 「 : 「 ed; font-weight:bold; ・ > にやーんく /

10. 教えて!鉄ニャン先生β

[JQ 凹 D # URL 工ンコード 2 3 は RFC3986 でググってみると良いにや」 別の文字列に置き換えるというのはよく有る仕組みだにや。詳しい仕様 「つまり、文字列で通信する時、制御で使う文字そのものを送る時には、 「お、戻った」 php - 「・ ech0 「 awu 「 ldecode("%26%3D%3F"); ・ 「それじゃ、次に、これを実行するにや」 「お、 % がいつばい出てきた ! ! なんだこれ ! ! 」 php ィ・ echo rawurlencode("&=?");' 「それは実際にやってみりゃ良いにや」 とか " & " とか入れたい時どうするの ? 」 に buzz って値を入れてるっていうのは分かるんだけど、値の中に で、 hoge っていう変数名に fuga って値を入れて、 fizz っていう変数名 いたいところだけど、厳密に分けて考えた方が良いってところなんだな。 「なるほど・・・・・・お前、そんな格好してるくせに、細かいャツだなって言 にや。クエリストリングを、この urlencoded で表現しているだけにや」 x-www-form-urlencoded" という Content-type のリクエストボデイだ メータの ? 以降についているのがクエリストリングで、 "application/ 「正確にはクエリストリングではないにや。 URL の中に含めるパラ の ? 以降に付いているヤツ」 「これってクエリストリングだよね ? あの URL の中に含めるバラメータ hoge=fuga&fizz=buzz てみたら、こんなのが入っていたんだけれど・・・・・・」 て。それだけでも試しておこうかなと。で、リクエストボディの中身見 「そういや、あの時、 POST メソッドを送ったりしてなかったなと思っ 「なんにや、まだ未練がましく Web サーバーのソースを弄ってるにや ? 」