/*
* 面白サイトメインスクリプト
* 勝手にアクロスティック
*/
// 設定データを読み込む
include_once("config.php");
// 設定データを読み込む
include_once(CO_HP_CONFIG_FILE);
// スタイルシートの設定を読込む
include_once(CO_STYLE_FILE);
// データファイルの差替え処理
CheckDataFile();
// データファイルを読込む
include_once(CO_DATA_FILE);
// UTF-8に設定する
mb_internal_encoding ("UTF-8"); // 内部エンコーディングをUTF-8に変更
mb_regex_encoding ("UTF-8"); // 内部エンコーディングをUTF-8に変更
/*
* POST・GETされたデータを入手する
*/
$GB_POST = chg_from($_POST);
$GB_GET = chg_from($_GET);
// POST・GET共に同じキーが有った時には
// POSTを優先させる
foreach ( $GB_POST as $key => $value ){
$GB_GET[$key] = $value;
}
// 入力文字を取出す
$skey = "";
if ( isset($GB_GET["skey"])){
$skey = $GB_GET["skey"];
}
// トップの表示
disp_html_head();
// サイトの説明・入力表示
disp_html_dtop($skey);
// 上部の広告表示
// キャリアを判定して、広告の表示を変更する
$car = ka_ad_car_get();
if ( $car == "pc" ){
disp_html_dtopad();
} else {
include_once(CO_MADS_FILE);
}
$wskey = preg_replace("/ | /", "", $skey);
if( trim( $wskey ) == "" ){
disp_htm_futlink();
} else {
// 応答を表示する
if ( check_skey($skey) == true ){
disp_html_respons($skey);
disp_html_dfutad();
disp_htm_futlink();
}
}
disp_html_fut();
/****************************************
* 入力されたも文字が平仮名のみかを確認する *
****************************************/
function check_skey($skey){
global $kanatable;
// 全角空白を消去する。
// 半角空白を消去する。
$wskey = preg_replace("/ | /", "", $skey);
$hiratable = get_mojicnv();
$errstr = "";
$errflg = false;
$strlen = mb_strlen($wskey);
for ( $i = 0 ; $i < $strlen ; $i ++ ){
$moji = mb_substr($wskey,$i,1);
if ( isset($hiratable[$moji])){
$errstr .= $moji;
} else {
$errstr .= "".$moji."";
$errflg = true;
}
}
if ($errflg == true ){
echo $errstr."
\n";
echo "ひらがなで入力してください、長音\"ー\"等も使用出来ません";
return false;
}
return true;
}
/****************************************
* 入力に対するレスポンスを返す *
****************************************/
function disp_html_respons($skey){
// 1文字毎に分解する
// 全角空白を消去する。
// 半角空白を消去する。
$wskey = preg_replace("/ | /", "", $skey);
$hiratable = get_mojicnv();
$errstr = "";
$errflg = false;
$strlen = mb_strlen($wskey);
$mojidata = array();
for ( $i = 0 ; $i < $strlen ; $i ++ ){
$mojidata[count($mojidata)] = mb_substr($wskey,$i,1);
}
$drespons_style = "";
if ( CO_STYLE_DRESPONS <> "" ){
$drespons_style = " style=\"".CO_STYLE_DRESPONS."\"";
}
$dcont_style = "";
if ( CO_STYLE_DCONT <> "" ){
$dcont_style = " style=\"".CO_STYLE_DCONT."\"";
}
$subnote = "";
if ( CO_HP_SUB_NOTE <> "" ){
$subnote = CO_HP_SUB_NOTE;
}
$dnote_style = "";
if ( CO_STYLE_DNOTE <> "" ){
$dnote_style = " style=\"".CO_STYLE_DNOTE."\"";
}
// 表示に使用するデータをサンプリングする。
// サンプリングすべき件数を求める
$mojicount = array();
foreach($mojidata as $key => $value){
if ( isset($mojicount[$value])){
$mojicount[$value] ++;
} else {
$mojicount[$value] = 1;
}
}
$mdata = get_moji1();
$sampdata = array();
// 差し替え文字テーブル
$emojicnv = get_mojicnv();
foreach($mojicount as $key => $value){
$sampdata[$key] = array();
// 使用できるデータの件数を求める
$mmojiarray = array();
$mcount = 0;
if ( isset($mdata[$key]) ){
$mmojiarray = $mdata[$key];
$mcount = count($mmojiarray);
}
// もし、データが無い時には差し替え文字にデータを切替える
if ( $mcount <= 0 ){
if ( trim($emojicnv[$key]) <> "" ){
$mmojiarray = $mdata[$emojicnv[$key]];
$mcount = count($mmojiarray);
}
}
for ( $i = 0 ; $i < $value ; $i ++){
if ( $mcount > 1 ){
do {
// 重複の確認
$dupflg = false;
// 乱数を求めて、選択するデータ番号を求める
$selnumber = $mmojiarray[rand(0,$mcount-1)];
if ( count($sampdata[$key]) >= $mcount ){
$sampdata[$key][count($sampdata[$key])] = $selnumber;
$dupflg = false;
} else {
foreach ( $sampdata[$key] as $ckey => $cvalue ){
if ( $cvalue == $selnumber ){
$dupflg = True;
break;
}
}
if ( $dupflg == false ){
$sampdata[$key][count($sampdata[$key])] = $selnumber;
}
}
} while ($dupflg == true);
} else {
// データが1件しかない
$sampdata[$key][count($sampdata[$key])] = $mmojiarray[0];
}
}
}
// HTML表示用のデータをセットする
$htmldata = "";
// テキスト表示用のデータセット
$textdata = "";
// 漢字表現に使用するデータ
$kanjistr = "";
// サンプリングデータを元に文字に使用するデータ番号を割り付ける
$wrkarray = array();
$selnumarray = array();
foreach ( $mojidata as $key => $value ){
if ( isset($wrkarray[$value])){
} else {
$wrkarray[$value] = 0;
}
// 選択した番号をセットする
$uid = $sampdata[$value][$wrkarray[$value]];
// $selnumarray[$key] = $sampdata[$value][$wrkarray[$value]];
// カウントアップする
$wrkarray[$value] ++;
// 最後の文字かどうかを判断する。
$lastflg = false;
if ( count($mojidata) <= ($key + 1)){
$lastflg = true; // 最後の文字
}
// 使用するデータを入手する
$mastdata = get_basedata($uid);
$kana = $mastdata["kana"];
$kanji = $mastdata["kanji"];
$setu = $mastdata["midmoji"];
// 最後の時には最後の接続詞を使用する。
if ( $lastflg == true ){
$setu = $mastdata["lastmoji"];
}
// 表示文字を作成する
$textdata .= "・".htmlspecialchars($kana.$setu)."\n";
// 最初の1文字を強調する
// $htmldata .= "・".$value."".$mb_substr($kana,1,mb_strlen($kana)-1)."
\n";
$htmldata .= "・".mb_substr($kana,0,1)."".htmlspecialchars(mb_substr($kana,1,mb_strlen($kana) - 1 ).$setu)."
\n";
$kanjistr .= htmlspecialchars($kanji.$setu);
if ( $lastflg != true ){
$kanjistr .= "、";
}
}
// 名前を記載する
$htmldata .= "".htmlspecialchars($skey)."です
";
$textdata .= htmlspecialchars($skey)."です\n";
$htmlkanjistr = "『".$kanjistr."".htmlspecialchars($skey)."です』
";
$kanjistr = "『".htmlspecialchars($kanjistr." ".htmlspecialchars($skey))." です』\n";
echo <<< EOT
$htmlkanjistr
$htmldata
$subnote
貼付用テキスト
EOT;
}
/****************************************
* 指定のデータを乱数を元に文字列として作成する *
****************************************/
function get_dispstr($id,$md5str,$md5key){
// 指定の番号のデータを入手する
$reparray = array();
$soudata = get_basedata($id);
// 数値化するものの値を求めて数値化する
// 数値化の範囲を求める
if ( $soudata["min"] > -1 ){
list($wnumber,$md5str,$md5key) = get_md52num($md5str,$md5key);
// 最大にリミッターが有るか無いかを判断する。
if ($soudata["max"] > -1 ){
// 最大にリミッターが有る
// 求める範囲の最大値を算出
$axmnum = $soudata["max"] - $soudata["min"] + 1;
// 桁数を元に桁数をセットする(数値を大きく変化させないと面白くない
if ( $soudata["caltype"] < 0 ){
// 桁数の変化を大きくする
$keta = fmod($wnumber , 7) + 2;
$wnumber = substr($wnumber, 0, $keta);
}
//範囲内の値を求める
$wnumber = fmod($wnumber , $axmnum);
$wnumber += $soudata["min"];
} else {
// 最大にリミッター無し
// 桁数を元に桁数をセットする(数値を大きく変化させないと面白くない
if ( $soudata["caltype"] < 0 ){
// 桁数の変化を大きくする
$keta = fmod($wnumber , 7) + 2;
$wnumber = substr($wnumber, 0, $keta);
}
// 最低だけを確認して、数値を求める
while ( $wnumber < $soudata["min"] ){
list($wnumber,$md5str,$md5key) = get_md52num($md5str,$md5key);
// 桁数を元に桁数をセットする(数値を大きく変化させないと面白くない
if ( $soudata["caltype"] < 0 ){
// 桁数の変化を大きくする
$keta = fmod($wnumber , 7) + 2;
$wnumber = substr($wnumber, 0, $keta);
}
}
}
// 丸めの実施を判断し、丸め処理を行なう
$marume = abs($soudata["caltype"]);
if ( $marume > 0 ){
// 丸め処理を実施
$len = strlen($wnumber);
if ( $len > $soudata["caltype"] ){
$wnumber = substr(substr($wnumber, 0 ,abs($soudata["caltype"]))."0000000000000000", 0, $len );
}
}
// 係数で乗算する設定が有れば乗算する
if ( $soudata["cal"] > 0 ){
$wnumber = $wnumber * $soudata["cal"];
}
$reparray["number"] = $wnumber;
} else {
$reparray["number"] = "";
}
// データ1~10を求める
for ( $i = 1 ; $i <= 10 ; $i ++ ){
$datakey = "data".$i;
// データ件数
$dataarray = $soudata[$datakey];
$datacount = count($dataarray);
if ( $datacount > 0 ){
if ( $datacount == 1 ){
// 1件しかないのでそのまま表示する
$dstr = $dataarray[0];
} else {
// 複数のデータがあるので、選択する。
list($wnumber,$md5str,$md5key) = get_md52num($md5str,$md5key);
$dstr = $dataarray[fmod($wnumber , $datacount)];
}
$reparray[$datakey] = $dstr;
} else {
//データ無し
$reparray[$datakey] = "";
}
}
// コメント
if ( $soudata["comment"] <> "" ){
$reparray["comment"] = $soudata["comment"];
} else {
$reparray["comment"] = "";
}
$reparray["subject"] = $soudata["subject"];
return array($reparray, $md5str,$md5key);
}
/****************************************
* MD5を元にした値を返す処理 *
****************************************/
function set_dispstr($mdataarray,$mode = 0){
$dataarray = $mdataarray;
$subject = $dataarray["subject"];
if ( $mode == 0 ){
foreach ( $dataarray as $key => $value ){
switch($key){
case "name":
if ( $dataarray["name"] <> "" ){
if ( CO_STYLE_NAME <> "" ){
// スタイルシートつきの文字列に差し替える
$dataarray["name"] = "".$dataarray["name"]."";
}
}
break;
case "number":
if ( $dataarray["number"] <> "" ){
if ( CO_STYLE_NUMBER <> "" ){
// スタイルシートつきの文字列に差し替える
$dataarray["number"] = "".number_format($dataarray["number"])."";
}
}
break;
case "comment":
if ( $dataarray["comment"] <> "" ){
if ( CO_STYLE_COMMENT <> "" ){
// スタイルシートつきの文字列に差し替える
$dataarray["comment"] = "".$dataarray["comment"]."";
}
}
break;
case "data1":
if ( $dataarray["data1"] <> "" ){
if ( CO_STYLE_DATA1 <> "" ){
// スタイルシートつきの文字列に差し替える
$dataarray["data1"] = "".$dataarray["data1"]."";
}
}
break;
case "data2":
if ( $dataarray["data2"] <> "" ){
if ( CO_STYLE_DATA2 <> "" ){
// スタイルシートつきの文字列に差し替える
$dataarray["data2"] = "".$dataarray["data2"]."";
}
}
break;
case "data3":
if ( $dataarray["data3"] <> "" ){
if ( CO_STYLE_DATA3 <> "" ){
// スタイルシートつきの文字列に差し替える
$dataarray["data3"] = "".$dataarray["data3"]."";
}
}
break;
case "data4":
if ( $dataarray["data4"] <> "" ){
if ( CO_STYLE_DATA4 <> "" ){
// スタイルシートつきの文字列に差し替える
$dataarray["data4"] = "".$dataarray["data4"]."";
}
}
break;
case "data5":
if ( $dataarray["data5"] <> "" ){
if ( CO_STYLE_DATA5 <> "" ){
// スタイルシートつきの文字列に差し替える
$dataarray["data5"] = "".$dataarray["data5"]."";
}
}
break;
case "data6":
if ( $dataarray["data6"] <> "" ){
if ( CO_STYLE_DATA6 <> "" ){
// スタイルシートつきの文字列に差し替える
$dataarray["data6"] = "".$dataarray["data6"]."";
}
}
break;
case "data7":
if ( $dataarray["data7"] <> "" ){
if ( CO_STYLE_DATA7 <> "" ){
// スタイルシートつきの文字列に差し替える
$dataarray["data7"] = "".$dataarray["data7"]."";
}
}
break;
case "data8":
if ( $dataarray["data8"] <> "" ){
if ( CO_STYLE_DATA8 <> "" ){
// スタイルシートつきの文字列に差し替える
$dataarray["data8"] = "".$dataarray["data8"]."";
}
}
break;
case "data9":
if ( $dataarray["data9"] <> "" ){
if ( CO_STYLE_DATA9 <> "" ){
// スタイルシートつきの文字列に差し替える
$dataarray["data9"] = "".$dataarray["data9"]."";
}
}
break;
case "data10":
if ( $dataarray["data10"] <> "" ){
if ( CO_STYLE_DATA7 <> "" ){
// スタイルシートつきの文字列に差し替える
$dataarray["data10"] = "".$dataarray["data10"]."";
}
}
break;
}
}
}
// 変数の差替えを行なう
$dispstr = $subject;
foreach( $dataarray as $key => $value ){
if ( $key <> "subject" ){
$dispstr = mb_ereg_replace("\\\$".$key."\\\$", $value, $dispstr);
}
}
return $dispstr;
}
/****************************************
* フッターに対するリンク表示 *
****************************************/
function disp_htm_futlink(){
$dfutlink = "";
if ( CO_HP_FUT_LINK <> "" ){
$dfutlink = CO_HP_FUT_LINK;
}
$futlink_styl = "";
if ( CO_STYLE_DFUTLINK <> "" ){
$futlink_styl = " style=\"".CO_STYLE_DFUTLINK."\"";
}
echo <<< EOT
$dfutlink
EOT;
}
// データファイルの差替えを実施する
// 注意:差替え日にアクセスがないと差替えは実行されません
function CheckDataFile(){
// 差替えデータファイルの有無の確認
// ファイル名を作成する
$stamp = time();
$filename = "data".date('Ymd', $stamp).".php";
if ( file_exists($filename) ){
// 差替えファイルが有ったので、ロックファイルを作成し、ファイルを差し替える
// ファイルロックを実行する
// ファイルをオープンする
$lfp = fopen(CO_DATA_LOCK_FILE,'w+');
if ( $lfp === false ){
return;
}
/// ファイルをロックする
if ( flock($lfp, LOCK_EX) === false ){
return;
}
if ( file_exists($filename) ){
// ファイルをコピーする
if ( copy($filename, CO_DATA_FILE) == true ){
// 元のファイルを削除する
unlink ($filename);
}
}
// ロックを解除
flock($lfp, LOCK_UN);
// ロックファイルをクロース
fclose($lfp);
}
}
/****************************************
*外部から送信された値を加工する *
*文字コード体系をUTF-8に変換する *
****************************************/
function chg_from($array) {
foreach($array as $key => $value){
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// 文字列をUTF-8にエンコードして保存する。
$enc = mb_detect_encoding($value, "UTF-8,SJIS,auto");
if (isset($enc) and $enc != "UTF-8") { // UTF-8と違う。
if ( $enc <> "" ){
$value = mb_convert_encoding($value, "UTF-8", $enc); // UTF-8に変更する。
}
}
$array[$key] = $value;
}
return $array;
}
/****************************************
*キャリアの判別を行なう *
* WILLCOM関係はPCと同等と扱う *
****************************************/
function ka_ad_car_get(){
if(eregi("DoCoMo", $_SERVER["HTTP_USER_AGENT"])) {
return "i";
} else
if( eregi("J-PHONE", $_SERVER["HTTP_USER_AGENT"]) ||
eregi("Vodafone", $_SERVER["HTTP_USER_AGENT"]) ||
eregi("Nokia6820", $_SERVER["HTTP_USER_AGENT"]) ||
eregi("SoftBank", $_SERVER["HTTP_USER_AGENT"])){
return "sb";
} else
if(eregi("UP.Browser", $_SERVER["HTTP_USER_AGENT"]) ||
eregi("KDDI", $_SERVER["HTTP_USER_AGENT"]) ){
return "au";
}
return "pc";
}
/****************************************
*HTMLのclass=dtopの部分を表示する *
****************************************/
function disp_html_dtopad(){
$dtop_ad = "";
if ( CO_HP_TOP_AD <> "" ){
$dtop_ad = CO_HP_TOP_AD;
}
echo <<< EOT
$dtop_ad
EOT;
}
/****************************************
*HTMLのclass=dfutadの部分を表示する *
****************************************/
function disp_html_dfutad(){
$dfut_ad = "";
if ( CO_HP_FUT_AD <> "" ){
$dfut_ad = CO_HP_FUT_AD;
}
echo <<< EOT
$dfut_ad
EOT;
}
/****************************************
*HTMLのclass=dtopの部分を表示する *
****************************************/
function disp_html_dtop($skey = "", $title=CO_HP_TITLE){
$dtop_styl = "";
if ( CO_STYLE_BODY <> "" ){
$dtop_styl = " style=\"".CO_STYLE_DTOP."\"";
}
$dban_styl = "";
if ( CO_STYLE_BODY <> "" ){
$dban_styl = " style=\"".CO_STYLE_DBAN."\"";
}
$dtitle_styl = "";
if ( CO_STYLE_BODY <> "" ){
$dtitle_styl = " style=\"".CO_STYLE_DTITLE."\"";
}
$dinput_styl = "";
if ( CO_STYLE_BODY <> "" ){
$dinput_styl = " style=\"".CO_STYLE_DINPUT."\"";
}
$hp_title = "";
if ( CO_HP_TITLE <> "" ){
$hp_title = CO_HP_TITLE;
// スタイルシートの適用
if ( CO_STYLE_TITLE <> "" ){
$hp_title = "".$hp_title."
\n";
} else {
$hp_title = "".$hp_title."
";
}
}
$hp_note = "";
if ( CO_HP_NOTE <> "" ){
$hp_note = CO_HP_NOTE;
}
$inputbtnname = "";
if ( CO_HP_BTN_NAME <> "" ){
$inputbtnname = " value = \"".CO_HP_BTN_NAME."\"";
}
$input_form = "\n";
echo <<< EOT
$hp_title
$hp_note
$input_form
EOT;
}
/****************************************
*HTMLのフッター部を表示する *
****************************************/
function disp_html_fut(){
$dfut = CO_HP_FUT;
$dfut_styl = "";
if ( CO_STYLE_DFUT <> "" ){
$dfut_styl = " style=\"".CO_STYLE_DFUT."\"";
}
echo <<< EOT
$dfut