Perl/CGI研究室 'PERL-LABO'

Perl/CGI研究室 'PERL-LABO' TOPへ
戻る(History.Back)

さらに改良、総仕上げ!

研究内容

当サイトで研究、作成したアクセスカウンター、結構いいものになりました! そこで、無料で皆様にご提供しようと思います。 そのために、最後の仕上げ!いくつか改良を行って、設定ファイルで詳細設定ができるようにして、 配布を開始します。

詳細

ついに自作CGIプログラムを配布

ここまで、いろんな研究をしてきましたが、アクセスカウンターに関しては、 そこそこ実用レベルのものができたように思います。 そこで、このアクセスカウンターを配布させて頂こうと思いました!

というのは、当サイトでは研究という形をとっているため、 各記事はそれまでに作成したプログラムを暗黙的に使用しています。 アクセスカウンターに関する記事も、完成といっておきながら、 実際に動作するCGIプログラムそのものはどこにもないというか、 プログラムそのものはウェブページ内で公開しているのですが、 複数のライブラリを使用していて、プログラムが細切れになってしまって、 当サイトの記事を見て、実際に動作する状態のCGIプログラムを 作るのは大変ですよね。

ですから、アクセスカウンターが完成した記念という意味も込めて、 完成版アクセスカウンター一式をダウンロードできるようにします。 実際に利用して頂くもよし、当サイトの記事と照らし合わせながら Perl/CGIの研究をしていたくもよし。もしよろしければ利用して頂きたいと思います。

配布する前に仕上げを

配布するということになると、できるだけしっかりしたものにしたいですよね。 それで、考えました。足りない機能はないか? おかしなところはないか?ということを。 そうすると、いくつか気になるところが出てきました。 そこで、配布する前に総仕上げとしてさらに改良を行います。

結果

足りない機能と修正箇所

アクセスカウンターは現状でもそこそこ実用レベルだと思いますが、 配布前にいくつか修正をしたいと思います。 以下、修正した箇所、追加した機能です。

1. 設定を別ファイルで行えるようにする。

現在、ファイル名などの設定がCGIプログラム本体の先頭部分にあります。 この状態だと、本体に修正があったとき、修正版への移行が大変です。 設定を別ファイルにしておけば、分かりやすいし、 バージョンアップがあった場合でも、 変更のあったファイルを新しいものに上書きするだけで バージョンアップ版に移行できます。

setting.cgi というファイルを作り、表示桁数などの設定を こちらに入れるように変更しました。 また、今までの研究で設定可能になっていたものの他に、 重複チェックを行うかどうかなど、 いくつかの項目をこの中で設定できるように変更しました。

2. 日付が変わった最初のアクセスは、IPアドレスの重複チェックを行わないようにする。

これ、ちょっと気になっていました。 午前 0 時にまたがってサイトを見ている人が一人だけいたとしましょう。 その人は、例えば 午後11時55分 にサイトに来たとします。で、その後記事をいろいろ見ていて、 午前 0 時になったとします。 IPアドレスの重複チェック機能により、カウンターの値は変わらず、そのままです。 でも、クッキーによる重複チェックによって、その日1日、その人のアクセスはカウントされません。 つまり、クッキーが午前 0 時を過ぎたら同じ人でもカウントするように処理しているのに、 IPアドレスのチェックでは午前 0 時を過ぎてもカウントしないようになっています。 これは、2つの重複チェックの方法がうまくかみ合っていないというか、なんかヘンです。 午前 0 時を過ぎたら、同じ人であってもカウントして、その日のアクセスを 1にするようにすべきではないでしょうか? 日毎アクセスという観点からも、この方が自然だと思います。 細かいことですが、変更しました。 重複チェックのところを少し変えるだけでできました。

2. カウンターの値を表示せずにカウントを行えるようにする。- 1x1透過gifの出力

カウンターはトップページに置くのが普通ですが、検索エンジンなどからサイト内の 1つページにだけ飛んできてトップページを見ないで帰る訪問者様もいると思います。 そういうアクセスもカウントしたい場合には、このカウンターをサイト内の全てのページに 仕込んでおくっていう方法があります。その場合、全てのページでカウンター画像を 表示する必要はなくて、カウントを表示せずにカウントだけしたいっていうことになります。 例えば画像のサイズを 1x1 にすれば見えなくすることはできますが、 そうすると、見えないのにCGIプログラムは一生懸命画像を作成してブラウザに送るっていう 無駄な処理、無駄な通信が起きてしまいます。 それならなにも表示せずにカウントだけするっていうモードがあった方がいいと思いました。 主に、サーバーへの負荷を減らすためですね。

