perl、PHPのサンプルスクリプトです。よく使う基本的なもののサンプルソースです。これらに他の機能をからませて複雑な処理を行います。
PHPはperlと比較すると便利で使いやすいコマンドがたくさんあって作りやすいです。データベースとの親和性も非常に高いですね。反面、サーバーの環境に左右されることが多く、ここに記載しているソースが全てのサーバーに適しているかどうかというと、そういうワケでもなく、何とも言えない、というのが正直なところです。
以下のソースはApache2.x、PHP4.3、HTML及びスクリプトはShift-JIS、という条件下でのものです。
perl
- ファイルを1行づつ読み込んで処理
open(FILE,"<$filename");
eval{ flock(FILE, 2); };
while ($line = <FILE>) {
#ここで処理を行う
++$i;
}
close(FILE);
- ファイルに書き込み(元データがあれば破棄して上書き)
open(FILE,">$filename");
eval{ flock(FILE, 2); };
seek (FILE, 0, 0);
truncate(FILE, 0);
print FILE @new_data;
close(FILE);
chmod (0666, $filename);
- 乱数生成
$rand_number = int(rand 1000);
- 日付の取得
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime(time
+ 9*60*60);
@wday_array = ('日','月','火','水','木','金','土');
$now_date = sprintf("%04d年%02d月%02d日(%s)%02d時%02d分%02d秒",$year
+1900,$mon +1,$mday,$wday_array[$wday],$hour,$min,$sec);
- 今日から$day日前の日付を取得
$day = 14;
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time
- 24*60*60*$day);
$before_date = sprintf("%04d年%02d月%02d日", $year + 1900, $mon
+1, $mday);
- 文字列マッチ
文字列$textにaaaが含まれているかどうかチェック
if ($text =~ m/aaa/) {
$check = "OK";
}
- パターンマッチ
文字列$textに数字が含まれているかどうかチェック
if ($text =~ m/[0-9]/) {
$check = "OK";
}
よく使いそうなパターン
| /[0-9]/ |
数字にマッチ |
| /¥d/ |
| /[^0-9]/ |
数字以外にマッチ |
| //¥D/ |
| /[a-zA-Z]/ |
英字にマッチ |
| /abc/ |
abc にマッチ |
| /a.c/ |
a?c にマッチ |
| /^abc/ |
abc で始まるものにマッチ |
| /abc$/ |
abc で終わるものにマッチ |
| /[a-zA-Z]{8,}/ |
英字 8 文字以上にマッチ |
最速攻略CGI/Perl作り方入門
10日でおぼえるPerl/CGI入門教室
PHP
- スクリプトの最大実行時間をセット
set_time_limit(300);
- エラー表示(php.iniで表示しない設定になっている場合に使う)
ini_set( 'display_errors', 1 );
ini_set( 'log_errors', 1 );
ini_set( 'error_reporting', -1 );
- ファイル内容を文字列として読み込み
$str = implode('',file ($file));
- ファイルに書き込み(元データを破棄して上書き)
$HANDLE = fopen($filename, "r+");
flock ($HANDLE, 2);
rewind ($HANDLE);
ftruncate ($HANDLE, '0');
fputs ($HANDLE, $new_data);
flock ($HANDLE, 3);
fclose ($HANDLE);
@ chmod ($filename, 0666);
- 乱数生成
srand((double) microtime() * 1000000);
$rand_number = floor (rand(0,99) );
//2桁に整形
$rand_number = sprintf("%02d", $rand_number);
- 日付けと時刻を取得
$weekday_array = array("日","月","火","水","木","金","土");
$now_date = date("Y年m月d日") . "(" . $weekday_array[date("w")]
. ")" . date("H時i分s秒");
- 指定日から$dd日前の日付を取得
$month = 1;
$day = 1;
$year = 2006;
$dd = 14;
$date = date("Ymd", mktime(0, 0, 0, $month, $day, $year) - 24*60*60*$dd);
※時刻も取得する場合はmktimeの0のところに適切な数値を入れます。
- 1ヶ月後の今日
$date = date("Ymd", mktime(0, 0, 0, date("m")+1, date("d"),
date("Y")));
- クッキー書き込み
setcookie("クッキー名", "クッキーの値"); //ブラウザを閉じると消える
setcookie("クッキー名", "クッキーの値", time()+60*60*1); //1時間有効
setcookie("クッキー名", "クッキーの値", '', '/'); //ドメイン下で全て有効
setcookie("クッキー名", "クッキーの値", '', '/', '', 1); //セキュア接続のみ有効
- クッキー読み込み
$value = $_COOKIE["クッキー名"];
$value = htmlspecialchars($value); //セキュリティ対策
- クッキー削除(過去の時間で登録)
setcookie("クッキー名", "", time()-60);
- 文字列置換
$str = str_replace ("置換前の文字列", "置換後の文字列", "元の文字列");
- パターンマッチによる置換
$strに数字以外が含まれていたら半角カンマに置換
$str = preg_replace("/¥D/", ",", $str);
注)マルチバイト文字は半角カンマ2つに置換される
10日でおぼえるPHP 5入門教室
PHP 5逆引き大全500の極意