0 ) $return .= ","; $return .= "\""; if ( $arrayIndex ){ $return .= mb_ereg_replace("<","<",mb_ereg_replace( "\"","\"\"",$array[$i][$arrayIndex[$j]] )) ."\""; } else { $return .= mb_ereg_replace("<","<",mb_ereg_replace( "\"","\"\"",$array[$i][$j] )) ."\""; } } $return .= "\n"; } return $return; } /*---------------------------------------------------------------------- * [名称] gfGetAge * [概要] 日付より年齢を計算する。 * [引数] 1:日付文字列(yyyy/mm/dd、yyyy-mm-dd hh:mm:ss等) * [戻値] 年齢の数値 * [依存] - * [注釈] - *----------------------------------------------------------------------*/ function gfGetAge($dbdate) { $ty = date('Y'); $tm = date('m'); $td = date('d'); list($by, $bm, $bd) = preg_split("/[-/ ]/", $dbdate); $age = $ty - $by; if($tm * 100 + $td < $bm * 100 + $bd) $age--; return $age; } /*---------------------------------------------------------------------- * [名称] gfDebugLog * [概要] ログファイルに変数の詳細を出力する。 * [引数] 対象となる変数 * [戻値] なし * [依存] gfPrintLog * [注釈] - *----------------------------------------------------------------------*/ function gfDebugLog($obj){ if(DEBUG_MODE === true) { GC_Utils_Ex::gfPrintLog("*** start Debug ***"); ob_start(); print_r($obj); $buffer = ob_get_contents(); ob_end_clean(); $fp = fopen(LOG_REALFILE, "a+"); fwrite( $fp, $buffer."\n" ); fclose( $fp ); GC_Utils_Ex::gfPrintLog("*** end Debug ***"); // ログテーション GC_Utils_Ex::gfLogRotation(MAX_LOG_QUANTITY, MAX_LOG_SIZE, LOG_REALFILE); } } /*---------------------------------------------------------------------- * [名称] gfPrintLog * [概要] ログファイルに日時、処理ファイル名、メッセージを出力 * [引数] 表示したいメッセージ * [戻値] なし * [依存] なし * [注釈] - *----------------------------------------------------------------------*/ function gfPrintLog($mess, $path = '') { // 日付の取得 $today = date("Y/m/d H:i:s"); // 出力パスの作成 if ($path == "") { $path = LOG_REALFILE; } // エスケープされている文字をもとに戻す $trans_tbl = get_html_translation_table (HTML_ENTITIES); $trans_tbl = array_flip ($trans_tbl); $mess = strtr($mess, $trans_tbl); $fp = fopen($path, "a+"); if($fp) { fwrite( $fp, $today." [".$_SERVER['PHP_SELF']."] ".$mess." from ". $_SERVER['REMOTE_ADDR']. "\n" ); fclose( $fp ); } // ログテーション GC_Utils_Ex::gfLogRotation(MAX_LOG_QUANTITY, MAX_LOG_SIZE, $path); } /** * ログローテーション機能 * * XXX この類のローテーションは通常 0 開始だが、本実装は 1 開始である。 * この中でログ出力は行なわないこと。(無限ループの懸念あり) * @param integer $max_log 最大ファイル数 * @param integer $max_size 最大サイズ * @param string $path ファイルパス * @return void */ function gfLogRotation($max_log, $max_size, $path) { // ファイルが存在しない場合、終了 if (!file_exists($path)) return; // ファイルが最大サイズを超えていない場合、終了 if (filesize($path) <= $max_size) return; // Windows 版 PHP への対策として明示的に事前削除 $path_max = "$path.$max_log"; if (file_exists($path_max)) { $res = unlink($path_max); // 削除に失敗時した場合、ログローテーションは見送り if (!$res) return; } // アーカイブのインクリメント for ($i = $max_log; $i >= 2; $i--) { $path_old = "$path." . ($i - 1); $path_new = "$path.$i"; if (file_exists($path_old)) { rename($path_old, $path_new); } } // 現在ファイルのアーカイブ rename($path, "$path.1"); } /*---------------------------------------------------------------------- * [名称] gfMakePassword * [概要] ランダムパスワード生成(英数字) * [引数] パスワードの桁数 * [戻値] ランダム生成されたパスワード * [依存] なし * [注釈] - *----------------------------------------------------------------------*/ function gfMakePassword($pwLength) { // 乱数表のシードを決定 srand((double)microtime() * 54234853); // パスワード文字列の配列を作成 $character = "abcdefghkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ2345679"; $pw = preg_split("//", $character, 0, PREG_SPLIT_NO_EMPTY); $password = ""; for($i = 0; $i<$pwLength; $i++ ) { $password .= $pw[array_rand($pw, 1)]; } return $password; } /*---------------------------------------------------------------------------------------------------------------------- * [名称] gfMailHeaderAddr * [概要] 入力されたメールアドレスをメール関数用の宛先に変換 * [引数] 「メールアドレス」または「名前<メールアドレス>」、複数アドレス指定時はカンマ区切りで指定する。 * [戻値] 「メールアドレス」または「JIS_MIMEにコード変換した名前 <メールアドレス>」、複数アドレス指定時はカンマ区切りで返却する。 * [依存] なし * [注釈] - *----------------------------------------------------------------------------------------------------------------------*/ function gfMailHeaderAddr($str) { $addrs = explode(",", $str); //アドレスを配列に入れる foreach ($addrs as $addr) { if (preg_match("/^(.+)<(.+)>$/", $addr, $matches)) { //引数が「名前<メールアドレス>」の場合 $mailaddrs[] = mb_encode_mimeheader(trim($matches[1]))." <".trim($matches[2]).">"; } else { //メールアドレスのみの場合 $mailaddrs[] = trim($addr); } } return implode(", ", $mailaddrs); //複数アドレスはカンマ区切りにする } } ?>