IFRAMEタグで呼び出す場合は、単になにも出力しなければ いいだけなので簡単です。しかしIMGタグで呼び出している場合は、そうはいかないようです。 なにも出力しない(Location: image/gif だけ出力する)と、ブラウザは画像データが 読めなかったということでXマークを表示してしまうようです。 それで、どうするかと言うと、 1x1 の小さな、透明な gif 画像を用意しておいて、それを表示するように したらいいんですね。透明ですから、表示しても見えないし、 サイズも小さいから通信負荷なども小さいです。

さて、それには、いくつか方法があります。 例えば、gif 画像をCGIプログラムと同じディレクトリとかに おいて、HTTPヘッダの Location でその画像にジャンプする、なんて方法があります。 「Location: 〜.gif」という1行を出力するだけですから、これはとても簡単です。 でも、このやり方はサーバーに余計なリクエストが送らてしまいます。 ブラウザ「〜.cgiをください」→サーバー「代わりに〜.gifにしてください」→ ブラウザ「それじゃ〜.gifをください」→サーバー「はい、〜.gifです」というような やり取りが起こるわけですね。1往復の通信が余計にかかります。 ですので、CGIプログラムの中で gif ファイルの内容を読んで print 文で出力する、 というようにした方が、少し面倒ですけど、サーバーへの負荷は軽いです。 これなら、余計なやり取りはありません。 そしてさらにサーバーへの負荷を軽くする方法があります。 CGIプログラムの中にその gif ファイルを取り込んじゃうんです! そうすると、gif ファイルの内容を読むっていう処理がいらないので、さらに速いわけです。

ここまでも、ファイルアクセスはできるだけ少なくっていうのをいつでも心のどこかに おもいながらCGIプログラムを作成してきました。ファイルアクセスって、そんなに 負荷が大きいの?って言われると困るんですが、普通に print ってするよりも、 ファイルを開いて print FILE ってする方がたぶん何百倍もサーバーに負荷がかかると 思います。ですから、まあ速い、軽いにこしたことはないので、 CGIプログラムの中に透明な gif をあらかじめ用意しておいて、 それを出力するっていうやり方にしましょう。

透明でサイズが 1x1 の gif 画像ですが、データサイズが小さければ小さいほどGOODです。 通信が少なくて済みますし。で、試しにWindows付属のペイントでこれを作ってみたら、 サイズが 807バイト。これ、決して小さいとは言えませんね。 それでネットで探してみたら、120バイトのがありました。 もっと小さいのはないのかと思って、また試しに自分のホームページビルダー付属の ウェブアートデザイナーっていうソフトで作ってみたら、サイズが 45 バイトの 1x1 透明gif画像が 作れました!これは小さい。これなら満足です。

さて、この gif ファイルをCGIプログラムの中に取り込むっていうのはどういう意味かというと、 gif ファイルといえども中身は数値の集まりです。 1バイトは0〜255の数値で表されるんでした。45バイトというと、それが45個あるわけです。 仮にファイルを開いてこのgif画像の内容を読み込むと、45バイト、文字列なら半角 45文字分のデータが読み込まれるわけです。 それなら、この45文字分のデータを最初から配列かなにかにして CGIプログラムに入れておけば、ファイルを読まなくても済むっていう寸法です。 画像ファイルっていうと分かりにくく感じますが、例えば 「こんにちは」って書いてあるファイルを開いて中身を読んでそれを出力するより、 最初から print "こんにちは" ってしちゃう方がずっと速いっていうのと同じですね。

さて、これをやるためには、gifファイルの中身のデータを知らなきゃいけません。 Windowsにそういうツールがあればいいんですが、どうもWindowsというやつは テキスト以外のファイル、いわゆるバイナリファイルを開くツールっていうのは 無いんですよね。でも大丈夫。そういうCGIプログラムを作ればいいんですから!

