前回からの続き「phpプログラム」の説明

JUGEMテーマ:プログラミング

 

phpプログラムを使ったファイルのアップロードです。

サーバのほうに置くプログラムは2つあります。

1.クライアント側(パソコン側)で動作する、HTMLと
2.サーバ側でそれを受け取ってファイルを保存するプログラム(php)です。

1.uploadcr.phpについて

クライアント側のuploadcr.phpを見てください
3行目の文字の形式はphpの場合はcharset=utf-8にしておいてください。ほかの文字ではエラーとなる場合があります。
7行目の<form>から14行目の</form>までがファイルをアップロードする手順となります。



7行目でaction="upload.php"を12行目のtype="submit"のボタンを押したとき実行します。
method="post"とenctype="multipart/form-dataがサーバのポストにformのデータを送るよ(アップロード)と知らせます。

9行目のtype="hidden"は表示しないという意味、
name="MAX_FILE_SIZE"、value="10240"はphpプログラムに
最大ファイルの大きさは10240バイト(10Kb)ですよと伝えます。
もっと大きなファイルをアップロードしたいときは、数字を変えてください。

10行目のtype="file"、name="upfile"はupfileという名前をつけてファイル形式のものを入力しますということ。
value="30"は枠の大きさです。

7行目のaction="upload.php"を12行目で実行されたときは次のようになります。


2.upload.phpについて

