@niftyの画像表示
@niftyの場合、下表のように通常のHPのディレクトリとCGIを実行するディレクトリが分離されています。
「cgi-bin」ディレクトリに画像ファイルを置いてもブラウザで表示することができません。
通常の画像ファイルは「homepage」ディレクトリに置きます。
本プログラムでは下記に示す画像格納ディレクトリと画像読出ディレクトリをHP上で設定できるようにしてあります。
これによって、CGIプログラムの変更が必要ありません。
|
分類 |
ディレクトリ名 |
参照URL |
HP用ファイル |
homepage |
http://homepage?.nifty.com/****/ |
CGI用ファイル |
cgi-bin |
http://hpcgi?.nifty.com/****/ |
|
■画像格納ディレクトリ
CGIで画像をアップロードして格納する場合に格納先を「homepage」ディレクトリに指定します。
その場合の格納先は「/」で始まる絶対パスを指定します。(http://は使えません)
/homepage/
■画像読出ディレクトリ
画像を読み出して表示する場合にhttp://のURLで指定します。
http://homepage?.nifty.com/****/
|
ディレクトリ構成
|
|---homepage ←通常のHPディレクトリ
| xxx.htm
| xxx.jpg
| xxx.gif
|
|---cgi-bin ←CGIのディレクトリ
| xxx.cgi
| xxx.pl
| xxx.txt
| xxx.gif (CGIで画像処理を行う場合: ex.カウンタ画像) |
|
相対パス、絶対パス、URLの違い
■相対パス
ファイルやディレクトリの場所を相対的な位置関係で示します。
カレントディレクトリ(現在のディレクトリ)を基準にします。
カレントディレクトリは「.(ドット1個)」、上位のディレクトリは「..(ドット2個)」で表します。
(例)下図の<ディレクトリ構成例>で
view.cgi から pic1.jpg、pic2.jpg に対して下記のように表されます。
pic1.jpg → ./pic1.jpg
pic2.jpg → ../photo/pic2.jpg
■絶対パス
ファイルやディレクトリの場所を絶対的な位置関係で示します。
最上位のディレクトリ(ルートディレクトリ)を基準にし、スラッシュ「/」から始まります。
(例) /****/photo/pic2.jpg (****はサーバによって異なります)
■URL(Uniform Resource Locator)
インターネット上に公開された情報のある場所を示します。
(例) http://xxxx/photo/pic2.jpg
但し、view.cgi から pic2.jpg を表示する場合、下記の2通りの記述方法があります。
<IMG src="http://xxxx/photo/pic2.jpg"> ←
これをURLの絶対パスと呼んでいます。
又は、
<IMG src="../photo/pic2.jpg"> ←
これはURLを相対パスで記述していますが上記URLに変換されます。
|
<ディレクトリ構成例>
|
|---view
| view.cgi
| pic1.jpg
|
|---photo
pic2.jpg |
|
パーミッション
パーミッションはファイルやディレクトリに対するアクセス権の設定です。
パーミッションは「755」など3桁の数値で表されます。
最初の値は自分(オーナー)の権限を示します。2番目は自分が属するグループの権限、3番目はその他の利用者の権限です。
各桁の数値は下表に示す権限の合計です。
例えば、「755」は 7 = 4 + 2 + 1 、 5 = 4 + 1 であり、自分は「読む+書く+実行する」の権限を持ち、
グループ及び他の人は「読む+実行する」の権限を持ちます。
一般的にパーミッションは、CGIファイルは「755」、読み書きするファイルは「666」、ディレクトリは「777」に
設定しますが、サーバによって設定が異なる場合がありますのでサーバ側の指定に従って下さい。
4 |
r |
読む (read) |
2 |
w |
書く (write) |
1 |
x |
実行する (execute) |
0 |
- |
権限なし |
|
スタイルシートの記述
スタイルシートの記述方法には下記の3通りがあります。
1.外部スタイルシートで記述する。
スタイルシートを記述した別ファイルを用意し、各HTML文書でそのファイルを参照する方法です。
2.各ページで記述する。
各HTML文書の中に <STYLE>
タグを使って記述する方法です。
3.各タグで記述する。
HTML文書の各タグにstyle属性を記述する方法です。
本CGIではプログラムに手を加えないで済むようにする為、外部スタイルシートを使っています。
ファイル名は「style.css」で各プログラムファイルの「xxxdata」ディレクトリの中にあります。
ファイルの内容を下記に示します。但し、各プログラムによって内容が異なる場合があります。
body,table {
font-family: メイリオ;
font-size: 10pt;
line-height: 140%;
}
body {
scrollbar-arrow-color:#777777;
scrollbar-face-color:#ffffff;
scrollbar-track-color:#f8f8f8;
scrollbar-3dlight-color:#f8f8f8;
scrollbar-highlight-color:#aaaaaa;
scrollbar-shadow-color:#aaaaaa;
scrollbar-darkshadow-color:#f8f8f8;
}
a {
text-decoration:none;
color:#8e8eff;
}
a:hover {color:#ff0000} |
文字の種類(メイリオ,MS Pゴシック)
文字のサイズ
行の高さ
スクロールバーの矢印色(#777777)
スクロールバーの色(#ffffff)
スクロールバーの背景色(#f8f8f8)
スクロールバーの上と左の枠の外色(#f8f8f8)
スクロールバーの上と左の枠の内色(#aaaaaa)
スクロールバーの下と右の枠の内色(#aaaaaa)
スクロールバーの下と右の枠の外色(#f8f8f8)
リンクの文字修飾(none、underline)
リンクの表示色(#8e8eff)
リンクにマウスを当てた時の色(#ff0000) |
|
Java Scriptの設定
Java Scriptを使用する場合、ブラウザの設定が通常は有効になっていますが無効になっていると正常に動作しません。
Java Scriptを有効にする設定方法をInternet
Explorer 5の場合について示します。
(1) [ツ―ル]メニューから[インターネットオプション]を選択します。
(2) [セキュリティ]タブをクリックします。
(3) [レベルのカスタマイズ]をクリックします。
(4) [スクリプト]の[アクティブスクリプト]で[有効にする]を選択します。
(5) [OK]をクリックします。
下記の記述例においてJava Script未対応ブラウザでは
<!-- から //--> までコメント扱いになります。
document.referrerによりアクセス元URLを取得します。
<script type="text/javascript">
<!--
document.write('<img src="http://xxxx/acs5.cgi?'+document.referrer+'"
width=1 height=1>');
//-->
</script> |
但し、HPのトップページがフレーム形式の場合は下記のように記述します。
例えば、下記のようなフレーム構成の場合は
menu.htm 又は main.htm のどちらか一方に下記のように
top.document.referrer
と記述します。
index.htm トップページ(親フレーム)
menu.htm (子フレーム)
main.htm (子フレーム)
<script type="text/javascript">
<!--
document.write('<img src="http://xxxx/acs5.cgi?'+top.document.referrer+'"
width=1 height=1>');
//-->
</script> |
|
カラーコード
カラーコードは # に続く 6桁の16進数(0123456789ABCDEF)で表されます。
最初の2桁が「赤」、次の2桁が「緑」、最後の2桁が「青」を表します。
数値が大きい程、その色が強くなります。この3色を組合わせて色が作られます。
赤 #FF0000 緑 #00FF00 青 #0000FF
下記にカラーサンプルを表示します。
#FFFFFF |
#EEEEEE |
#DDDDDD |
#CCCCCC |
#BBBBBB |
#AAAAAA |
#888888 |
#666666 |
#444444 |
#000000 |
|
#FEF5DA |
#FEE9C5 |
#FCC592 |
#DEB887 |
#CD853F |
#D2691E |
#C00000 |
#A0522D |
#800000 |
#5C4033 |
|
#FEF2BA |
#FFFF00 |
#FFD700 |
#FCE963 |
#BDB76B |
#B5A642 |
#999966 |
#808000 |
#556B2F |
#495133 |
|
#F0FFF0 |
#D5FDEC |
#7FFFD4 |
#7FFF00 |
#00FF00 |
#32CD32 |
#9ACD32 |
#6B8E23 |
#008040 |
#005100 |
|
#F0F8FF |
#E6FFFF |
#D3E3FE |
#00FFFF |
#00BFFF |
#6495ED |
#1E90FF |
#4169E1 |
#0000FF |
#00008B |
|
#F2E3F4 |
#EE82EE |
#FF00FF |
#C100C1 |
#BA55D3 |
#8000FF |
#8E8EFF |
#7B68EE |
#6A5ACD |
#483D8B |
|
#FFEEEE |
#FFD9EC |
#FFC1E0 |
#FF80C0 |
#FF007F |
#FF0000 |
#FF8000 |
#C71585 |
#800080 |
#5B005B |
|
|
カレンダー
■うるう年の求め方
西暦年が4で割り切れる年はうるう年です。但し、西暦年が100で割り切れる年は平年、400で割り切れる年はうるう年です。
■曜日の求め方
ツェラー(Zeller)の公式を使います。西暦Y年M月D日の曜日Wは下記の式から算出します。
W = (Y+int(Y/4)-int(Y/100)+int(Y/400)+int(2.6*M+1.6)+D)
% 7
但し、1月と2月は前年の13月、14月として計算します。
曜日は、W = 0:日 1:月 2:火 3:水 4:木 5:金 6:土
■国民の祝日
法律で定められています。
「国民の祝日」が日曜日の場合はその翌日を休日とする。(振替休日)
前日及び翌日が「国民の祝日」である日は休日とする。但し、日曜日及び振替休日を除く。
元日 |
1月1日 |
|
成人の日 |
1月第2月曜日 |
平成12年から改定 |
建国記念の日 |
2月11日 |
|
春分の日 |
春分日 |
|
昭和の日 |
4月29日 |
平成19年から改定 |
憲法記念日 |
5月3日 |
|
みどりの日 |
5月4日 |
平成19年から改定 |
こどもの日 |
5月5日 |
|
海の日 |
7月第3月曜日 |
平成15年から改定 |
敬老の日 |
9月第3月曜日 |
平成15年から改定 |
秋分の日 |
秋分日 |
|
体育の日 |
10月第2月曜日 |
平成12年から改定 |
文化の日 |
11月3日 |
|
勤労感謝の日 |
11月23日 |
|
天皇誕生日 |
12月23日 |
|
■春分の日、秋分の日
西暦Y年の春分日、秋分日は下記の計算式を用いています。(1980〜2099年に適用)
春分日(3月X日) X = int(20.8431+0.242194*(Y-1980)-int((Y-1980)/4))
秋分日(9月X日) X = int(23.2488+0.242194*(Y-1980)-int((Y-1980)/4))
|
ファイルロック
複数の人が同時に同一のファイルに対して読み書きを行なうと正常に書き込まれない場合があります。
そこで、ファイルロックによりCGIがファイルにアクセスしている間は他のCGIがそのファイルにアクセスできないようにします。
ファイルロックには以下の方法があります。
(1) flock
ファイルロック関数flockを使用します。
(2) symlink
シンボリックリンク関数symlinkを使用します。
この関数はファイルに対して別の名前で関連付けるシンボリックリンク機能を持っています。
ロック用のシンボリックリンクを作成しシンボリックリンクの有無によりロック状態を判断します。
(3) mkdir
ディレクトリ作成関数mkdirを使用してロック用のディレクトリを作成しディレクトリの有無によりロック状態を判断します。
本CGIプログラムではmkdirを使っています。
|
文字コード
日本語の代表的な文字コードを以下に示します。
(1) JISコード
日本語をマシン外部とやりとりするために作られた。沢山の種類があります。
ISO-2022-JPは日本語メールを送信する場合の主流の形式です。但し半角カナは使えない。
(2) Shift-JISコード
これはJISコードをシフトさせたものでWindowsやMacintoshなどのパソコンで広く用いられている。
マイクロソフト社とアスキー社が共同開発した。
(3) EUC(Extended UNIX Code)
EUCは主にUNIXマシンで用いられ、いろいろな言語用があります。
AT&T社によって定められた。
(4) ユニコード(Unicode)
このコードは全世界の主要な言語の文字を包含している。
マイクロソフト社、IBM社、アップル社などが設立したユニコード・コンソーシアムによって制定された。
|