そして作りました。gifファイルの内容を読んで、そのデータをPerlの配列に使える 状態で画面に表示するプログラムです。 なんだか本題とはそれていますが、まあこれも研究の一環ということで…

#!/usr/bin/perl

$fname = "1x1.gif";

print "Content-type: text/html\n\n";

if (! open(FILE, "< $fname")) {
	print "File open error.";
	exit;
}
binmode(FILE);
$size = -s $fname;
$r = read(FILE, $buf, $size);
if ($r != $size) {
	print "File read error.";
	exit;
}
close(FILE);

for (0 .. $size - 1) {
	$c = substr($buf, $_, 1);
	print sprintf("0x%02X, ", ord($c));
}

新しいことがいくつか出てきています。 これ実は、gifcat.pl の中を眺めていたときに覚えたものばかりです。 まず、-s $fname というところですが、これはファイルの大きさを取得しています。 そしてファイルを開いて、binmode を呼びます。これはWindowsの場合だけ必要ということですから、 必要無かったのですが、入れてみました。バイナリモードで読み込みますっていう意味ですね。 そして、read 関数でファイルの中身を読み込みます。今まで、ファイルを読むときはいつも <FILE> ってしていました。これ、改行コードを見つけるまでを読むとか、 改行コードで区切って配列に入れるとかいう意味になるんでした。 今回はバイナリファイルで改行コードとかで区切られても困りますので、これは使えません。 代わりに、read 関数を使うわけです。read 関数は、read(ファイルハンドル, 変数, 長さ) というように 使います。読み込む長さは、ファイルの大きさ。このために -s $fname としてファイルの大きさを 調べていたんですね。これで、一気に(といっても45バイトですけど) ファイルの中身を読み込んで変数 $buf の中にデータを入れます。 そんで、read 関数は読み込んだサイズを返すので、念のため全部読めたかどうかを確認しています。 あとは、for文を使って、substrで1文字ずつ取り出し、ord関数で元の値に戻して、sprintf関数で 16進数に直して出力しています。sprintf の %02X というやつは、2桁の16進数で表示してくださいっていう 意味になります。

このプログラムを実行するとこうなります

0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00,
0x80, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x21, 
0xF9, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x08, 0x04, 0x00, 
0x01, 0x04, 0x04, 0x00, 0x3B, 

これが、45バイト透明gif画像ファイルのバイナリデータになります。 0x というのは、後ろの2桁が16進数ですっていう意味です。 それでは、これをそのままgifデータとして出力するCGIプログラムを作って テストしてみましょう。

#!/usr/bin/perl

@toumeigif = (
	0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00,
	0x80, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x21, 
	0xF9, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 
	0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x08, 0x04, 0x00, 
	0x01, 0x04, 0x04, 0x00, 0x3B
);

print "Content-type: image/gif\n\n";

binmode(STDOUT);
foreach (@toumeigif) {
	print pack("C", $_);
}

配列にgifデータを入れて、foreachで1バイトずつ出力します。 pack関数というのは、フォームデータのデコードのところで出てきました。 数値に対応する1バイトの文字に変換してくださいっていうものでしたね。

