-まず最初に --あんまり役に立たない内容なので期待しないことを推奨。 --ちょこちょこ更新していくつもりですが期待しないことを推奨。 --内容の精度に期待しないことを推奨。 --Linux・Unix用の箇所しかない(一部を除く)のでWindowsの人は期待しないことを推奨。 --これでも長いと思った人は(ry -PerlというかCGI(Common Gateway Interface) --について 1. CGIというのはウェブサーバと外部プログラムとの間のルールです。 2. CGIプログラムというのはCGIに従ってウェブサーバーに実行されるプログラムです。 3. Perlというのはプログラム言語です。 4. PerlはもともとCGIとはまったく無関係でした。 5. でもPerlはCGIプログラムに向いているのでCGIプログラムによく使われます。 -お約束 --Perlの一行目には必ず #!/usr/bin/perl --と入力すること。 --これで実行に使うPerlの位置をしている。 -改行コードについての注意 --これを覚えとかないと死亡フラグ。 1. WindowsとLinuxの改行コードは違う。 2. 正確にはWindowsは2バイト、Linuxは1バイト 3. 窓で書いたCGIを犬にそのままFTPで送る場合、正常に機能しない。 4. しかしFTPをテキストモードにしてからCGIを送ると、この問題は解決する。 -パーミッションについて --Linuxにはパーミッションというものがある。 1.パーミッションはアクセス権を設定するものである。 2.アクセス権には読み、書き、実行の三つがある。 3.また、2進数で表すこともある。 4.CGIのパーミッションの設定は、700が代表的らしい。(修正する気がないならセキュリティ上500でもいい気がする。) 5.詳しくはWEBで! -御託はいいからさっさと書いてみる --プログラムではお約束のHello World!を書いてみる #!/usr/bin/perl print "Hello World"; --これで出力の部分は完成。 --でもこれだけじゃ動きません。 -HTTPヘッダについて --CGIは何のデータ(HTMLやjpeg)を出力するかはきちんと決まってない。 --これでは、ブラウザ側に送られてきたデータが何のデータなのかわからない。 --なので、上のプログラムはこのままでは駄目。 --正しく動かすためには、正しいHTTPヘッダを自分で出力してあげないといけない。 --これを書くと #!/usr/bin/perl print "Content-type: text/html\n"; print "\n"; print "Hello World!"; --となる。\nは改行を表す。 --補足。HTTPヘッダの後には必ず空行を入れる。(print "\n"; のところ) --まとめ 1. CGIは最初に正しいHTTPヘッダを出力しないといけない。 2. CGIでHTMLを出力するにはHTTPヘッダ「Content-type: text/html」が必要。 3. HTTPヘッダの後ろには空行を出力する。 -デバッグ機能 --Perlにはバグが起きていそうな箇所を示す機能がある。 --先ほどのコードにそれを追加すると #!/usr/bin/perl use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n"; print "\n"; print "Hello World!"; --となる。 --つまり、use CGI::Carp qw(fatalsToBrowser); を追加するとデバッグ機能が使えるようになる。 // IP:"126.60.107.119" TIME:"2014-03-24(<abbr class="week_day" title="月曜日">月</abbr>)00:09:38" REFERER:"http://157.7.130.26/" USER_AGENT:"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36