ブログで趣味でプログラミングからお料理まで呟いています。よろしくー。(^-^)/


先月  2021年 5月  来月






1
2 3 4 5 6 7 8
9 10 11 12 1314 15
16 17 1819 20 21 22
23 24 2526 27 28 29
30 31





文字サイズ変更:
トップページ > Perlについて

●Perlについて●

2021-05-25 20:24:00

エラーについて

Perl単体で動かすならば、エラーも捕捉しやすいかもしれませんが、CGIになり、ホームページを出力するとエラーが非常に分かりにくいと思います。出ないか、大体「500サーバーエラー」が多かったりします。私もメモ代わりに書いておこうと思います。

1.まず、一番最初、CGIの1行目にPerlのパスを書きますが、レンタルサーバーでのPerlのパスがあっているか、確認すること。

「#!/usr/bin/perl」とCGIファイルの一行目に書くと思いますが、Perlのパス(/usr/bin/perl)はレンタルサーバーで確認してくださいね。


2.つぎにパーミッション。

CGIファイルは、大抵755か705です。
そして、読み込むlogファイル、datファイル、txtファイルは600が多いと思います。
606の場合もあります。
FTPアプリで属性などと表示される場合がありますが、それを変更します。パーミッションは別の機会で説明しています。


3.それから、シンタックスエラーがないかどうかを探ってみましょう。DOSプロンプト(Windows10などは左下の「ここに入力して検索」にcmdと入力すると、コマンドプロンプトというアプリが表示されます)で、それで、CGIファイルのシンタックエラーを探します。

CGIのあるフォルダに行き着いたら、「perl -c xxx.cgi」xxx.cgiはご自分のCGIファイル名を入力します。そしてエンターキーを押します。
何もエラーがなければ、「xxx.cgi syntax OK」と表示されます。
エラーがあれば、そのエラーの説明の行の一番最後の数字が、エラーのある行なので、Windowsアプリのメモ帳エディターでCGIファイルを開いて、その行を見てみましょう。個人的には、メモ帳より、エディターをオススメします。行の数字が表示されたり、テキストなのにいろいろな関数などを色分けして表示さてくれるので、非常に便利です。


4.そもそもHTMLの出力を忘れている…?
print Content-type:text/html\n\n;


HTMLタグの前に、必ず必要になる文言です。

\nは、改行に当たります。必ず2つ改行を付けてください。


5.シンタックスエラーは取ったのに、思うような処理ができない。
こんな時は、処理の中で変数の値をHTMLに表示させることをオススメします。
特にfor文やfoereach文やwhile文の中で、表示させたり、if文やunless文などの条件分岐の中で表示させると、思い違いを発見しやすいですよ。
Print Twitter(test) short URL いいね:88

back to the TOP
2021-05-18 11:44:00

ツェラーの公式

ツェラーの公式とは、ある日付から、曜日を算出する公式です。

wdayが0 なら日曜日、6 なら土曜日になります。但し、 month は1月、2月を 13、14 としておきます。
グレゴリオ暦の日付に対して有効です。

出典「suikawiki」より

※追記(2023/01/03)
ツェラーの公式のコードを記述します。

sub wday { my ($year, $month, $day) = @_; if($month < 3){ $month += 12; $year--; } return ($year+int($year/4)-int($year/100)+int($year/400)+int((13*$month+8)/5)+$day)% 7;

Print Twitter(test) short URL いいね:73

back to the TOP
2021-05-13 16:04:00

ブラウザのキャッシュが表示されてしまう問題について。

Webブラウザの中で、CGIで処理後、表示しても、ほんの一部の表示違いくらいだと、キャッシュが表示されてしまう。この問題の解決策は、以下の通り。

print "Pragma: no-cache ";
print "Cache-Control: no-cache ";
print "Expires: Tue,01 Dec 2005 12:00:00 GMT ";

CGI側ではこう書きます。
1「Location:」の前に、print文で処理する。
2「print "Content-type:text/html ";」の時は、この後に上記3行を追記する。
※" "を忘れずに追加すること。


ブラウザ側にキャッシュさせないので、最新の情報がブラウザ側に表示されます。

またhtmlタグには以下のように書きます。

<meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Expires" content="Thu,01 Dec 1994 16:00:00 GMT">


<haed></haed>タグ内の先頭に書いておきます。


それと、CGI/Perlではないのですが、同じ問題なのでここで書いておきます。
Jascriptで、キャッシュさせないようにするには、以下のように書きます。

<script> window.onbeforeunload = function() { // IE用。ここは空でOKです }; window.onunload = function() { // IE以外用。ここは空でOKです }; </script>

以上。
Print Twitter(test) short URL いいね:98

back to the TOP


PR (i)