0){ $host = gethostbyaddr($addr); if(strlen($host) == 0){ if(isset($_SERVER['REMOTE_HOST']) && strlen($_SERVER['REMOTE_HOST']) > 0) $host = $_SERVER['REMOTE_HOST']; else $host = $addr; } } return $host; } //SSL実行のチェック function isSSL() { $ret = true; if((false !== empty($_SERVER['HTTPS'])) || ('off' === $_SERVER['HTTPS'])) $ret = false; return $ret; } //ブラウザの言語設定取得 function getHttpAcceptLanguage() { $ret = ''; if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ $data = array(); $max = 0; foreach(explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $lang){ $ar = explode(';', $lang); //最優先は数値がついていない if(count($ar) > 1) $data += array(trim($ar[0]) => trim(str_replace('q=', '', $ar[1]))); else $data += array($lang => 1); } foreach($data as $lang => $rate){ if((double)$rate > (double)$max){ $ret = $lang; $max = $rate; } } } return $ret; } //パラメータを指定の配列にコピー function loadParameter(&$param, $html_escape=false, $type='POST') { $param = array(); $res = false; switch(strtoupper($type)){ case 'POST': if(isset($_POST)){ if($html_escape){ foreach($_POST as $key => $value){ $key = setHtmlEscapeString($key); if(is_array($value)){ $param += array($key => array()); foreach($value as $val) $param[$key][] = setHtmlEscapeString($val); } else{ $param += array($key => setHtmlEscapeString($value)); } } } else{ foreach($_POST as $key => $value){ if(is_array($value)){ $param += array($key => array()); foreach($value as $val) $param[$key][] = $val; } else{ $param += array($key => $value); } } } $res = true; } break; case 'GET': if(isset($_GET)){ if($html_escape){ foreach($_GET as $key => $value){ $key = setHtmlEscapeString($key); if(is_array($value)){ $param += array($key => array()); foreach($value as $val) $param[$key][] = setHtmlEscapeString($val); } else{ $param += array($key => setHtmlEscapeString($value)); } } } else{ foreach($_GET as $key => $value){ if(is_array($value)){ $param += array($key => array()); foreach($value as $val) $param[$key][] = $val; } else{ $param += array($key => $value); } } } $res = true; } break; case 'COOKIE': if(isset($_COOKIE)){ if($html_escape){ foreach($_COOKIE as $key => $value){ $key = setHtmlEscapeString($key); if(is_array($value)){ $param += array($key => array()); foreach($value as $val) $param[$key][] = setHtmlEscapeString($val); } else{ $param += array($key => setHtmlEscapeString($value)); } } } else{ foreach($_COOKIE as $key => $value){ if(is_array($value)){ $param += array($key => array()); foreach($value as $val) $param[$key][] = $val; } else{ $param += array($key => $value); } } } $res = true; } break; default: if(isset($_REQUEST)){ if($html_escape){ foreach($_REQUEST as $key => $value){ $key = setHtmlEscapeString($key); if(is_array($value)){ $param += array($key => array()); foreach($value as $val) $param[$key][] = setHtmlEscapeString($val); } else{ $param += array($key => setHtmlEscapeString($value)); } } } else{ foreach($_REQUEST as $key => $value){ if(is_array($value)){ $param += array($key => array()); foreach($value as $val) $param[$key][] = $val; } else{ $param += array($key => $value); } } } $res = true; } break; } return $res; } /* ========================================== 通信関連 =========================================== */ //Png送信 function ping($host, $port=80, $timeout=6) { $ret = false; $errno = $errstr = null; $fp = fsockopen($host, $port, $errno, $errstr, $timeout); if($fp){ fclose($fp); $ret = true; } return $ret; } //IPアドレスの正規化 function normalizationIpAddr($ip){ $addr = null; $elem = explode('.', $ip); if(count($elem) == 4){ foreach($elem as $val){ $val = (int)$val; if($val < 0 || $val > 255){ $addr = null; break; } if(strlen($addr) > 0) $addr .= '.'; $addr .= sprintf("%d", $val); } } return $addr; } /* ======================================= セッション関連 ======================================= */ define('SESSION_LIFETIME', 1200); //有効期間(20分) //セッションの開始 function startSession($lifetime=SESSION_LIFETIME) { if(!isset($_SESSION)){ if((int)$lifetime > 0) ini_set('session.gc_maxlifetime', (int)$lifetime); /* ini_set('session.gc_probability', 1); ini_set('session.gc_divisor', 1); ini_set('session.use_cookies', 1); ini_set('session.use_only_cookies', 1); ini_set('session.use_trans_sid', 0); session_save_path('/var/tmp');*/ session_cache_limiter('private_no_expire'); session_start(); session_regenerate_id(true); } } //セッションの破棄 //※この関数を呼び出すと、同一ドメイン上のセッションは全て破棄されるので注意! function closeSession() { if(isset($_SESSION)){ //セッション変数を全て解除する $_SESSION = array(); //セッションを切断するにはセッションクッキーも削除する。 if(isset($_COOKIE[session_name()])) setcookie(session_name(), '', time() - 42000, '/'); //最終的に、セッションを破壊する session_destroy(); } return; } /* //セッションの有効性をチェック function IsSessionAlive($session_name, $session_life=SESSION_LIFETIME) { //セッション構造体の中に、「access」という項目を作成しておくこと! $result = ERROR_NOT_LOGGEDIN; if(isset($_SESSION[ $session_name ])){ if(isset($_SESSION[ $session_name ]['access']) && !empty($_SESSION[ $session_name ]['access'])){ $result = ERROR_SESSION_TIMEOUT; $now = time(); if($session_life > ($now - $_SESSION[ $session_name ]['access'])){ $_SESSION[ $session_name ]['access'] = $now; $result = ERROR_SUCCESS; } } } return $result; } //セッション構造体を生成する // ※必要に応じて、適宜変更してくだされ // 但し、最初から宣言されているものは変更/削除しないこと! function createSessionStruct($session_name) { if(!isset($_SESSION[ $session_name ])){ $_SESSION[ $session_name ] = array ( 'id' => '', //顧客ID 'name' => '', //顧客名(フルネーム) 'proc' => 'attest', //実行中のページID 'ctrl' => false, //リロード対策フラグ 'access'=> time() //セッション有効性チェッカー ); } } */ /* ==================================== データベース操作(1) ===================================== */ // データベース接続設定の取得 function connectDB($db_name=''/*$db_setting=null*/) { $conn = null; $db_setting = '/home/vps100800847/public_html/cmn/data/db.dat'; $fp = fopen($db_setting, 'r'); if($fp){ $db_name = trim($db_name); $db_param = array(); while($line = fgets($fp)){ $line = trim(removeLineFeed($line)); if(strlen($line) > 0 && strcmp(substr($line, 0, 1), '#') != 0){ list($key, $val) = explode('=', $line, 2); $key = trim($key); $val = trim($val); if(strlen($key) > 0 && strlen($val) > 0){ if(strcasecmp($key, 'dbname') == 0){ if(!empty($db_name)) $val = $db_name; } $db_param[] = sprintf("%s=%s", $key, $val); } } } fclose($fp); $conn = pg_connect(implode(' ', $db_param)); } return $conn; } //SQLの結果レコードを配列で返す (Postgres用) //$html_escape=trueでHTML表示用にエスケープ function fetchArray($res, $html_escape=false) { $rec = null; if($res){ $rec = pg_fetch_assoc($res); if(is_array($rec) && $html_escape){ foreach($rec as $key => $val) $rec[ $key ] = setHtmlEscapeString($val); } } return $rec; } function getServerFullPath() { $path = __FILE__; $pos = strpos($path, basename($_SERVER['PHP_SELF'])); return substr($path, 0, $pos); } //MySQL(MovableType)に接続 //MySQLi使用バージョン function connectMySql() { set_include_path( sprintf("%s%s/home/vps100800847/public_html/mt/php", get_include_path(), PATH_SEPARATOR) ); require_once('mt.php'); $conn = null; $mt = MT::get_instance(null, 'mt-config.cgi'); if($mt){ $conn = new mysqli($mt->config('DBHost'), $mt->config('DBUser'), $mt->config('DBPassword'), $mt->config('Database')); if($conn){ if(!$conn->set_charset('utf8')){ $conn->close(); $conn = null; } } } return $conn; } //※この関数の使用は非推奨 function connectMySqlDB() { set_include_path( sprintf("%s%s/home/vps100800847/public_html/mt/php", get_include_path(), PATH_SEPARATOR) ); require_once('mt.php'); $mt = MT::get_instance(null, 'mt-config.cgi'); $conn = mysql_connect($mt->config('DBHost'), $mt->config('DBUser'), $mt->config('DBPassword')); if($conn){ // データベースを選択する if(!mysql_select_db($mt->config('Database'))){ mysql_close($conn); $conn =null; } if(!mysql_query('SET NAMES utf8;')){ mysql_close($conn); $conn =null; } } return $conn; } //SQLの結果レコードを配列で返す (MySQL用) //$html_escape=trueでHTML表示用にエスケープ function myFetchArray($res, $html_escape=false) { $rec = null; if($res){ $rec = $res->fetch_array(MYSQLI_ASSOC); if(is_array($rec) && $html_escape){ foreach($rec as $key => $val) $rec[ $key ] = self::setHtmlEscapeString($val); } } return $rec; } //この関数は使用禁止 //postgresは「pg_escape_string」を、mysqlは「real_escape_string」を //それぞれ使用すること function setSqlEscapeString($str) { //シングルクォーテーションなどをSQL用にエスケープ $str = preg_replace('/\\\\/u', "\\\\\\\\", $str); $str = preg_replace('/\'/u', "''", $str); return $str; } /* ==================================== データベース操作(2) ===================================== */ //アクセスログを記録 function writeAccessLog($action, $conn=null) { $ret = true; //自社からのアクセス if(strcmp($_SERVER['REMOTE_ADDR'], '61.204.201.197') == 0) return $ret; //ボット if(stripos($_SERVER['HTTP_USER_AGENT'], 'bot') !== false || stripos($_SERVER['HTTP_USER_AGENT'], 'crawl') !== false) return $ret; $remote_host = gethostbyaddr($_SERVER['REMOTE_ADDR']); if(stripos($remote_host, 'bot') !== false || stripos($remote_host, 'crawl') !== false) return $ret; $self = false; if(!$conn){ $self = true; $conn = connectDB(); if(!$conn) return false; } $sql = 'INSERT INTO' . ' visitor (acc_date,abstract,remote_addr,remote_host,user_agent) ' . 'VALUES' . sprintf ( " (now(),'%s','%s','%s','%s');", pg_escape_string($conn, $action), pg_escape_string($conn, $_SERVER['REMOTE_ADDR']), pg_escape_string($conn, $remote_host), pg_escape_string($conn, $_SERVER['HTTP_USER_AGENT']) ); $ret = pg_query($conn, $sql); if($self) pg_close($conn); return $ret; } /* ========================================= 文字列操作 ========================================= */ function mbTrim($string) { $whitespace = '[\s\0\x0b\p{Zs}\p{Zl}\p{Zp}]'; return preg_replace(sprintf('/(^%s+|%s+$)/u', $whitespace, $whitespace), '', $string); } function mbRTrim($string) { $whitespace = '[\s\0\x0b\p{Zs}\p{Zl}\p{Zp}]'; return preg_replace(sprintf('/(%s+$)/u', $whitespace), '', $string); } function mbLTrim($string) { $whitespace = '[\s\0\x0b\p{Zs}\p{Zl}\p{Zp}]'; return preg_replace(sprintf('/(^%s+)/u', $whitespace), '', $string); } function mbTrimComment($str) { if(preg_match('/^\"(.*)\"$/u', $str, $matches)) return $matches[1]; return $str; } //改行コード除去 function removeLineFeed($string, $quote='') { return str_replace(array("\r\n","\r","\n"), $quote, $string); } //メールアドレスとして正しいかをチェック function checkMailAddrFormat($address) { return preg_match('/^[-+.\\w]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]{2,6}$/i', $address); } //電話(FAX)番号として正しいかをチェック function checkTelephoneNumberFormat($number) { //数字とハイフン、半角括弧以外が含まれている場合はエラー return preg_match('/^[0-9()-]+$/', $number); } //ダブルクォーテーションなどをHTML表示用にエスケープ function setHtmlEscapeString($str) { /* $str = preg_replace('/\&/u','&', $str); // $str = preg_replace('/\s/u',' ', $str); //これはしてはいけない(文字化けになる) $str = preg_replace('/\"/u','"', $str); $str = preg_replace('/\/u','>', $str); return $str;*/ return htmlentities($str, ENT_QUOTES, 'UTF-8'); } //カンマ区切りの数字を返す function setSeparatorNumeric($val, $decimals=0) { return number_format((float)$val, (int)$decimals); } //ランダムな文字列を生成する。 function getRandomString($len, $charset=3) { $res = ''; if((int)$len > 0){ $charlist = ''; switch((int)$charset){ case 1: //数字のみ $charlist = '0123456789'; break; case 2: //英大文字のみ $charlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; break; case 3: //数字 + 英大文字 $charlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; break; case 4: //英小文字のみ $charlist = 'abcdefghijklmnopqrstuvwxyz'; break; case 5: //数字 + 英小文字 $charlist = 'abcdefghijklmnopqrstuvwxyz0123456789'; break; case 6: //英文字(大小混合) $charlist = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; break; case 7: //数字 + 英文字(大小混合) $charlist = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; break; default: break; } if(strlen($charlist) > 0){ list($usec, $sec) = explode(' ', microtime(), 2); $seed = (float)$sec + ((float)$usec * 100000); mt_srand($seed); for($i=0;$i<(int)$len;$i++) $res .= $charlist{mt_rand(0, strlen($charlist) - 1)}; } } return $res; } //ランダムな数値を生成する。 function getRandomNumber($min, $max) { list($usec, $sec) = explode(' ', microtime()); $seed = (float)$sec + ((float)$usec * 100000); mt_srand($seed); return mt_rand($min, $max); } //文字列を暗号化する function setEncryptString($str, $key) { $key = md5($key); //暗号化モジュール使用開始 $td = mcrypt_module_open('des', '', 'ecb', ''); $key = substr($key, 0, mcrypt_enc_get_key_size($td)); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); //暗号化モジュール初期化 $result = null; if(mcrypt_generic_init($td, $key, $iv) >= 0) $result = base64_encode(mcrypt_generic($td, $str)); //データを暗号化 mcrypt_generic_deinit($td); mcrypt_module_close($td); return $result; } //暗号文字列を復号する function setDecryptString($str, $key) { $key = md5($key); //暗号化モジュール使用開始 $td = mcrypt_module_open('des', '', 'ecb', ''); $key = substr($key, 0, mcrypt_enc_get_key_size($td)); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); //暗号化モジュール初期化 $result = null; if(mcrypt_generic_init($td, $key, $iv) >= 0) $result = rtrim(mdecrypt_generic($td, base64_decode($str)), "\0"); //データを復号化 mcrypt_generic_deinit($td); mcrypt_module_close($td); return $result; } //Google翻訳 function GoogleTranslation($message, $lang_to='en', $lang_from='ja') { $data = file_get_contents( sprintf("http://www.google.co.jp/translate_t?langpair=%s|%s&oe=UTF-8&text=%s", $lang_from, $lang_to, urlencode($message)) ); $r = "/(.*?)<\/span>/"; preg_match($r, $data, $m); return strip_tags($m[1]); } /* ========================================== 日付計算 ========================================== */ //曜日を取得する function getWeekday($date, $format=0) { $w = date('w', strtotime($date)); $week = array(); switch((int)$format){ case 1: //英語、短い表記 $week = array('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); break; case 2: //英語、長い表記 $week = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); break; default: //日本語 $week = array('日','月','火','水','木','金','土'); break; } return $week[$w]; } //月末日付を取得する function getMonthEndDay($year, $month) { $dt = mktime(0, 0, 0, $month + 1, 0, $year); return date('d', $dt); } //起算日付に指定月数を加算した結果を返す function addMonth($year, $month, $day, $addMonths) { $month += $addMonths; $endDay = getMonthEndDay($year,$month); //ここで、前述した月末日を求める関数を使用します if($day > $endDay) $day = $endDay; $dt = mktime(0, 0, 0, $month, $day, $year); //正規化 return date('Y-m-d', $dt); } //起算日付に指定日数を加算した結果を返す function addDay($year, $month, $day, $addDays) { $baseSec = mktime(0, 0, 0, $month, $day, $year); //基準日を秒で取得 $addSec = $addDays * 86400; //日数×1日の秒数 $targetSec = $baseSec + $addSec; return date('Y-m-d', $targetSec); } //指定日付の間隔(日数)を返す function compareDate($date1, $date2) { $ts1 = strtotime($date1); $ts2 = strtotime($date2); $diff = abs($ts2 - $ts1); return (int)($diff / (60 * 60 * 24)); } //閏年判定 (true=閏年) function isLeapYear($year) { return (bool)(($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0); } //和暦変換 function toWareki($date) { if(!preg_match('/^(\d{4})\/(\d{1,2})\/(\d{1,2})$/u', $date, $matches)) return $date; $y = (int)$matches[1]; $m = (int)$matches[2]; $d = (int)$matches[3]; $ymd = sprintf("%04d%02d%02d", $y, $m, $d); $gg = ''; $yy = 0; if($ymd <= '19120729'){ $gg = '明治'; $yy = $y - 1867; } else if($ymd >= '19120730' && $ymd <= '19261224'){ $gg = '大正'; $yy = $y - 1911; } else if($ymd >= '19261225' && $ymd <= '19890107'){ $gg = '昭和'; $yy = $y - 1925; } else if($ymd >= '19890108'){ $gg = '平成'; $yy = $y - 1988; } return sprintf("%s%d年%d月%d日", $gg, (int)$yy, (int)$m, (int)$d); } //カレンダーの元データ生成 function makeCalendarSeed($year, $month) { $calendar = array(); $last_day = date('j', mktime(0, 0, 0, $month + 1, 0, $year)); $j = 0; //月末日までループ for($i=1;$i<$last_day+1;$i++){ //曜日を取得 $week = date('w', mktime(0, 0, 0, $month, $i, $year)); //1日の場合 if($i == 1){ //1日目の曜日までをループ for($s=1;$s<=$week;$s++){ //前半に空文字をセット $calendar[$j]['day'] = date('d', strtotime(sprintf("-%d day", ($week - $s + 1)), strtotime(sprintf("%d/%d/01 ", $year, $month)))); $calendar[$j]['surplus'] = true; $j++; } } //配列に日付をセット $calendar[$j]['day'] = $i; $calendar[$j]['surplus'] = false; $j++; //月末日の場合 if($i == $last_day){ //月末日から残りをループ $day = 1; for($s=1;$s<=6 - $week;$s++){ //後半に空文字をセット $calendar[$j]['day'] = $day; $calendar[$j]['surplus'] = true; $day++; $j++; } } } return $calendar; } /* ======================================== ファイル操作 ======================================== */ //フォルダ内アイテムを列挙 function enumDirectoryItems($directory, &$items, $folder_exclusion=false) { $items = array(); $ret = false; if(file_exists($directory) && is_dir($directory)){ $dir = opendir($directory); if($dir){ if($folder_exclusion){ //ディレクトリは除外 while($f = readdir($dir)){ if($f != '.' && $f != '..'){ $path = sprintf("%s/%s", $directory, $f); if(!is_dir($path)) $items[] = $f; } } } else{ while($f = readdir($dir)){ if($f != '.' && $f != '..') $items[] = $f; } } closedir($dir); $ret = true; } } return $ret; } //フォルダ削除(サブフォルダも削除される) function deleteDirectory($target_dir) { $ret = false; if(file_exists($target_dir) && is_dir($target_dir)){ $dir = opendir($target_dir); if($dir){ $ret = true; while($f = readdir($dir)){ if($f != '.' && $f != '..'){ //ディレクトリでない場合のみ $path = sprintf("%s/%s", $target_dir, $f); $ret = (is_dir($path) ? deleteDirectory($path) : unlink($path)); if(!$ret) break; } } closedir($dir); if($ret) $ret = rmdir($target_dir); } } return $ret; } //ファイル拡張子取得 function getFileExtension($path) { $ret = ''; if(preg_match('/.+\.(.*)$/u',$path,$matches)) $ret = strtolower($matches[1]); return $ret; } //ファイルの容量単位を返す function getBytesUnit($size) { $unim = array('Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'); $c = 0; while($size >= 1024){ $c++; $size = $size / 1024; } return sprintf("%s %s", number_format($size, ($c ? 2 : 0), '.', ','), $unim[$c]); } //アップロードされたファイルを取得する function getUploadedFile($control, &$file) { $file = null; $result = false; if(is_uploaded_file($_FILES[ $control ]['tmp_name']) && file_exists($_FILES[ $control ]['tmp_name']) && is_file($_FILES[ $control ]['tmp_name'])){ $file = $_FILES[ $control ]['tmp_name']; $result = true; } return $result; } //指定ファイルをダウンロードさせる // $archiveはファイル名、$pathは対象のファイルパス function setDownloadFile($archive, $path) { $result = false; if(file_exists($path) && !is_dir($path)){ header( sprintf("Last-Modified: %s GMT", gmdate('D, d M Y H:i:s')) ); header('Content-Description: File Transfer'); header( sprintf("Content-Type: %s", setMimeHeaderString($archive)) ); header( sprintf("Content-Disposition: attachment; filename=\"%s\"", $archive) ); header('Content-Transfer-Encoding: binary'); header( sprintf("Content-Length: %d", filesize($path)) ); header('Cache-Control: public'); header('Pragma: public'); if(readfile($path) !== false) $result = true; } return $result; } //MIMEヘッダー出力用のファイルタイプを返す function setMimeHeaderString($path) { $ext = strtolower( getFileExtension($path) ); $ret = ''; if(!empty($ext)){ if(strcmp($ext, 'txt') == 0) $ret = 'text/plain'; //テキスト文書 else if(strcmp($ext, 'csv') == 0) $ret = 'text/csv'; //CSVファイル else if(strcmp($ext, 'tsv') == 0) $ret = 'text/tab-separated-values'; //TSVファイル else if(strcmp($ext, 'doc') == 0 || strcmp($ext, 'docx') == 0) $ret = 'application/msword'; //ワード文書 else if(strcmp($ext, 'xls') == 0 || strcmp($ext, 'xlsx') == 0) $ret = 'application/vnd.ms-excel'; //エクセルシート else if(strcmp($ext, 'ppt') == 0 || strcmp($ext, 'pptx') == 0) $ret = 'application/vnd.ms-powerpoint'; //パワーポイント else if(strcmp($ext, 'pdf') == 0) $ret = 'application/pdf'; //PDF文書 else if(strcmp($ext, 'xdw') == 0) $ret = 'application/vnd.fujixerox.docuworks'; //Docuworks else if(strcmp($ext, 'html') == 0 || strcmp($ext, 'htm') == 0) $ret = 'text/html'; //HTML文書 else if(strcmp($ext, 'css') == 0) $ret = 'text/css'; //スタイルシート else if(strcmp($ext, 'js') == 0) $ret = 'text/javascript'; //JavaScriptファイル else if(strcmp($ext, 'hdml') == 0) $ret = 'text/x-hdml'; //HDML文書 else if(strcmp($ext, 'jpg') == 0 || strcmp($ext, 'jpeg') == 0) $ret = 'image/jpeg'; //JPEG else if(strcmp($ext, 'png') == 0) $ret = 'image/png'; //PNG else if(strcmp($ext, 'gif') == 0) $ret = 'image/gif'; //GIF else if(strcmp($ext, 'bmp') == 0) $ret = 'image/bmp'; //ビットマップ else if(strcmp($ext, 'ai') == 0) $ret = 'application/postscript'; //イラストレーター else if(strcmp($ext, 'mp3') == 0) $ret = 'audio/mpeg'; //MP3 else if(strcmp($ext, 'm4a') == 0) $ret = 'audio/mp4'; //MP4 else if(strcmp($ext, 'wav') == 0) $ret = 'audio/x-wav'; //WAV else if(strcmp($ext, 'mid') == 0 || strcmp($ext, 'midi') == 0) $ret = 'audio/midi'; //MIDI else if(strcmp($ext, 'mmf') == 0) $ret = 'application/x-smaf'; //SMAF else if(strcmp($ext, 'swf') == 0) $ret = 'application/x-shockwave-flash'; //Flash (Shockwave) else if(strcmp($ext, 'mpg') == 0 || strcmp($ext, 'mpeg') == 0) $ret = 'video/mpeg'; //MPEG else if(strcmp($ext, 'wmv') == 0) $ret = 'video/x-ms-wmv'; //WMV else if(strcmp($ext, '3g2') == 0) $ret = 'video/3gpp2'; //3GPP2 else if(strcmp($ext, 'zip') == 0) $ret = 'application/zip'; //ZIP形式 else if(strcmp($ext, 'lha') == 0 || strcmp($ext, 'lzh')) $ret = 'application/x-lzh'; //LZH形式 else if(strcmp($ext, 'tar') == 0 || strcmp($ext, 'tgz')) $ret = 'application/x-tar'; //tar, tar+gzip形式 else $ret = 'application/octet-stream'; //実行ファイルなど } return $ret; } //画像をリサイズする function resizeImage($source, $ratio, $output) { $ret = false; if(file_exists($source) && (int)$ratio > 0){ $extention = getFileExtension($source); //ファイル名から、画像インスタンスを生成 switch($extention){ case 'jpg': case 'jpeg': case 'jpe': $image = ImageCreateFromJpeg($source); break; case 'png': $image = ImageCreateFromPNG($source); break; case 'gif': $image = ImageCreateFromGIF($source); break; } if($image){ //コピー元画像のファイルサイズを取得 $image_w = ImageSX($image); //横幅(ピクセル) $image_h = ImageSY($image); //縦幅(ピクセル) //出力する画像サイズの指定 $width = floor($image_w * ((int)$ratio / 100)); $height = floor($image_h * ((int)$ratio / 100)); //サイズを指定して、背景用画像を生成 $canvas = ImageCreateTrueColor($width, $height); if($canvas){ //背景画像に、画像をコピーする ImageCopyResampled( $canvas, //背景画像 $image, //コピー元画像 0, //背景画像の x 座標 0, //背景画像の y 座標 0, //コピー元の x 座標 0, //コピー元の y 座標 $width, //背景画像の幅 $height, //背景画像の高さ $image_w, //コピー元画像ファイルの幅 $image_h //コピー元画像ファイルの高さ ); //画像を出力する switch($extention){ case 'jpg': case 'jpeg': case 'jpe': ImageJpeg( $canvas, //背景画像 $output, //出力するファイル名(省略すると画面に表示する) 100 //画像精度(100%で作成) ); break; case 'png': ImagePNG($canvas, $output); //PNGファイルを出力 break; case 'gif': ImageGIF($canvas, $output); //GIFファイルを出力 break; } //メモリを開放する imagedestroy($canvas); $ret = true; } } } return $ret; } //サムネイル表示用画像を出力する function makeThumbnail($src_path, $dst_path, $max_wh=1200) { if(!file_exists($src_path) || !is_file($src_path)) return false; $res = false; $img = null; $extension = strtolower(getFileExtension($src_path)); if(strlen($extension) > 0){ switch($extension){ case 'jpg': case 'jpeg': case 'jpe': $img = ImageCreateFromJPEG($src_path); //JPEGファイルを読み込む break; case 'png': $img = ImageCreateFromPNG($src_path); //PNGファイルを読み込む break; case 'gif': $img = ImageCreateFromGIF($src_path); //GIFファイルを読み込む break; default: break; } } else{ $res = exif_imagetype($src_path); if($res !== false){ switch($res){ case IMAGETYPE_GIF: $img = ImageCreateFromGIF($src_path); break; case IMAGETYPE_JPEG: $img = ImageCreateFromJPEG($src_path); break; case IMAGETYPE_PNG: $img = ImageCreateFromPNG($src_path); break; default: break; } } unset($res); /* $img = ImageCreateFromJPEG($src_path); //JPEGファイルを読み込む if(!$img){ $img = ImageCreateFromPNG($src_path); //PNGファイルを読み込む if(!$img) $img = ImageCreateFromGIF($src_path); //GIFファイルを読み込む }*/ } if($img){ $max_w = $max_wh; $max_h = $max_wh; $src_w = ImageSX($img); //横幅(ピクセル) $src_h = ImageSY($img); //縦幅(ピクセル) if($src_w > $max_w || $src_h > $max_h){ if($src_w / $src_h > $max_w / $max_h){ $t_w = $max_w; $t_h = $max_w * $src_h / $src_w; } else{ $t_w = $max_h * $src_w / $src_h; $t_h = $max_h; } } else{ $t_w = $src_w; $t_h = $src_h; } $thumb = ImageCreateTrueColor($t_w, $t_h); if($thumb){ if(ImageCopyResized($thumb, $img, 0, 0, 0, 0, $t_w, $t_h, $src_w, $src_h)){ switch( strtolower(getFileExtension($dst_path)) ){ case 'jpg': case 'jpeg': case 'jpe': $res = ImageJPEG($thumb, $dst_path, 100); //JPEGファイルを出力 break; case 'png': $res = ImagePNG($thumb, $dst_path); //PNGファイルを出力 break; case 'gif': $res = ImageGIF($thumb, $dst_path); //GIFファイルを出力 break; } } imagedestroy($thumb); } imagedestroy($img); } return $res; } function imageCompression($img_path, $limit=0) { if(empty($img_path) || !is_file($img_path)) return null; // 最大容量 (バイト単位) if((int)$limit <= 0) $limit = 100 * 1024; // ファイルの種類判別(jpeg, pngのみ) list($img_width, $img_height, $type) = getimagesize($img_path); switch($type){ case 2: $img_input_func = "imagecreatefromjpeg"; $img_output_func = "imagejpeg"; $img_contenttype = "image/jpeg"; $start = 100; $end = 1; $step = -5; break; case 3: $img_input_func = "imagecreatefrompng"; $img_output_func = "imagepng"; $img_contenttype = "image/png"; $start = 0; $end = 9; $step = 1; break; default: return null; } if(!($src = @$img_input_func($img_path))) return null; $quality = $start; $outfile = null; while(true){ ob_start(); $img_output_func($src, null, $quality); $quality += $step; $outfile = ob_get_clean(); $file_size = strlen($outfile); if($file_size > $limit){ if($start <= $quality && $quality <= $end) continue; if($end <= $quality && $quality <= $start) continue; } break; } imagedestroy($src); return ($file_size > $limit ? null : $outfile); } /* ======================================== 郵便番号検索 ======================================== */ //都道府県リストを返す function getPrefectureList() { //全国地方公共団体コード準拠 return array ( 1 => '北海道', 2 => '青森県', 3 => '岩手県', 4 => '宮城県', 5 => '秋田県', 6 => '山形県', 7 => '福島県', 8 => '茨城県', 9 => '栃木県', 10 => '群馬県', 11 => '埼玉県', 12 => '千葉県', 13 => '東京都', 14 => '神奈川県', 15 => '新潟県', 16 => '富山県', 17 => '石川県', 18 => '福井県', 19 => '山梨県', 20 => '長野県', 21 => '岐阜県', 22 => '静岡県', 23 => '愛知県', 24 => '三重県', 25 => '滋賀県', 26 => '京都府', 27 => '大阪府', 28 => '兵庫県', 29 => '奈良県', 30 => '和歌山県', 31 => '鳥取県', 32 => '島根県', 33 => '岡山県', 34 => '広島県', 35 => '山口県', 36 => '徳島県', 37 => '香川県', 38 => '愛媛県', 39 => '高知県', 40 => '福岡県', 41 => '佐賀県', 42 => '長崎県', 43 => '熊本県', 44 => '大分県', 45 => '宮崎県', 46 => '鹿児島県', 47 => '沖縄県' ); } //都道府県コード→都道府県名 function getPrefectureName($id) { $pref = getPrefectureList(); return $pref[ (int)$id ]; } //都道府県名→都道府県コード function getPrefectureId($name) { $pref = getPrefectureList(); $ret = 0; foreach($pref as $key => $value){ if(strcmp($name, $value) == 0){ $ret = $key; break; } } return $ret; } //都道府県コンボボックスを出力する function echoPrefectureList($selected=0) { $pref = getPrefectureList(); foreach($pref as $id => $name){ $name = setHtmlEscapeString($name); if((int)$id == (int)$selected) echo sprintf("\n", (int)$id, $name); else echo sprintf("\n", (int)$id, $name); } } ?>