9行目のif文は!がではないとき(false)を、is_upload_fileがアップロードされたファイルがあるかを表します。
$_FILES["upfile"]["tmp_name]は、upfileが前にinputで指定した名前、
tmp_nameはサーバが一時的に保存するためにつけたファイル名です。
意味はアップロードしたupfileがなければ10行目でメッセージを表示して終了(die)します。

13行目のif文は$_FILES["upfile"]["name"]の[name]は前にinputで入力されたクライアント側のファイル名です。
!=はでないとき(not)なので
意味は、ファイル名がsumaho.htmlでなければ、メッセージを表示して終了します。
(sumaho.htmlだけをアップロードするため、これを削除すれば何でもアップロードできますが危険が増します。)

upload.php



17行目のif文は、move_upload_fileで次に書かれた作業(移動)が成功したかどうかを調べます。
$_FILES["upfile"]["tmp_name"]をフォルダ名"files"の$FILES["upfile"]["name"]で保存します。
成功すれば、18行目でchmodでパーティションを644に設定し、19行目で表示します。

失敗すれば、20行目、21行目で失敗したことを知らせます。

24行目はphpプログラム終了ですが、なくても動きます。


ただいま編集中です


JUGEMテーマ:PC関連
| PHPプログラム | 16:48 | comments(0) | trackbacks(0) |

アクセスカウンターを作ってみる(PHP版)今日昨日

アクセスカウンターで今日の分と昨日(正確には前回)分を追加してみました。
参考に二重カウント禁止の例も書いておきました。

まず、今日かどうかを判断しているだけで、仕組みはまったく同じです。
今日かどうかは日付をfile2の1番目に記憶しておいて今日かどうか判断しています。
他にもいろいろなやり方が考えられますが、一般的ではないでしょうか
弱点としては、1か月以上アクセスがなく同じ日が次回だと正確には動きません。

<?php
//パラメータを受け取る
$param = $_GET["teracount"];
if($param!="kyo"){exit(10);}

//ファイルを開く
$fp = fopen("file2.dat","r");
$tera = file("file2.dat");
fclose($fp);
$f_day = $tera[0];
$su = $tera[1];

//今日かどうかしらべる
$today = getdate();
$mday = $today['mday'];
if($mday!=$f_day){
$fp = fopen("file3.dat","w");
flock($fp,2);
fputs($fp,$f_day.$su);
flock($fp,3);
fclose($fp);
$su = 0;}

//カウントをする
$su = $su + 1;

//ファイルに保存する
$fp = fopen("file2.dat","w");
flock($fp,2);
fputs($fp,$mday."¥n".$su);
flock($fp,3);
fclose($fp);

//javaスクリプトの文字セット
header("Content-type: application/x-javascript");

//カウントの文字数
$st_len = strlen($su);

//カウントのゼロを表示
for($i=0;$i<(3-$st_len);$i++){
$h_img = "<img src='http://localhost/counter/img/0.gif'>";
$hyouji = "document.write(¥"".$h_img."¥")¥n";
echo $hyouji;
};

//カウントを絵文字で表示
for($i=0;$i<$st_len;$i++){
$j = substr($su,$i,1);
$h_img = "<img src='http://localhost/counter/img/".$j.".gif'>";
$hyouji = "document.write(¥"".$h_img."¥")¥n";
echo $hyouji;
};

?>


追加されているプログラムの説明です。

//今日かどうかしらべる
$todayに今日の日付を入れる(getdata())
$mdayに今日($today)の日付(’mday')を入れる
もし、前回の日付($f_day)と今日($mday)が違っていれば
今日の日付を昨日(file3)に記憶する。とともに今日のカウント(su=0)をクリアする

設置方法は前回と同じです。

例)

<body>
今日
<script type/javascript" src="http://localhost/test3.php?teracount=kyo">
</script>
</body>


昨日分は今日かどうか調べたときに作った昨日分を表示するだけです。

<?php
//パラメータを受け取る
$param = $_GET["teracount"];
if($param!="kino"){exit(10);}

//ファイルを開く
$fp = fopen("file3.dat","r");
$tera = file("file3.dat");
fclose($fp);
$f_day = $tera[0];
$su = $tera[1];

//javaスクリプトの文字セット
header("Content-type: application/x-javascript");

//カウントの文字数
$st_len = strlen($su);

//カウントのゼロを表示
for($i=0;$i<(3-$st_len);$i++){
$h_img = "<img src='http://tela.daa.jp/counter/img/0.gif'>";
$hyouji = "document.write(¥"".$h_img."¥")¥n";
echo $hyouji;
};

//カウントを絵文字で表示
for($i=0;$i<$st_len;$i++){
$j = substr($su,$i,1);
$h_img = "<img src='http://tela.daa.jp/counter/img/".$j.".gif'>";
$hyouji = "document.write(¥"".$h_img."¥")¥n";
echo $hyouji;
};

?>

設置方法は今日とまったく同じです。


二重カウントを取らないときは、IPアドレスを記憶しておき
今日と同じように前回と同じならカウントしないようにしてください。
ただこの方法だと間にほかの人がアクセスすると効果はありません。

参考:
//ファイルを開く
$fp = fopen("file4.dat","r");
$tera = file("file4.dat");
fclose($fp);
$f_ipaddr = $tera[0];

//IPアドレスを取得する
$ipAddress = $_SERVER["REMOTE_ADDR"];
$host = gethostbyaddr($ipAddress);
$fp = fopen("file4.dat","w");
fputs($fp,$host."¥n");
fclose($fp);

//カウントをする
if($host!=$f_ipaddr){
$fp = fopen("file4.dat","w");
flock($fp,2);
fputs($fp,$host);
flock($fp,3);
fclose($fp);
$su = $su + 1;}

JUGEMテーマ:PC関連
| PHPプログラム | 10:13 | comments(0) | trackbacks(0) |

アクセスカウンターを作ってみる(PHP版)その3

前回の続きです。

3.サーバにそのプログラムとデータをアップロードする。

サーバを用意する必要があります。
自宅で用意する人もいますが、普通はレンタルサーバを借ります。

レンタルサーバとは、たとえば、高級マンションの部屋を借りるようなもので
家賃を払うかわりに、設備や清掃などメンテナンスをしてくれるもの

ちなみに、プロパイダとは、電話会社のようなもので
契約すると、電話番号(グローバルIP)を貸してくれる。
もちろん、レンタルサーバにも電話はあり、365日つながっています。
しかし、1本しかないので電話番号は貸してくれません。

いまロリポップサーバを使っていますが、
月100円で10GBありますので、
個人のホームページであれば十分な容量です。
なんといっても安いのがいいです。

もちろん無料サーバでもよいですが、
勝手に広告が掲載される場合が(これでサーバ代にしている)
多いです。

前回作ったものを、自分のパソコンで動作を確認したのち
(数字の画像データは「カウンター画像」で検索するといっぱい出てきます。
ので、好きなものダウンロードしてください。)

PHPファイルとデータfile1と数字の画像データ(0.gifから9.gif)を
ホームページと同じでサーバにアップロードします。

その時、サーバのフォルダやファイルには、パーミッション(許可権)というのがあります。
何を許可するかを指定します。
順番は、所有者、グループ、その他の順で
読み出し(r)は4
書き込み(w)は2
実行(x)は1
で表します。

従って、
フォルダと実行ファイル(php)は
所有者はすべての4+2+1=7
グループ・その他は読み出しと実行の4+1=5
で755を指定して

データ(file1)は
実行しませんので、読み出し、書き込みで4+2=6
で666

画像データ(.gif)は
所有者は呼び出し・書き込みの6
グループ・その他は書き込みませんので呼び出しの4
で644

を指定おけばよいと思います。

4.ホームページやブログ上にそのPHPを実行するタグを入れて、アクセスのつど呼び出す。

前回その2で書いたJavascriptをカウンターを設置したい場所に置く

以上ですが、サーバにアップロードするとphpを実行する場所がサーバに変わりますので、
間違えないように場所を変更してからアップロードしてください。



JUGEMテーマ:PC関連
| PHPプログラム | 18:39 | comments(0) | trackbacks(0) |

アクセスカウンターを作ってみる(PHP版)その2

前回のつづきです。

2.テキストエディタ等でPHPのプログラムをつくる。

テキストエディタ(terapad等)で次のとおりコピー&ペーストしてください。

<?php
//パラメータを受け取る
$param = $_GET["teracount"];
if($param!="tera"){exit(10);}

//ファイルを開く
$fp = fopen("file1","r");
$tera = file("file1");
fclose($fp);

//カウントをする
$su = $tera[0] + 1;

//ファイルに保存する
$fp = fopen("file1","w");
flock($fp,2);
fputs($fp,$su);
flock($fp,3);
fclose($fp);

//javaスクリプトの文字セット
header("Content-type: application/x-javascript");

//カウントの文字数
$st_len = strlen($su);

//カウントのゼロを表示
for($i=0;$i<(6-$st_len);$i++){
$h_img = "<img src='http://localhost/counter/img/0.gif'>";
$hyouji = "document.write(¥"".$h_img."¥")¥n";
echo $hyouji;
};

//カウントを絵文字で表示
for($i=0;$i<$st_len;$i++){
$j = substr($su,$i,1);
$h_img = "<img src='http://localhost/counter/img/".$j.".gif'>";
$hyouji = "document.write(¥"".$h_img."¥")¥n";
echo $hyouji;
};

?>

まず、プログラムの説明をしますので、自分にあったように変えてください。

<?php はPHPプログラムの始まりを示します。終わりは最後の ?>です。
先頭に//をつけると注釈文となりプログラムとは関係なくなります。
命令の終わりには;を入れる。入れないと続いていると解釈される。

//パラメータを受け取る
最初に$をつけると変数になります。
$_GET[]はホームページ等のアドレスからデータを受け取ります。
たとえばこの場合http://localhost/test1.php?teracount=teraなので?より後の文字の
"tera"が渡されます。
if(  ){  }は、もし(  )の中が成立すれば{  }の中を行う。
この場合もし、$paramが"tera"でなければ終了(exit)する。
注意としては、php単体でテストランをすると受け取るデータがなく
エラーとなりますので、テスト段階では、//をつけて、本体で確認してください。

//ファイルを開く
fopen()はファイルを開く、file1はファイル名で、rは呼び出し
file()はファイルの内容を呼び込む
この場合file1の内容を$teraに入れる。
fclose()はファイルを閉じる。

//カウントする
$suにファイルで読み込んだデータに1をたす。

//ファイルに保存する
fopenは先ほどと同じ、wは書き込みで開く
flock(,2)はファイルを占有する。
flock(,3)はファイルを占有を解く。
同時にアクセスがあったときにエラーを出さないため
fput()はファイルに保存する。
先ほどカウントした$suをファイルに書き込む。

//javaスクリプトの文字セット
ホームページに返すときjavaスクリプトの形をとるため、
Javaスクリプトですと伝える

//カウントの文字数
stlen()は文字の長さを返してくれるので、$st_lenに文字数を入れる。

//カウントのゼロを表示
数字の頭の0を表示するため
6文字から、いまの文字の長さを引いただけ0を表示する。
for(a,b,c){  }は、aの値からcの値づつ、bが成り立つまで、{  }の命令を繰り返す。
この場合、$iが0から1づつ増やし(6−文字の長さ)まで0の表示を繰り返す。
たとえば文字の長さが2文字の場合は4回繰り返す。
なので、もし8桁にしたければ、6を8に変えてください。
$h_imgはhttp文の<img src="  ">の形をいれておくもの
$hyoujiはjavaスクリプトの<document.write()>文を入れておくもの
echoはhttp文に変えて表示する。

//カウントを絵文字で表示
基本的に上のゼロを表示と同じで、文字分だけ左から取り出す。
substr(a,b,c)はaの値のb文字目からc文字分を取り出す。

以上を文字コードをUTF-8にして、拡張子 .phpで保存してください。

ここでは、test1.phpと保存したとして、
ホームページ等(http)から呼び出す文は以下となります。

<script type/javascript" src="http://localhost/test1.php?teracount=tera">
</script>

見てわかるとおり、httpからは、Javascriptの形をとることにより、埋め込みができます。
これを、カウントしたい場所におけばphpが呼び出され表示されます。

参考
一般的には、src=""のところで、Javaスクリプト(.JS)の外部ファイルを呼び出す
形が多いです。(その外部ファイルからphpを呼び出す)
そうすれば、httpのソースを見られても直接phpファイルがわからないため


その3につづく




JUGEMテーマ:PC関連
| PHPプログラム | 14:12 | comments(0) | trackbacks(0) |

アクセスカウンターを作ってみる(PHP版)

今回は、処理の過程が長く、設定がいるので、初心者にはちょっと難しいかもしれなせん。
でも、理解できればサーバのプログラムを作れますので、プログラムの範囲が広がります。

今使っているレンタルサーバはロリポップですが、
関連サービスのアクセスカウンターが5月に廃止されるので、
それなら仕組みの分からない他のサイトのアクセスカウンターを使わずに、
自分で作ることにしました。
(もちろんロリポップには、契約したサーバ上で使うカウンターは用意されています。)

一般的によく使われるPHPというスクリプト言語(その都度実行する言語)
を使ってアクセスカウンターを作ってみます。

いつものように、流れを書きます。

1.PHPの実行環境をつくる。
2.  テキストエディタ等でPHPのプログラムをつくる。
3.サーバにそのプログラムとデータをアップロードする。
4.ホームページやブログ上にそのPHPを実行するタグを入れて、アクセスのつど呼び出す。

以上のようになります。

1.PHPの実行環境をつくる。

なぜ、PHPを使うかというと、ホームページやブログのHTTPファイルと相性がいいからです。
PHPで書いたプログラムは実行後、HTTPファイルとして出力されますし、
ホームページに埋め込むこともできます。
そのため、多くのホームページで使われています。

なぜ、実行環境をつくるのかというと、自分のPCではなくサーバで実行するため、
プログラムを間違えるとサーバに迷惑(負荷)をかけてしまいます。
そのため、間違えないようにしてからサーバに乗せます。
そのために自分のPCにサーバと同じ環境をつくって実行してみてデバック(修正)します。

いろいろな方法はありますが、今回はXAMPPという総合環境を使います。

ダウンロード元 XAMPP

のWindows for XAMPPをダウンロードしてください。バージョンは新しいもので構いません。
詳しいことは、phpspotのホームページのPHP入門が解かりやすく書いてあります。

ダウンロードしたらたぶんCドライブにxamppフォルダができていると思います。(C:xampp)
そこを開いて、xampp-control.exeを起動してください。
下のように表示されるので、ApacheのStartボタンを押してください。



これで、あなたのPCにサーバ (サーバ名:localhost)の環境ができました。

いつもホームページをアップロードしていることが、
Cドライブのhtdocsフォルダに入れることによって代用できます。(C:htdocs)

実行するには、プラウザからhttp://localhost/ホームページ名で表示されるはずです。

ちなみに、選んだApacheというのは、サーバの基本ソフトで、
PCにおけるWindowsのようなものです。

なお、サーバのセキュリティ設定については、XAMPP管理ページにユーザ認証を設定して
おいてください。

長くなりましたので、続きは次回とします。





JUGEMテーマ:PC関連
| PHPプログラム | 08:21 | comments(0) | trackbacks(0) |

07
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--
Profile
New entries
Archives
Categories
Recent comment
カウンター


今日
昨日
レンタルサーバ/プロバイダー




ファッション
カタログ通販ベルーナ(Belluna)

イマージュ - IMAGEアウトレットセール
yahoo・その他


買い物
ビックカメラ.com



Mobile
qrcode
Links
Others
無料ブログ作成サービス JUGEM