/*
ログファイル msg_???.php といっしょにアップロードして、
msg_???.php のパーミッションを606以上にして下さい。
msg_???.php にメッセージが書き込まれます。
ログファイル名の ??? は、include元のファイル名です。
(index.php、page1.php から使う場合は msg_index.php、msg_page1.php)
※ msg_???.php は、logFileExt と logFileAdd が初期設定の状態での説明なので
※ 変更してたらログファイル名も変えておいて下さい。
*/
class ShortMessage {
//---------設定-----------
protected static $shm = array(
'maxLength' => 100, //書き込み可能文字数
'logMax' => 1000, //log保存行数
'viewMax' => 20, //表示件数
'headerRow' => 1, //ログファイルから読み込んだ配列の内、headerとして先頭に書き込む(残す)行数
'footerRow' => 1, //ログファイルから読み込んだ配列の内、footerとして終端に書き込む(残す)行数
'logFileAdd' => 'msg_', //ログファイル名に付く接頭語
'logFileExt' => '.php', //ログファイルの拡張子 '.html' '.php' など
'tLimitMin' => 1, //ページ表示毎の書込み有効期間(最短秒数)
'tLimitMax' => 3600, //ページ表示毎の書込み有効期間(最長秒数)
'chkey' => 'changed', //※要変更:簡易改竄チェックキー。任意の文字列に変更
'ckExpireDays' => 150, //クッキー(NameやColor)の保持期限日数
'ckDir' => '', //クッキー有効範囲(ディレクトリ) example.com/foo/ 配下で有効にしたいなら '/foo/' を指定
'name' => '', //デフォルトのName
'surl' => '', 'logfile' => '',
'tms' => 0, 'ia' => 0, 'ldc' => '', 'iac' => '', 'chc' => ''
);
protected static $color = array(
//カラー名称 コード
'Black' => 'Black',
'Gray' => 'Gray',
'Lime' => 'Lime',
'Aqua' => 'Aqua',
'Blue' => 'Blue',
'Fuchsia' => 'Fuchsia',
'Orange' => '#ffa500',
'Pink' => '#ffc0cb',
'#000000' => '#000000',
'#408040' => '#408040',
'#ff80ff' => '#ff80ff',
'#40a0a0' => '#40a0a0',
'silver' => 'silver',
'brown' => 'brown',
'green' => 'green',
'purple' => 'purple',
'skyblue' => 'skyblue',
'crimson' => 'crimson',
'indigo' => 'indigo',
'navy' => 'navy',
'mediumorchid' => 'mediumorchid',
'palevioletred' => 'palevioletred',
'turquoise' => 'turquoise',
'yellowgreen' => 'yellowgreen',
'slateblue' => 'slateblue',
'lightsalmon' => 'lightsalmon',
'goldenrod' => 'goldenrod',
'darkkhaki' => 'darkkhaki',
'deeppink' => 'deeppink',
'darkgoldenrod' => 'darkgoldenrod',
'けーこ' => '8080ff',
'ひろきち' => 'midnightblue',
'うぉ' => 'orange',
'Boz' => 'blueviolet',
'ようこ' => 'fuchsia',
'kota' => 'red',
);
//ログデータ表示 前 に追加されるテキスト
protected static function Header() {
$shm = &self::$shm;
return <<
Name : {$shm['colorcode']}
NameとColorを記憶 Message :
TEXTEND;
}
//ログデータ表示 後 に追加されるテキスト
protected static function Footer() {
$shm = &self::$shm;
return <<
";
return $rtnData. "\r\n";
}
//-------設定終わり-------
protected static function ColorList() {
$shm = &self::$shm;
if( array_key_exists( $_COOKIE['color'], self::$color) != false) $cs[$_COOKIE['color']] = ' selected';
foreach( self::$color as $k => &$v) {
$c .= "";
}
$shm['colorcode'] = "\r\n Color : ";
}
protected static function ColorHF( &$c) {
$cl = &self::$color[$c];
return ($c != '')? array( 'head' => "", 'foot' => '') : array( 'head' => '', 'foot' => '');
}
protected static function NameSet() {
$shm = &self::$shm;
$shm['surl'] = htmlspecialchars( ((getenv('REQUEST_URI') != '')? getenv('REQUEST_URI') : getenv('PHP_SELF')), ENT_QUOTES, 'Shift_JIS');
$su = &$shm['surl'];
$basename = ( (strrpos($su,'/') + 1) != strlen($su) )? basename( $su, '.'.pathinfo( $su, PATHINFO_EXTENSION)) : 'index';
$shm['logfile'] = $shm['logFileAdd']. $basename. $shm['logFileExt'];
}
protected static function DataCheck() {
$shm = &self::$shm;
$shld = base_convert( $_POST['shld'], 36, 10);
$t = &$shm['tms'];
$aLang = getenv('HTTP_ACCEPT_LANGUAGE');
$chc = self::KeyGen( sprintf( '%0x', $shld ^ $shm['ia']));
if(
($chc != $_POST['shch']) ||
($shm['iac'] != $_POST['shia']) ||
($_POST['shld'] == '') ||
(($shld + $shm['tLimitMax']) < $t) ||
(($shld + $shm['tLimitMin']) > $t) ||
($aLang === false) ||
((strpos($aLang,'ja') === false) && (strpos($_POST['shmessage'],'\1@\2', $message);
//URL アンカー付け
$message = preg_replace( '{(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)}', '\1\2', $message);
$message = self::MessageFormat( $name, $message, $color);
$fp = @fopen( $shm['logfile'], 'w') or exit( $shm['logfile'].'が開けません');
for( $i = 0 ; $i < $shm['headerRow'] ; $i++) {
fputs( $fp, $lines[$i]); //先頭に書き込む header部
}
fputs( $fp, $message);
$shm['logMax'] = ($shm['logMax'] >= count($lines))? count($lines) - $shm['footerRow'] : $shm['logMax'];
for( $i = $shm['headerRow'] ; $i < $shm['logMax'] ; $i++) {
fputs( $fp, $lines[$i]); //既存ログを書き込む
}
for( $i = count($lines) - $shm['footerRow'] ; $i < count($lines) ; $i++) {
fputs( $fp, $lines[$i]); //終端に書き込む footer部
}
fclose( $fp);
if( $_POST['keepnc'] == 'enable') {
$cet = time() + (86400 * $shm['ckExpireDays']);
setcookie( 'shname', $_POST['shname'], $cet, $shm['ckDir']);
setcookie( 'color', $_POST['color'], $cet, $shm['ckDir']);
}
$httphost = getenv( 'HTTP_HOST');
if( headers_sent() == false) {
header( "Location: http://".$httphost.$shm['surl']);
exit;
} else {
return <<< RETURNEND
送信が完了しました。
自動で画面が切り替わらない場合は ココ をクリックしてください。
RETURNEND;
}
}
}
}
return ShortMessage::Generate();
?>