これを実行するとこうなります。 エラーは出ませんが、透明だしサイズが1x1だし、これでは成功したかどうか分かりません (^^; そこで、本当に透明かどうか、背景に色を付けてためしてみましょう。


100x100で表示

うーんバッチリ!ちゃんと透明で、背景が見えています。 黒い枠は、border属性でわざと付けています。 試しに、枠の中で右クリックしてプロパティを見てみてください。 種類GIFイメージ、サイズ45バイトって出ていれば完璧です。 これで、CGIプログラムからファイルを参照せずに透過gifファイルを出力する方法が分かりました。

さて、ようやく本題に戻ることができます。 CGI呼び出し時の表示方法指定で ?v=none とした場合、 この小さな透過gifを出力するようにしました。 全てのページでアクセスカウンターを呼び出す場合、こうすると動作が軽くなります。 例えば、桁数を5桁にしていたら、5個のファイルを読み込んでそれを出力するんですから、 それに比べたらずっと速いです。…といっても、どれくらいの負荷軽減になるのか 具体的には分からないんですけど (^^;

4. カウント履歴表示画面にタイトルとトップページへのリンクを付ける。

サイトのカウント履歴を公開する場合を考えると、 サイト名やサイトのトップページへのリンクがそこにあった方がいいですよね。 ですので、これらを付けられるようにします。 ウェブページには、トップページに戻るためのリンクを付けるっていうのはやっぱり基本です。 そうでないと、どこにも行けずに訪問者さんが困ってしまいますもんね。 この機能は特に難しいものではありませんでした。 タイトル、トップページへのURLは設定ファイル内で設定します。 一応、設定しないこともできるようにしました。

5. アクセス履歴画面の日毎カウントに曜日を付ける。

アクセスって毎日同じじゃなくて波がありますよね。 特に週末は平日よりもアクセスが増えるのが普通みたいです。 アクセス履歴のグラフを眺めると、このアクセス数の波があるんですが、 このアクセス履歴、日付は表示しますが曜日を表示しないので、 その並が曜日の違いによるものなのかどうかが分からず不便でした。 そこでアクセス履歴画面の日付の横に曜日を付けることにしました。

年、月、日が分かっているわけですから、曜日もそこから求めることができる… と思うのですが、やり方が分かりません (^^; 曜日を求める手段として知っているのは localtime(time()) の戻り値の中に 0〜6 っていう数字で曜日が入っているっていうことくらいです。 そこで、これを使って曜日をアクセス履歴ファイルに保存することにしました。

保存する方法ですが、保存するデータを増やすわけですから注意が必要です。 データファイルっていうのは、後でデータを増やせるような柔軟な構成にしておいた方がいいんだっていうことを 痛感しました。 今までのデータを捨てて新しくアクセス履歴を保存し直すのなら、 好きなように保存すればいいのでしょうけれど、 もったいないですから、 今までのアクセス履歴を捨てずに、 曜日を追加するっていうやり方を考えました。 今までのデータファイルは次のような構成でした。

日付<>カウント

ちょっと考えて、次のようにすることにしました。

日付,曜日番号<>カウント

こうしておいて、ファイルから読み込んだ後に日付と曜日番号をばらして取得します。 このとき、曜日番号がない、昔保存したアクセス履歴データだった場合は、 曜日無しということで曜日を表示しないようにします。 これは、結構簡単にできます。こんな感じです。

($date, $week) = split(',', $val);
if ($week ne "") { 曜日番号が有りの処理 }
else             { 曜日番号が無しの処理 }

Perlって本当に文字列処理が得意ですよね。 データファイルの仕様変更にも結構柔軟に対応できます。

6. カウント履歴画面の月間、年間アクセスで日平均を表示する。

今まで、月間、年間アクセスの履歴は総アクセス数のみ表示していましたが、 日平均も表示した方がアクセスの変動を見るのによさそうです。 平均を求めるには 総アクセス数 / 日数 です。 各月、各年のカウント数の和を求める時に、日数も保存するようにして、 その平均を画面に表示するように変更しました。

7. カウント履歴画面のグラフ幅に style="width:〜%" を使う。

これも細かいところなのですが、 これまで、グラフの最大幅をピクセル数で指定してやる必要があったんです。 でも、style="width:〜%" を使えば、最大が100%なわけなので、 わざわざ最大幅を指定しなくても画面いっぱいにグラフがかけるっていうことに気がついたんです。 で、修正しました。おかげで、設定項目が1つ減りました。 設定項目は少ない方が分かりやすくていいですね (^^

8. カウント履歴画面に過去の全ての日毎カウント履歴表示機能を付ける。

これはたぶんあった方がいい機能です。 カウント履歴はカウンターを設置してからの全ての日について残っています。 ですから、それを全部見る機能というのはあって然るべきですね。 表示する量が多くなるので、見たい時にだけ見れるようになっていればOKですね。 カウント履歴ページの中に、全ての履歴を表示するっていうリンクを付けました。 これは、?v=graph&span=all っていう形でCGIプログラムを呼び出します。 修正は、ループする回数を変えるだけなので難しくありませんでした。

この機能は、CGIプログラムが、自分自身へのリンクを出力するということですが、 そのために、自分自身のファイル名が必要かと思ったんですが、 試してみてその必要がないことが分かりました。 というのは、<a href=?〜> とやると、 現在のURLの ?〜 の部分を指定した ?〜 に変えたものが 呼び出すURLになるようなのです。そういえば、#名前 なんかも、 現在のページの指定したnameにジャンプしますもんね。それと同じなんだと思います。 ですから、自分自身のファイル名は必要ありませんでした。また1つ学びました (^^

9. カウント履歴のシンプル表示。

アクセスカウント履歴は、ブラウザの横幅一杯を使ってグラフを表示するように なっています。でも、このグラフとか必要なくて、日付と数字だけシンプルに表示したいっていう こともあるかな?と思ってそういう機能を足しました。 ?v=simple という形でCGIプログラムを呼び出すとこれになります。 横幅が小さくて済むので、これを使うとIFRAMEなどで呼び出せば画面のサイドとかに 最近のアクセス数履歴を表示するなんてことができます。…そんなことしたい人いないか (^^;

10. カウント履歴の表示にパスワードをかけられるように。

カウント履歴を訪問者に見られないようにする機能です。 こんな機能が必要かどうか、疑問もありますが… (^^ しかし、たぶん、数あるアクセスカウンターの中でも、こんな機能をもつものは少ないでしょうね。 オリジナリティがあっていいんじゃないでしょうか (^^; 設定ファイルで、パスワードを設定した場合はそのパスワードが無いとカウント履歴が表示されないようにしました。

11. 現在のカウントの表示にパスワードをかけられるように。

ついでに、通常のカウント表示にもパスワードを設定できるようにしました。 これは、現在のアクセス数すら人には知られたくないっていう場合で、 しかも、カウントを非表示にしていてもまだ不安だっていう人には喜んでもらえる機能です。 …そんな人いないか…。

12. カウント履歴画面にもトータルカウントを表示。

これはなんとなく、あった方がいいような気がしました。

13. 各ファイルに連絡先を書いておく。

配布する場合、そのファイルについての問い合わせ先をファイルの中に 書いておいた方が良さそうです。 と思って、各ファイルの先頭にこのサイトのURLを書いておきました。

14. カウント履歴画面の色やフォントを設定できるように。

カウント履歴画面は管理人のデザインによるもので、 こればっかりは皆さんたぶん自分好みのものに変更したくなるのではないでしょうか。 最初は、HTMLソースのところを自由に変えて頂ければ…くらいに考えていたんですが、 設定ファイルを別にして、バージョンアップがあったときもファイルの上書きだけで 済むようにする…という発想から考えると、デザインの変更なども設定ファイルの中で 行えるようにしておかないと、後で困りますよね。

でもデザインと言っても設定で大きく変えられるものでもありません。 ですから、背景色やフォント、フォントサイズ、グラフの棒の色、その程度ではありますが、 設定ファイルで自由に変更できるようにしました。

この色設定、好みの色を見つけるのって結構大変ですよね。 色のセンスがある人なら簡単なんでしょうけど、私などは適当に色を変えてみて 実際に表示させてみて、これでいいかな?とか試行錯誤するタイプです。 HTMLファイルの場合はそれもそれほど苦痛ではありませんが、 CGIプログラムの場合は、設定を変更して、アップロードして、リロードして、と 結構面倒です。そこで、あらかじめ、 gray red green blue cyan magenta yellow の色タイプを用意することにしました。 とはいっても、RGBのどれを強めにするかを選ぶだけの色変更なんですけど…。 これら以外の自分の好きな色を設定することもできます。こういう風に あらかじめ何通りかの設定を用意しておいて、 自分で詳細設定もできるようにする、というのは使う人のことを考えた、 良い配慮だと思います。自画自賛だ (^^;

15. HTMLヘッダ、HTMLフッタの出力を別ライブラリ関数にする。

これは、いつも通り、アクセスカウンター以外のCGIプログラムでも使えるようにするためです。 HTMLヘッダにはスタイルシートが含まれていて、 上に書いた、gray red green blue cyan magenta yellow の色タイプを選べるとかいう 機能はこのライブラリ関数の中で処理するようにします。 そうすれば、これから作るCGIプログラムでも、なにか画面表示するときにはいつでも この色タイプから色を選べたり自分で色を設定できたりっていうことができるわけです。 それぞれのCGIプログラムの画面の統一性もはかれますし、なにより、 楽ちん (^^ HTMLフッタというのは、CGIプログラムの名前と、このサイトへのリンクです。 CGIプログラムを配布するにあたり、やっぱり著作権表示といいますか、 私が作ったんです、みたいな主張がしたいと思いまして…。 それで一応、カウント履歴ページのこのサイトへのリンクは削除禁止とさせて頂きました。 それくらい、いいですよね…?

さて、この、色設定を設定ファイルで行うっていうのに関して新しいことがでてきました。 パッケージ内の変数にアクセスするとき、たとえば %plab::Cookie みたいに、 パッケージ名::変数名 としてアクセスするんでした。 逆に、パッケージの中から、パッケージでないメインのCGIプログラムにある 変数にアクセスするにはどうしたらいいのでしょうか? というのは、色設定は設定ファイルの中の変数で行うのですが、 この変数は、パッケージの外のメインのCGIプログラム内の変数になるみたいなんです。 例えば、$color という変数が設定ファイルの中にあって、それをパッケージ内から アクセスしようとして $color としてもダメです。値が入っていない、別の変数として 処理されてしまいます。

これ、次のようにするのが正解のようです。

$::color

なんだかヘンな感じですが、パッケージでないところっていうのは、 名無しのパッケージ?みたいな感じでしょうか。 この、変数のスコープっていうんですが、結構トラブルの元になりそうなので 注意が必要かも知れませんね。

なお、色設定以外の設定は全て関数の引数としてライブラリに渡しているので、 この問題は今まで出てきませんでした。

16. メインルーチンもライブラリにしちゃう。

後々のことを考えて、今までcgiファイルにあったメイン部分も新しくライブラリにしちゃいました。

17. plファイルを1つにまとめる。

さあ、いよいよ本当の総仕上げです。 現在思いつく修正、改良箇所はこれで最後です!

私はライブラリファイルを作るのが好きなため、 ライブラリファイルの数がどんどん増えていきます。 このアクセスカウンターは、計10個のファイルとなりました。 ですので、実行するたびに10個のファイルへのアクセスが発生することになります。

さて、ファイルへのアクセスというのはなるべく少なく、というのが私のポリシーでした。 ですので、ファイルへのアクセスを減らすために、配布するCGIプログラムに関しては ライブラリを1つのファイルにまとめようと思います。 2〜3個のファイルを1つにまとめるというならそんなに変わらないように思いますが、 このアクセスカウンターの場合は10個のファイルが4個に減ります。 実際に読み込むテキストサイズは同じですが、 ファイルの位置を探し、ファイルをオープンし…という処理の回数が減る分、 サーバーへの負担が少しは減ると思われます。 なにしろ完成品。開発中はこんな効果があるかどうかわからないようなことを するのはむしろ良くないことですが、完成品とあれば、やっておくべきかな?と思います。 それに、単にCGIプログラムを利用するだけの人にとってはファイルの数は少ない方がスッキリします。 アクセスカウンターにファイル10個は多いですよねぇ (^^;

か、か、完成!!!

これで、ついに完成です!!

このページにて、今までと同じように、完成版のCGIプログラムを紹介しようと思ったんですが、 全部つなげると20KB弱になりますので、ズラズラとそれを紹介しても仕方がないと思いまして、 やめておきます。

完成版アクセスカウンター、Plab Counter という名前にしたんですが、 これをダウンロードできるページをトップページの上の方に用意します。 皆さんに配布するために、ダウンロード方法や設置方法、設定ファイルの説明などの ドキュメントを作らないといけませんが、近日中にアップします。 既にネットのあちこちで配布されているアクセスカウンターですが、 このページで研究した最後の改良も加わって、 それらのカウンターにも負けない、良いカウンターになったと思っています。 是非ダウンロードして、使ってみてくださいネ!

分かったこと

  1. -s ファイル名 でファイルサイズを得ることができます。サイズはバイトで返ります。
  2. バイナリファイルは read 関数で内容を読みます。read(ファイルハンドル, 変数, 長さ) です。読み込んだ長さが返ります。
  3. <a href=?〜> とやると、現在のURLの ?〜 の部分を指定した ?〜 に変えたものが呼び出すURLになるようです。
  4. パッケージ内からメインの変数にアクセスするには $::変数名 とします。
Perl/CGI研究室 'PERL-LABO' TOPへ
戻る(History.Back)

Copyright (c) 'PERL-LABO' All Rights Reserved.  リンクフリーです。