[PHP]
Authは認証を行なうためのPEARのライブラリです.
非常に簡単にユーザ認証を実装できます.
ここではMySQLを使ってAuthで認証を行なう方法を紹介します.
まずデータベースを作りましょう.
データベース名:login
テーブル名:auth
CREATE TABLE auth (
username VARCHAR(50) default '' NOT NULL,
password VARCHAR(32) default '' NOT NULL,
PRIMARY KEY (username),
KEY (password)
);
あとは auth.php という名前で以下のソースを動かします.
<html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF-8"> </head>
<?php
require_once("Auth.php");
// ログインフォーム
function loginFunction()
{
echo "<div id=\"loginform\">";
echo "<form method=\"post\" action=\"auth.php\">";
echo "<h2>ログインフォーム</h2>";
echo "<input type=\"text\" name=\"username\"></br>";
echo "<input type=\"password\" name=\"password\">";
echo "<input type=\"submit\">";
echo "</form>";
echo "</div>";
}
// ユーザ追加のためのフォーム
function adduserForm()
{
echo "<div id=\"adduser\">";
echo "<form method=\"post\" action=\"auth.php?add=1\">";
echo "<h2>ユーザ追加</h2>";
echo "<input type=\"text\" name=\"username\"></br>";
echo "<input type=\"password\" name=\"password\">";
echo "<input type=\"submit\">";
echo "</form>";
echo "</div>";
}
// パラメータの設定
// localhostのデータベース名 login,テーブル名 auth の場合
$params = array(
"dsn" => "mysql://root:@localhost/login",
"usernamecol" => "username",
"passwordcol" => "password",
"table" => "auth",
"cryptType" => "md5"
);
$myauth = new Auth("DB", $params, "loginFunction");
// 認証開始
$myauth->start();
// ユーザ追加のためのフォーム表示
adduserForm();
if (isset($_GET['add'])) {
// ユーザを追加のときは以下のように実行
$myauth->addUser($_POST['username'],$_POST['password']);
}
if (isset($_GET['logout'])) {
// ログアウト処理
$myauth->logout();
echo "ログアウトしました</br>";
}
if ($myauth->getAuth()) {
// ここに認証後のコードを書く
echo "現在ログイン状態です</br>";
echo "<a href=\"auth.php?logout=1\">ログアウト</a>";
}
?>
</html>
実際に動かして動作を確認しましょう.
auth.php にアクセスし,ユーザを追加して,ログインしてみてください.
現在ログイン状態ですと表示されます.
pearコマンドでPHPWebアプリケーションフレームワークSmartyをインストール
[PHP]
Smartyはpear.php.netでは配布されていませんが,
別のサイト(Pearified.com)でパッケージが配布されていて,
Channel機能を使うことでpearコマンドによりインストール可能です.
パッケージ配布先の追加
# pear channel-discover pearified.com
チャネル一覧の確認
# pear list-channels
Smartyをインストール
# pear install pearified/Smarty
ついでにJavascriptライブラリをインストール
# pear install -f pearified/Javascript_Prototype
# pear install -f pearified/Javascript_Scriptaculous
動作確認
index.php
<?php
require_once('Pearified/Smarty/Smarty.class.php');
// オブジェクトの作成
$smarty = new Smarty;
// テンプレートファイル
$smarty->template_dir = './templates/';
$smarty->assign('name', 'smarty');
$smarty->display('index.tpl');
?>
index.phpと同じ場所に templates と templates_c フォルダを作成
# mkdir templates
# mkdir templates_c
# chmod 777 templates_c
templates/index.tpl を以下の内容で作成
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTP-8">
<title>smarty test</title>
</head>
<body>
ようこそ {$name}!
</body>
</html>
index.php にアクセスし 「ようこそ smarty!」 が表示される.
[PHP]
投票システムのプロトタイプを公開します。
機能を追加してレンタルサービスとして公開するのが目標。
まあ卒論が忙しすぎてなかなか暇ないけど…
↓具体的にこんなことができます
「2006年のセ・リーグ優勝は?」
http://www.freebbs.biz/vote/vote.php?qid=1
「2006年のパ・リーグ優勝は?」
http://www.freebbs.biz/vote/vote.php?qid=2
「あなたの睡眠時間は?」
http://www.freebbs.biz/vote/vote.php?qid=7
新規登録はここから
http://www.freebbs.biz/vote/regist.php
システムのログインはここから
http://www.freebbs.biz/vote/login.php
新規登録してログイン画面からログインしてください。
そしたら自分の好きな質問いっぱい作れますよ~
使えそうなら使ってやってください。
2005,12,17 : 23:30 | 修正 | トラックバック (0)
[PHP]
久々に気合いを入れたPHPスクリプトを作ってみました。
カレンダースクリプトに日記機能を埋め込んだものです。
祝日表示対応などなかなかスグレモノです。
ただ、まだ記事編集機能がまったくありません。
これからどんどん機能を追加していきたいと思います。
http://www.freebbs.biz/php/cal.php
↑からサンプル&ダウンロード
2005,06,11 : 23:15 | 修正 | トラックバック (0)
[PHP]
久々のPHPシリーズ。
今回はアクセス解析でも作ってみますか。
まずは基礎から。
PHPでリファラ(どこのページから飛んできたか)を調べるのはとても簡単!
getenv('HTTP_REFERER')
で取得できます。
IP(例:192.168.1.1など)を調べたいときは
$_SERVER['REMOTE_ADDR']
というスーバーグローバル変数を使います。
ホスト名(例:freebbs.biz)を調べたいときは
gethostbyaddr($_SERVER['REMOTE_ADDR'])
で取得できます。
OSの情報、ブラウザの情報を取りたいときは
$_SERVER['HTTP_USER_AGENT']
というスーバーグローバル変数を調べます。
戻り値は
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; Lunascape 2.0.5)
のような感じになります。
OSはWinXP、ブラウザはLunascapeを使用している。
Windows NT 5.1がWindowsXPを表している。
2005,06,03 : 23:28 | 修正 | トラックバック (0)
[PHP]
今日は久々に研究室へ。
オープンキャンパスまでに鉄道模型の制御プログラムを作るらしい。
今日はモーターの制御回路作成を命じられる。
半田ごてなんて久々に使うな・・・
今日はPHPでのクラスの使い方を紹介します。
オブジェクト指向というのはどうも慣れませんがね・・・
再利用性が高いのでしっかり使いこなせるようになりましょう!
クラスの宣言は
class クラス名 {
var フィールド名;
function クラス名 ( ) { } // コンストラクタ
function 関数名 ( ) { } //メソッド
}
とまあこんな感じになります。
データベースを操作するクラスDBを例に挙げます。
class DB{
var $id;
var $result; // フィールド
// コンストラクタ(データベースに接続し、スキーマ選択)
function DB($host,$user,$pass,$dbname){
$this->id = @mysql_connect($host,$user,$pass) or die("Could not connect MySQL server");
@mysql_select_db($dbname) or die("Could not use selected database");
return $this->id;
}
// メソッドClose(データベースからの接続をクローズ)
function Close(){
@mysql_close($this->id) or die("Could not close database");
}
// メソッドQuery(データベースにSQLクエリーを送る)
function Query(&$sql){
$this->result = @mysql_query($sql) or die("Could not query of [ $sql ]");
return $this->result;
}
// メソッドAffected_rows(変更された行数を返す)
function Affected_rows(){
$this->result = @mysql_affected_rows() or die("Could not query of [ mysql_affected_rows ]");
return $this->result;
}
}
使い方は非常に簡単
$db = new DB("localhost","user","pass","dbname");
でオブジェクトを生成し、データベースに接続します。
クエリーを送るときは
$sql = "SELECT * FROM `table`;";
$result = $db->Query($sql);
while ($row = mysql_fetch_array($result)) { // SQLで読み出されたすべての行を参照する
$row['データベースのフィールド名'] で参照できます
}
データベースをクローズしたいときは
$db->Close();
とすればOK
こうしておけばデータベースがMySQLからPostgreSQLに変わったときに
変更箇所が非常に少なくて済みます。
2005,05,06 : 23:17 | 修正 | トラックバック (0)
[PHP]
PHPで任意の月のカレンダーを表示するスクリプトを作ってみました。
祝日にも対応しています。
2005,04,30 : 11:38 | 修正 | コメント (3) | トラックバック (0)
[PHP]
久々にPHPやりましょう。
MySQLデータベースサーバーと連携させて投票システムを作ります。
速攻で作りました。
お題は「堀江社長を支持しますか?」です
まず、データベースを準備しましょう。
CREATE DATABASE `vote`;
でデータベーススキーマを作成します。
そのスキーマ内に
CREATE TABLE `vote` (
`answer` INT NOT NULL ,
`ip` TEXT NOT NULL
)
を実行させて表を作ります。
vote.html (質問を書いたHTML)を準備します
当ページの例では以下のようになります
----------------------------------------
<html><body>
あなたはライブドアの堀江社長を支持しますか?<br>
<form action="vote.php" method="post">
<p>
<input name="answer" type="radio" value="1" checked>
1.支持します<br>
<input name="answer" type="radio" value="2">
2.支持しません<br>
<input name="answer" type="radio" value="3">
3.どちらでもないです<br>
<input name="answer" type="radio" value="4">
4.逝ってヨシ!</p>
<p><input type="submit" name="Submit" value="送信"></p>
</form>
</body></html>
----------------------------------------
あとはvote.phpを準備します。
----------------------------------------
<?php
$host = "localhost"; // ホスト名
$user = "user"; // ユーザー名
$pass = "pass"; // パスワード
$dbname = "vote"; // データベース名
$dbtable = "vote"; // データベーステーブル名
$db = @mysql_connect($host,$user,$pass) or die("Could not connect MySQL server");
// データベースサーバーに接続
@mysql_select_db($dbname) or die("Could not use selected database");
// データベースを選択
$sql = "SELECT * FROM `${dbtable}` WHERE ip='${_SERVER['REMOTE_ADDR']}';";
$result = @mysql_query($sql) or die("Could not query of [ $sql ]");
// SQLクエリーを送信
$row = @mysql_fetch_array($result); // 結果をfetch
if(!$row){ // IPで投票済みか判定
$sql = "INSERT INTO `${dbtable}` SET answer='${_POST['answer']}',ip='${_SERVER['REMOTE_ADDR']}';";
$result = @mysql_query($sql) or die("Could not query of [ $sql ]");
} else {
echo "エラー:あなたはすでに投票されています<br>\n";
}
echo "<h2>結果表示</h2>\n";
$sql = "SELECT COUNT(*),answer FROM `${dbtable}` GROUP BY answer;";
$result = @mysql_query($sql) or die("Could not query of [ $sql ]");
while ($row = @mysql_fetch_array($result)) { // 結果をfetch
echo "${row['answer']}を選んだ人 ${row[0]}人<br>\n";
}
?>
----------------------------------------
2005,04,06 : 20:00 | 修正 | トラックバック (0)
[PHP]
昨日紹介したRSSですが、これをPHPで読み込み
表示させるスクリプトを紹介しましょう。
http://pear.php.net/package/PEAR/download
からPEAR.phpを、
http://pear.php.net/package/XML_RSS/download
からRSS.phpを、
http://pear.php.net/package/XML_Parser/download
からParser.phpをダウンロードします。
それぞれ解凍したフォルダの中に入ってます。
次にRSSを読み込んでくるスクリプト
view.phpを作りましょう。
--<view.php>-------------------------------
<?php
require "RSS.php";
// RSSファイルのURLを指定します
$rdf = "http://www3.asahi.com/rss/index.rdf";
// クラスを作成
$r =& new XML_RSS($rdf);
$r->parse();
// アイテムをfetchします
$val = $r->getItems();
// 一番最新の記事のタイトルを取得します
$title = mb_convert_encoding($val[0]['title'], "SJIS", "UTF-8,EUC-JP,SJIS");
// 一番最新の記事のリンクを取得します
$link = $val[0]['link'];
echo "<a href=\"$link\" target=\"_blank\">$title</a>";
?>
-----------------------------------------------
サンプルはこちらになります
上の部分の$val[0]を$val[1]にすると2番目に
新しい記事が取得できます。
for文などを使って最新5記事とかの表示もできますね。
2005,03,23 : 16:12 | 修正 | トラックバック (0)
[PHP]
明日から新潟の苗場まで2泊3日で行ってきます!
携帯から現地リポートしますね~
PHPではフォームデータの受け渡しが非常に簡単にできます。
この点で私はPerlよりもPHPを気に入っています。
フォームのデータ受け渡しには、$_GET、$POST
というスーパーグローバル変数を使います。
スーパーグローバル変数とは、プログラム中の
どの範囲(スコープ)でも定義せずに使用可能な変数です。
POSTメソッドで送られたデータなら、$_POSTと書くだけで
簡単に受け取れるようになっています。
以下に例を示しましょう。
test.htmlのフォームからtest.phpにデータを送ってみます。
<test.html>
----------------------------------------------
<html>
<body>
<form action="test.php" method="post">
<input type="text" name="data">
<input type="submit" value="送信">
</form>
</body></html>
----------------------------------------------
<test.php>
----------------------------------------------
<?php
print $_POST['data'];
?>
----------------------------------------------
上のスクリプトのサンプルはこちら
たったこれだけでデータの受け渡しができるとは楽ですね。
Perlのときより簡単ですな~
2005,03,15 : 16:19 | 修正 | コメント (2) | トラックバック (0)
[PHP]
今日はちょっと高度なテクを紹介。
PHPで携帯の絵文字は扱えるのかという話です。
携帯の文字コードはすべてShift-JISコードですから、
PHPのスクリプトを書くときも必ずShift-JISコードで書きましょう。
絵文字のコードは、他の文字が登録されている
場所以外のところにあって、そのまま表示すると
「・」と表示されてしまいます。
まず、Webminかなにかで /etc/php.ini の設定をしましょう。
その中の下の方の部分にmbstring.internal_encoding、
mbstring.http_outputの設定があるので
以下のように変更してください。
mbstring.internal_encoding = SJIS
mbstring.http_output = pass
以下はi-modeのみの絵文字を変換するスクリプトです。
$valueを絵文字を含む文字列とすると、以下のように変換できます。
$value = preg_replace('/\G((?:[\x80-\x9F\xE0-\xF7\xFA-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF])*)([\xF8\xF9][\x40-\xFC])/e',"'$1'.'<img src=\"./img/'.array_shift(unpack('H4chars','$2')).'.gif\">'",$value);
上のスクリプトはF840~F8FC、F940~F9FCのS-JIS文字コードを
imgタグに置き換えるということをやっております。
スクリプトと同じ位置にimgというディレクトリを作ります。
そして、そのディレクトリの中に絵文字データを入れてください。
KENTさんのページにあります。
このようにPHPでも携帯の絵文字が扱えることがわかりました。
私のページでもこれを利用し携帯対応掲示板を作っています。
http://www.freebbs.biz/phpbbs/bbs.php?id=sample
ちょっと今日のスクリプトは難しかったですね。
こんなこともできるんだ~くらいに思っといてください。
2005,03,14 : 10:55 | 修正 | トラックバック (0)
[PHP]
昨晩は川端康成の「雪国」を読んでいて、寝るのが遅くなってしまった。
起きたのは昼。新パソコンが届いてたー
とりあえず、部屋の掃除して、WindowsXPをインストール中。
今日はMySQLを使ってカウンタを作ってみましょう。
まずはデータベース表を作成します。
以下のコマンドをSQLで実行。
phpMyadminのSQLの実行から実行させましょう。
----------------------------------------------
CREATE DATABASE `count`;
CREATE TABLE `count` (
`count` INT NOT NULL ,
`ip` TEXT NOT NULL
)
INSERT INTO `count` (`count`, `ip`) VALUES (0, '127.0.0.1');
----------------------------------------------
次にPHPスクリプトcount.phpを作りましょう。
内容は以下のようにします。
----------------------------------------------
<?php
$host = "localhost"; // ホスト名
$user = "user"; // ユーザー名
$pass = "pass"; // パスワード
$dbname = "count"; // データベース名
$dbtable = "count"; // データベーステーブル名
$db = @mysql_connect($host,$user,$pass) or die("Could not connect MySQL server");
// データベースサーバーに接続
@mysql_select_db($dbname) or die("Could not use selected database");
// データベースを選択
$sql = "SELECT * FROM `${dbtable}`;";
// SQL文の生成
$result = @mysql_query($sql) or die("Could not query of [ $sql ]");
// クエリーを送信
$row = @mysql_fetch_array($result); // 結果をfetch
if($row['ip'] != $_SERVER['REMOTE_ADDR']){
$row['count']++; // ipが異なればカウントアップ
$sql = "UPDATE `${dbtable}` SET ip = '${_SERVER['REMOTE_ADDR']}', count = '${row['count']}';";
// SQL文の生成
$result = @mysql_query($sql) or die("Could not query of [ $sql ]");
// クエリーを送信
}
echo "Total:${row['count']}"; // 表示部
?>
----------------------------------------------
あとはカウンタを表示させたいところに
<?include("./count.php");?>
と記述すればOKですね。
サンプルはこちら
2005,03,13 : 15:02 | 修正 | トラックバック (0)
[PHP]
i-mode,Vodafone,EzWeb の3つのキャリアを判定し、
キャリアごとのカウンタを表示するプログラムです。
PC: 10 i-mode: 5 EzWeb: 3 Vodafone: 1
↑このように表示されます。
preg_match関数を使ってみましょう。
<?php
$filename = "./count.dat"; // データファイル名
$keta = 5; //カウンタ表示桁数
$file = fopen($filename,"r+");
$buffer = fread($file,filesize ($filename));
list($pc,$imode,$ez,$vodafone,$ip) = explode("<>",$buffer);
$myip = getenv("REMOTE_ADDR");
if($myip != $ip){ //同一IPでなければカウントアップ
if(preg_match("/DoCoMo/i",$_SERVER['HTTP_USER_AGENT'])){ // ドコモにマッチ
$imode++;
} else if(preg_match("/J-PHONE/i",$_SERVER['HTTP_USER_AGENT'])){ // Vodafoneにマッチ
$vodafone++;
} else if(preg_match("/UP\.Browser/i",$_SERVER['HTTP_USER_AGENT'])){ // auにマッチ
$ez++;
} else{
$pc++;
}
}
$pc = sprintf("%0".$keta."d",$pc);
$imode = sprintf("%0".$keta."d",$imode);
$ez = sprintf("%0".$keta."d",$ez);
$vodafone = sprintf("%0".$keta."d",$vodafone);
//表示部(適当に編集してください)
echo "PC: $pc i-mode: $imode EzWeb: $ez Vodafone: $vodafone";
ftruncate($file,0);
rewind($file);
//ファイルロック処理
flock($file,LOCK_EX);
fwrite($file, $pc."<>".$imode."<>".$ez."<>".$vodafone."<>".$myip);
flock($file,LOCK_UN);
fclose($file);
?>
2005,03,07 : 12:27 | 修正 | トラックバック (0)
[PHP]
PHPではPerlの正規表現をサポートしており、
preg_matchやpreg_replace関数などで利用できます。
正規表現とは文字列のパターンを表す記号などの羅列です。
これにより、あるパターンに合致する文字列を検索・置換することが可能です。
非常に便利なものなので必ず覚えましょう!
メタキャラクター一覧
\ 直後のメタキャラクターを文字として扱います
^ 行の先頭にマッチします
. 任意のキャラクター(改行を除く)にマッチします
$ 行の終端(もしくは行末の改行の直前)にマッチします
| 選択
() グループ化をします
[] 文字の集合を表します
以下は直前の文字や集合に対して適用されます
* ゼロ回以上の繰り返しにマッチします
+ 一回以上の繰り返しにマッチします
? ゼロ回もしくは一回の繰り返しにマッチします
{n} n回の繰り返しにマッチします
{n,} 少なくともn回ある繰り返しにマッチします
{n,m} n回からm回の間の繰り返しにマッチします
以下のような文字を表す表現が使えます
\w キャラクタ(アルファベット、数字、“_”)にマッチします
\W キャラクタでないものにマッチします
\s 空白(whitespace)キャラクタにマッチします
\S 非空白キャラクタにマッチします
\d 数字にマッチします
\D 非数字にマッチします
上記を参考に以下に例を示しましょう。
例:自動リンクスクリプト
$buffer中にURLがマッチしたらリンクをはります。
$buffer = preg_replace("!(https?|ftp)(://[\w\+\$\;\?\.%,\!#~*/:@&=_-]+)!","<a href="\\1\\2" target="_blank\" >\\1\\2</a>",$buffer);
2005,03,04 : 16:07 | 修正 | トラックバック (0)
[PHP]
朝から久々にサークルに顔出してきました。
体中が痛い・・・
これまでに紹介してきた単語辞書のプログラムを発展させ、
英単語のゲームを作ってみましたので紹介します。
まず、英文が出てきますのでそれを読んでください。
その英文の意味に合致する単語を当てるゲームです。
⇒http://www.freebbs.biz/quiz/view.php
こんな感じです。
皆さんも面白いプログラムを組んでみてくださいね!
2005,03,03 : 17:56 | 修正 | トラックバック (0)
[PHP]
この前登録編をやりましたんで、
今日はデータベースに登録した単語を表示させるプログラムを紹介します。
サンプルはこちらになります。
登録画面サンプルはこちらです。
mysql_fetch_array関数の使い方を見てみましょう!
単語表示スクリプト<view.php>
-- view.php --------------------------------
<?php
$host = "localhost"; // ホスト名
$user = "user"; // ユーザー名
$pass = "pass"; // パスワード
$dbname = "english"; // データベース名
$dbtable = "tango"; // データベーステーブル名
$db = @mysql_connect($host,$user,$pass) or die("Could not connect MySQL server");
// データベースサーバーに接続
@mysql_select_db($dbname) or die("Could not use selected database");
// データベースを選択
$sql = "SELECT * FROM `${dbtable}` ORDER BY 'tango';";
// SQL文の生成
$result = @mysql_query($sql) or die("Could not query of [ $sql ]");
// クエリーを送信
echo "<table>\n";
while ($row = @mysql_fetch_array($result)) { // 結果をfetch
echo "<tr><td>${row['tango']}</td><td>${row['imi']}</td></tr>\n";
}
echo "</table>\n";
// 表を作成
?>
--------------------------------------------
2005,03,02 : 14:54 | 修正 | トラックバック (0)
[PHP]
PHPで簡単な単語帳を作ってみましょう。
これを応用すると色々なプログラムが書けるはずです!
今日は、 データベースに接続→単語を登録
という作業をやってみます。
まず、MySQLで以下のSQL文を実行します。
-------------------------------------------
CREATE DATABASE `english`;
CREATE TABLE `tango` (
`id` INT NOT NULL AUTO_INCREMENT ,
`tango` VARCHAR(40) NOT NULL ,
`imi` TEXT NOT NULL ,
PRIMARY KEY (`id`)
);
-------------------------------------------
これでenglishというデータベースの中に
tangoという表が作成されます。
次に単語投稿フォーム
エディタでtouroku.htmlを作ってください。
-- touroku.html ---------------------------
<html>
<body>
<form action="touroku.php" method="post">
単語:<input type="text" name="tango"><br>
意味:<input type="text" name="imi"><br>
<input type="submit" value="送信">
</form>
</body></html>
-------------------------------------------
あとはPHPスクリプト<touroku.php>をエディタで作成してください。
-- touroku.php ----------------------------
<?php
$host = "localhost"; // データベースホスト名
$user = "user"; // ユーザー名
$pass = "pass"; // パスワード
$dbname = "english"; // データベース名
$dbtable = "tango"; // データベーステーブル名
if(!$_POST['tango'] || !$_POST['imi']){exit("入力されていない項目があります");}
$db = @mysql_connect($host,$user,$pass) or die("Could not connect MySQL server");
// データベースサーバーに接続
@mysql_select_db($dbname) or die("Could not use selected database");
// データベースを選択
$sql = "INSERT INTO `${dbtable}` SET tango = '${_POST['tango']}', imi = '${_POST['imi']}';";
// SQL文を生成
$result = @mysql_query($sql) or die("Could not query of [ $sql ]");
// クエリーを送信
echo "単語 ${_POST['tango']} を登録しました";
?>
--------------------------------------------
あとは投稿フォームから単語を登録するだけです。
必要最低限の機能しかありませんので、簡単でしたね?
次回はデータベースから単語を取り出して表示させてみましょう。
2005,02,26 : 10:02 | 修正 | トラックバック (0)
[PHP]
ページにアクセス制限をつけてみましょう。
上部に以下のようなプログラムを挿入します。
<?php
$denylist = array("proxy.com","xyz.com","kkk.net")
// アクセスを拒否するホストのリスト
$host = @gethostbyaddr($_SERVER['REMOTE_ADDR']);
foreach($denylist as $value){
if(ereg($value,$host)) // パターンにマッチすれば
exit("アクセスが拒否されました");
}
?>
正規表現関数ereg()を使いました。
ereg(pattern,string) のように使います。
eregi()を使うと大文字と小文字を区別しません。
ただし、パターンマッチングにはPerl互換のpreg_match()の方が早く動作するようです。
なるべくならそちらを使う方がよいでしょう。
2005,02,25 : 10:00 | 修正 | トラックバック (0)
[PHP]
掲示板でのトリップ機能については先日書きましたが、
今日は実際にトリップを実現するためのプログラムを紹介します。
フォームから投稿されたデータ$_POST['name']を
トリップ機能を使いエンコードしてましょう。
Perlの正規表現を利用すると以下のようなプログラムになりますね。
$_POST['name'] = str_replace("◆","◇",$_POST['name']);
// まず◆を使って偽装されないよう◆は◇に変えておきます
if(preg_match("/#(.)+/",$_POST['name'],$regs)){
// もし#任意の文字列にマッチしたら以下を実行
list($name,$trip) = explode("#",$_POST['name']);
$trip_enc = substr(md5($trip),0,8);
// md5で暗号化し最初の8文字をトリップにしましょうか
$_POST['name'] = $name."◆".$trip_enc;
}
2005,02,24 : 14:19 | 修正 | トラックバック (0)
[PHP]
TOEICの結果が返ってきました~
SECTIONⅠ 335
SECTIONⅡ 300
で635でした。前回より85点UP!次なる目標は700ですな。
今日はPHPからのメール送信方法を紹介します。
マルチバイト関数がインストールされていれば、
以下のように簡単にメールを送信できます。
$mailto = "aite\@address.com"; // 送信先アドレス
$mailfrom = "your\@address.com"; // あなたのアドレス
$contents = "
メールの内容
";
$subject = "メールの件名";
$result = mb_send_mail($mailto,$subject,$contents,"From: ".$mailfrom."\r\n".
"Reply-To: ".$mailfrom."\r\n");
if(!$result)
exit("メールの送信に失敗");
2005,02,21 : 23:39 | 修正 | トラックバック (0)
[PHP]
TOEIC、ソフトウェア開発技術者試験申し込みました。
そろそろ本格的に勉強しないとね。
今日はPHPからPOPサーバーに接続する方法を紹介しましょう。
筆者は以下のようにやってみました。
<?php
$host = "localhost" // 接続ホスト
$user = "user"; // ユーザー名
$pass = "pass"; // パスワード
$sock = fsockopen($host,110,$err,$errno,10) or exit("can't connect pop server");
$buffer = fgets($sock,512);
if(substr($buffer,0,3) != '+OK') exit($buffer);
$buffer = sendmsg("USER $user");
$buffer = sendmsg("PASS $pass");
$data = sendmsg("STAT");
print $data;
sscanf($data,'+OK %d %d',$num,$size);
if($num == "0"){
$buffer = sendmsg("QUIT");
fclose($sock);
exit;
}
for($i=1;$i<=$num;$i++){
$line = sendmsg("RETR $i");
while(!ereg("^\.\r\n",$line)){
$line = fgets($sock,512);
$msg[$i] .= $line;
}
}
$buffer = sendmsg("QUIT");
fclose($sock);
// $msg に配列として格納されます
function sendmsg($command){ // コマンド送信関数
global $sock;
fputs($sock,$command."\r\n");
$buffer = fgets($sock,512);
if(substr($buffer,0,3) == '+OK'){
return $buffer;
} else {
exit($buffer);
}
return false;
}
?>
2005,02,16 : 20:11 | 修正 | トラックバック (0)
[PHP]
サイトの相互リンクのところをPHPで登録できるようにしてみた。
http://www.freebbs.biz/
MySQLにデータを登録し、それを表示するという具合だ。
PHPのページも更新しなければ・・・
塾バイトで3万入ったのでちょっとハッピ~(^_^)
なぜかミスチルのCDを借りに行った。
深海、Atomic Heart、Q、DISCOVERYの4枚
2005,02,12 : 23:54 | 修正 | トラックバック (0)
[PHP]
ページを大幅にリニューアルした。
CSS、Javascript、PHPを駆使して流行のデザインにしてみました。
http://www.freebbs.biz/
久々にPHPをいじってみたのでカウンタのプログラムを公開することに。
<?php
$filename = "./count/count.dat"; // データファイル名
$keta = 5; //カウンタ表示桁数
$keta2 = 3; //今日昨日のカウンタ表示桁数
$file = fopen($filename,"r+");
$buffer = fread($file,filesize ($filename));
list($count,$ip,$tday,$tcount,$ycount) = explode("<>",$buffer);
$myip = getenv("REMOTE_ADDR");
if($tday == date("ymj",mktime(0,0,0,date("m"),date("d")-1,date("y")))){ //tdayが昨日だったときの処理
$ycount = $tcount;
$tcount = 0;}
elseif($tday != date("ymj")){ //tdayが昨日以前だったときの処理
$tcount = 0;
$ycount = 0;}
if($myip != $ip){ //同一IPでなければカウントアップ
$count++;
$tcount++;
$tday = date("ymj");
}
$count = sprintf("%0".$keta."d",$count);
$tcount = sprintf("%0".$keta2."d",$tcount);
$ycount = sprintf("%0".$keta2."d",$ycount);
//表示部
echo "Total: $count Today: $tcount Yesterday: $ycount";
ftruncate($file,0);
rewind($file);
flock($file,LOCK_EX);
fwrite($file, $count."<>".$myip."<>".$tday."<>".$tcount."<>".$ycount);
flock($file,LOCK_UN);
fclose($file);
?>
2004,12,02 : 00:00 | 修正 | トラックバック (0)
