| HTMLについての基礎知識 | → | HTML講座 |
| Perlプログラミングの基礎知識 | → | Perlプログラミング講座 |
| CGI についての基礎の基礎知識 | → | CGI作成前の基礎知識 |
| 『 Win系 』 | ||
| index.htm | = | Index.htm # 同一のファイルとして扱われる |
| 『 Unix系 』 | ||
| index.htm | × | Index.htm # 違うファイルとして扱われる |
| CGIスクリプト | 読み書きされるファイル |
| rwxr-xr-x ( 755 ) | rwxrw-rw- ( 666 ) |
![]() |
print "Content-type: text/html\n\n"; # ヘッダの出力 # 実際に表示させる内容 print "<HTML>\n" ; print "<HEAD><TITLE>Page Title</TITLE></HEAD>\n"; print "<BODY>\n"; print "Hello World"; print "</BODY>\n"; print "</HTML>\n"; |
| CONTENT_LENGTH | 標準入力に格納されたPOSTによる入力データのバイト数 |
| GATEWAY_INTERFACE | Webサーバが実行しているCGIのバージョン(大抵1.1) |
| OS | Webサーバの使用しているOS |
| HTTP_ACCEPT | Webブラウザが扱えるContent-typeの一覧 |
| HTTP_COOKIE | クッキー情報 |
| HTTP_HOST | ドメイン名 |
| HTTP_USER_AGENT | CGIページを要求したWebブラウザとOSを特定できる情報 |
| PATH | サーバのパス |
| QUERY_STRING | GETによりWebクライアントから送られるデータ |
| REMOTE_ADDR | 訪問者のIPアドレス |
| REMOTE_HOST | 訪問者のホスト名(取得できない時はIPアドレス) |
| REQUEST_METHOD | データの受け渡し方法 GET か POST |
| SCRIPT_NAME | CGIスクリプト名(URL) |
| SERVER_ADMIN | Webサーバの管理者に関する情報 |
| SERVER_NAME | CGIを実行しているマシンのホスト名(取得できない時はIPアドレス) |
| SERVER_PROTCOL | Webサーバが実行しているHTTPのバージョン情報 |
| SERVER_PORT | Webサーバが使用しているTCP/IPのポート番号(大抵は80) |
| SERVER_SOFTWARE | CGIを実行しているWebサーバ名 |
| Name | 入力値 |
| Text1 | Hello |
![]() |
| Text1=Hello |
| Name | 入力値 | Name | 入力値 |
| Text1 | Hello | Text2 | World |
![]() |
| Text1=Hello&Text2=World |
| Name | 入力値 |
| Text1 | あいうえお |
![]() |
| Text1=%82%A0%82%A2%82%A4%82%A6%82%A8 |
|
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @query = split(/&/, $buffer); foreach (@query) { ($name,$value) = split(/=/); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $query{$name} = $value; } |
| open ( IMG, "<$IMG_FILE_NAME" ) ; | # イメージファイルのオープン |
| print "Content-type: image/jpeg\n\n"; | # HTTPヘッダ出力 |
| binmode ( IMG ) ; | # イメージファイルをバイナリモードへ |
| binmode ( STDOUT ) | # 標準出力をバイナリモードへ |
| print <IMG> ; | # 画像ファイルを読み込みそのまま |
| close IMG ; | # バイナリモードで出力 |
| 1)他のプロセスからアクセスされない事 | ( 排他処理 ) |
| 2)プロセスが強制終了した時 | ( 以上終了時の対応 ) |
| if ( ! -f "Lockfile.txt" ) ; | # ロックファイルの存在確認 |
| open ( LF ">Lockfile.txt" ) ; | # ロックファイル作成 |
| } |
|
# ロック用サブルーチン sub lock{ # @ my %lf=(lockdir => './lockdir/', timeout => 30, trytime => 10 ); $lf{fname} = shift || 'lockfile' ; # A $lf{source} = $lf{lockdir} . $lf{fname}; for ( my $i = 0; $i < $lf{trytime}; $i++ , sleep 1 ) { if( rename( $lf{source}, $lf{lockname} = $lf{source}.time )){ return \%lf ; } } # B my @flist = glob($lf{lockdir}.'*' ) ; foreach ( @flist ) { if ( /^$lf{fname}(\d+)/ ){ if ( time - $1 > $lf{timeout} and rename ( $lf{lockdir} . $_ , $lf{lockname} = $lf{source} . Time ) ){ return \%lf } last; } } undef; } # Cロック解除処理 sub unlock{ rename ( $_[0]->{lockname}, $_[0]->{source} ); } # サブルーチン使用例 $lf = lock( 'Lockfile' ) || die ; 《ロック期間》 unlock( $lf ) ; |