Keisan presentation!! 良い子は寝る時間だ 昔々、Webページを作るにはHTMLという言 語が必要でした。 今でも必要です。 ですが、それだとオウムのような反応しかしな いので、人々はだんだん飽きてきました。 そこで現れたのがCGIです。 こいつは内容次第でいろんな反応を返したり 出来るので、飽きられませんでした。 めでたしめでたし。 CGIって何だよ! Common Gateway Interfaceだよ! 中にPerl言語だのPython言語だのRuby言語だの PHP言語だのいろんな言語で書けるあたりが Commonって言われる要因? どの言語で書かれていても(Common)アクセスする と動作する(Gateway Interface)のがCGIの語源だ と思いますよ。憶測ですけど 有名所では2ch等が使っている 日記系CGIはWeblogが大多数… ブラウザゲームとかはCGIが多いか? JavaServletとかでもあるかな… まじめに知りたい人へ CGIとは、Webサーバが、Webブラウザからの要求 に応じて、プログラムを起動するための仕組み。 従来、Webサーバは蓄積してある文書をただ送出 するだけであったが、CGIを使うことによって、プログ ラムの処理結果に基づいて動的に文書を生成し、 送出することができるようになった。 現在ではほとんどのWebサーバソフトがCGIに対応 している。 CGIはどのような開発言語でも使用できるが、実際 にはPerlなどがよく使われる傾向にある。 http://e-words.jp/w/CGI.html ここに掲載されていました。 It is like casting pearls before swine. CGIはいろんな言語で動かす事が出来るけど今日 はPerlって言語を使ってCGIを書いてみたい。 だから今日はPerlで書かれたCGIをアナタのPCでも 動かせるようにするよ! つっても法政のPCだとサーバーさえ立てられたらも う動くらしいよ。早速話せる事が一つ減ってしまった。 それでも解説します。 と思ったけど、サーバーも最初から入ってるPCもあ るみたいです。そんな人は、これからの解説の間は 寝てて良いです。 サーバーを立てよう まず、Perlで書かれたCGIの動作確認をする 為に、サーバーを立てる必要があります。 でも、Apacheはインストールがやだとかコマ ンドラインがどうとかで触ってもいないのに拒 否する人がいると思います。もちろん私の思 い込みです。 そこで今回はexeファイルを1クリックするだけ でサーバーが立ってしまう、とんでもねぇ~も のを使います。 それは… 何だこれは! AN HTTPD。それはzipファイルを解凍して中 身のexeファイルを1クリックするだけでサー バーが立ってしまうとんでもねぇ~シロモノで す(デジャヴ)。 こう見えてレジストリいじってるからアンインス トールする時は面倒かもね。 本格的にサーバー立てたい人はApacheでお k 大規模サーバーには向いていないです AN HTTPDの設定(1/5) http://www.st.rim.or.jp/~nakata/ ここにアクセスして、httpd142p.zipをダウン ロードして下さい。 解凍先ですが、ここではC:\www\にしましょう。 自分でwwwというディレクトリを作って、そこ に解凍したものをぶちまけましょう 解凍したら、httpd.exeをクリック! AN HTTPDの設定(2/5) タスクトレイのアイ コンを右クリックし て、オプション一般 を選びましょう 上から三行目のド キュメントルートに C:\www\publichtmlとでも書いて おきましょう AN HTTPDが置い てあるディレクトリ にpublic-htmlとい う名前のディレクト リを作りましょう 上から8行目のCGI を実行するにチェッ クを入れましょう AN HTTPDの設定(3/5) もし起動した時にこんなエラーが出たら、あなたの PCには既にサーバーだかvmwareだか何かが動い ています。 2007年度情科入学者向けPCのエラー回避法を解 説するよ AN HTTPDの設定(4/5) 情科のコンピュータリテラシで1回だけやった… 見つからないなら、「vmnetcfg.exe」で探して下さい もしそれでも見つからないなら、何かのサーバーが動いてい ると思うんで何もしなくていいかも AN HTTPDの設定(5/5) NATタブのNATサービスの停止を押して適用を押して下さい もしかしたら、DHCPタブの方かも サーバーだけ立っても俺のモチベ が立たないぜ ここで、一度サーバーを立ててCGIを動かして みて下さい(サンプルは後述します)。学校の PCだと何故かCGIが動いてしまうのもあるらし いです(既にPerlがインストールされている)。 詳しい話はRATだか何処かに聞いて下さい。 動かし方ですが、public-htmlの中に sample.cgiを入れてみて、IEだかFirefoxで http://127.0.0.1/sample.cgiへアクセス。 CGIが動いてしまった人はこの次のページか らは寝てていいです。 レジストリいじられるのやだなあ (アレルギーの人がよく言う言葉) 次はActive Perlをインストールしよう。 これは、インストールしなきゃいけないんです。 インストールアレルギーの人ごめんなさい。 http://www.activestate.com/activeperl/ ここへアクセスしてみて下さい。 Active Perlの設定(1/5) DOWNLO AD NOW をクリック して保存 しましょう クリックす ると出てく るアン ケートみ たいなの は答えな くていい です Active Perlの設定(2/5) 実行しましょう。適当にNextを押して先へ進みましょ う Active Perlの設定(3/5) Browse を押す とインス トール 先を指 定でき ますの で、好き な所に 入れま しょう Active Perlの設定(4/5) 一番上は環 境変数の PATHに書 き加えるっ ていうもの で、コマンド ラインから 実行する時 どこからで も実行でき るようにす るものです 上から二番 目は拡張子 plを関連付 けるオプ ションです。 わからな かったらは ずしたほう がいいかも Active Perlの設定(5/5) Install で容赦 なくイ ンス トール します 終わっ たら Finish を押し てね You got Perl これで晴れてPerlで書かれたCGIを動かす事 が出来ました! ここまでで寝ていた人は起きてもいいし寝て てもいいです 早速書いてみようぜぇ せっかくだから、俺はHello worldを選ぶぜ!1! Hello world with Perl(1/5) (再掲載)動かし方ですが、public-htmlの中にsample.cgiを入れてみて、IEだか Firefoxでhttp://127.0.0.1/sample.cgiへアクセス。 sample.cgiの中身は以下のものを記述して下さい #!/usr/local/bin/perl print("Content-type: text/html\n\n"); print("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">"); print("<html><head><title>Sample cgi with Perl</title></head><body>"); print("HELLO WORLD!"); print("</body></html>"); exit(0); 3行目のContent-typeってのが無いと、出力が出来ないのでとっても重要です。 4行目の長ったらしい奴は無いとHTML-lintですげー怒られます。詳しくはググっ て下さい。 ダブルクォーテーションを出力したい時は\”(頭に円マークをつける)で出力します。 Hello world with Perl(2/5) It’s a small world Hello world with Perl(3/5) 出力部分に日本語が入っていても動くかどうか試してみましょう #!/usr/local/bin/perl print("Content-type: text/html\n\n"); print("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">"); print("<html><head><title>Sample cgi with Perl</title></head><body>"); print("時よ止まれ! THE WORLD!"); print("</body></html>"); #コメント文は頭にシャープをつけるだけで良い exit(0); 1行目はコメントではありません。これは、このCGIがPerlで書かれていますよって 言う宣言です。これが無いと動きません。 サーバーによっては、/localの部分を消さないと動かない場合もあります。理由は ググったりヤフったりして下さい。 最後の行は処理を終えるっていう命令です。Javaで言うSystem.exit(0);です。中 身は0でも1でも何でもいいらしいですが怖いので0にします。 Hello world with Perl(4/5) 貴様はチェスや将棋で言う「詰み(チェック・メイト)」 にはまったのだッ! Hello world with Perl(5/5) …おかしいなあ。 実は昔のPerlでは出力部分に日本語が入っている と文字化けしてしまうのだ 文字化けする場合、print文の前に 「require("./jcode.pl");」という一文を付け加えて、 http://www.srekcah.org/jcode/ ここからjcode.pl-2.13をダウンロードしてsample.cgi と同じ所に入れて下さい。 最近のPerlでは標準装備されているらしく、jcode.pl はいらないみたいです もちろん、出力部分やコメント部分以外に日本語も とい2バイト文字が入るとエラーが出ますよ 変数と関数(1/3) 変数の定義の仕方ですが、たとえばxという整数型 の変数を定義したかったら(下の例は1を入れておき たい場合) $x = 1; と記述したら良いです。 yという浮動小数点型の変数を定義したかったら $y; と記述したら良いです。 実は、Perlには変数の型がありません。とっても曖 昧で、とっても直感的(はぁと) 変数と関数(2/3) 配列を宣言したい場合どうするのかと言うと @x = {1, 1, 2, 3, 5, 8, 13, 21}; こんな感じ。この中から例えば7番目の要素を取り出したい 時は print("$x[6]日の金曜日");と書けば、頭から7番目の要素、 ここでは13が出力されます(13日の金曜日)。つまり一番頭 は$x[0]って事ですなあ~ ちなみに、この後で$y = @x;の文を実行すると配列xの要素 数が返されますよ。この場合y = 8です print文に変数を入れる時、変数に入っている値を出力させ たい場合はダブルクォーテーションでくくって下さい。シング ルクォーテーションだとドルマークが出てきますよ! 実はprint($x[6]."日の金曜日");でも出力されます JavaだとSystem.out.print(x[6] + "日の金曜日");ですけど、 Perlじゃプラスではなくピリオドなんです 変数と関数(3/3) Javaで言うメソッドですけど、Perlではサブルーチンって言います。どうでもいいで すね。 書き方は以下の通り: sub サブルーチン名前 { my($1番目引数, $2番目引数, …) = @_; 何か処理; return 返り値; } 引数は{}の中に書かないといけません。Javaとは違うんです。 返り値の型とか書かなくていいんです。何と言う怠慢 my($変数の名前)というのは、{}で囲まれた所にしか通用しない変数ですぜって 事を宣言する物 local($変数の名前)というのもありますが、これはmyとは厳密には違ったもので、 処理する所で更にサブルーチンを呼んでも適用されると言う物です。 http://www.futomi.com/lecture/local/local.html myとlocalの違いについて、ここの一番下の例とかがわかりやすいかと思います。 これを書かないとグローバル変数になると思います。詳しくはググったりヤフった りして下さい。 if文とか if文ですが、} else if($x == 1) {とか書こうと思った らエラーが起きてしまいますよ 上の例では、} elsif($x == 1) {とするとおっけー 変数に文字が入っている場合、比較の仕方はif($x eq "test") {みたいな感じ 値を条件にしたければ==, !=, >=, <=, >, <等 文字を条件にしたければeq(equal), ne(not equal) 等 あとはJavaだのCだのと似たような感じ… コードは頭から読んでいきます。 Weblog重いんだよ…ブログパー ツ付け過ぎだろ常考… ファイル入出力とかする場合、ファイルのパーミッ ション(許可)とか指定しないといけない ゲーム系CGIは置けない所が多い(無料ページス ペースの場合) 文法チェックとかしたい場合は「Perl check.cgi 文 法」とかでググればいろいろ出てくるはず もし文法エラーがあるままアップロードしたりしたら 500 Internal server errorとか出てくると思うよ。他 の人に迷惑がかかるから速攻で削除しよう 今日やった奴以外の事 エターなった。 そのうち誰かがやるかもしれませんね。 だれかレポート自動作成するCGIつくってお ねがい
© Copyright 2024 ExpyDoc