TOOL更新_次バージョンPGMの今まで載せていないPGMを書いておくことにした。(common.php、config.php、functions.php、AppSrchUtil.php)
TOOL更新_次バージョンPGMの今まで載せていないPGMを書いておくことにした。(common.php、config.php、functions.php、AppSrchUtil.php、「kaz.js」と「admin/kaz.js」)
■common.php 共通定義
<?php // ============================================================= // 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) Start // 修正BSDライセンス。 // ============================================================= /* ディレクトリの定義 */ // BASE DIR define('DIR_BASE', dirname(__FILE__) . '/../.php/'); // TEMPLATE DIR define('DIR_TEMPLATE', dirname(__FILE__) . '/templates/'); // Smarty DIR define('DIR_SMARTY', DIR_BASE . 'smarty/'); // ZendFramework DIR define('DIR_ZENDFRAMEWORK', DIR_BASE . 'ZendFramework-1.10.7/library/'); //Smarty キャッシュ DIR define('DIR_COMPILE', dirname(__FILE__) . '/compile/'); // VIEW DIR define('DIR_VIEW', dirname(__FILE__) . '/view/'); // LOG DIR define('DIR_LOG', dirname(__FILE__) . '/log/'); // uploadした秘密にする画像ファイルを置くディレクトリ。 define('DIR_UPLOAD_SECRET', dirname(__FILE__) . '/upload/'); // DOCUMENT_ROOT define('DOCUMENT_ROOT', $_SERVER['DOCUMENT_ROOT']); // uploadした画像ファイルを置くディレクトリ define('DIR_UPLOAD', 'C:/xampp/htdocs/samples/kazBase/kaz/upload/'); define('DIR_UPLOAD_WEB', '/upload/'); /* include_path を set */ $include_paths = explode(PATH_SEPARATOR, get_include_path()); $include_paths = array(); // php.iniのinclude_pathは使わないという方針にする。 $include_paths[] = '.'; $include_paths[] = DIR_BASE; $include_paths[] = DIR_SMARTY; $include_paths[] = DIR_ZENDFRAMEWORK; $include_paths[] = dirname(__FILE__) . '/'; $include_paths[] = dirname(__FILE__) . '/common/'; set_include_path(join(PATH_SEPARATOR, $include_paths)); require_once 'Zend/Log.php'; require_once 'Zend/Log/Writer/Stream.php'; require_once 'Zend/Controller/Front.php'; require_once 'Zend/Registry.php'; require_once 'Zend/Session.php'; /* Smartyを設定 */ require_once(DIR_SMARTY . 'Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = DIR_TEMPLATE; // テンプレートファイルが存在するディレクトリ $smarty->compile_dir = DIR_COMPILE; // テンプレートのキャッシュを作成するディレクトリ $smarty->left_delimiter = '{{'; $smarty->right_delimiter = '}}'; $smarty->default_modifiers = 'escape:"html"'; //Smarty Plugin require_once('AppSmartyPlugin.php'); $smarty->register_function("kaz_element", "smarty_function_kaz_element"); $smarty->register_function("kaz_token_html", "smarty_function_kaz_token_html"); $smarty->register_function("kaz_html_radio", "smarty_function_kaz_html_radio"); $smarty->register_function("kaz_html_checkbox", "smarty_function_kaz_html_checkbox"); $smarty->register_function("kaz_checkboxdispstr", "smarty_function_kaz_checkboxdispstr"); $smarty->register_function("kaz_html_select", "smarty_function_kaz_html_select"); $smarty->register_function("kaz_chk_error_assign", "smarty_function_kaz_chk_error_assign"); $smarty->register_modifier("kaz_td_nl2br", "smarty_modifier_kaz_td_nl2br"); $smarty->register_modifier("kaz_encErrTag", "smarty_modifier_kaz_encErrTag"); Zend_Registry::set('smarty',$smarty); /* ファイル読込 */ // 設定ファイル require_once('config.php'); // 共通関数ファイル require_once('functions.php'); // コンスタントファイル require_once('AppConst.php'); //ページングライブラリ require_once('PageNavi.php'); require_once('OtherException.php'); // エラーハンドリング function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) { global $db; // エラー文字列の連想を定義 // 実際に考慮するエントリは 2,8,256,512,1024のみ $errortype = array ( 1 => "Error", 2 => "Warning", 4 => "Parsing Error", 8 => "Notice", 16 => "Core Error", 32 => "Core Warning", 64 => "Compile Error", 128 => "Compile Warning", 256 => "User Error", 512 => "User Warning", 1024=> "User Notice" ); // プログラムエラー $msg = ' Errno: ' . $errno . ' Errortype: ' . $errortype[$errno] . "\n" . ' Message: ' . $errmsg . "\n" . ' Filename: ' . $filename . "\n" . ' Linenum: ' . $linenum; throw new OtherException($msg); } // 独自のエラー処理(E_NOTICE以外)を行う error_reporting(E_ALL ^ E_NOTICE); $old_error_handler = set_error_handler("userErrorHandler", E_ALL ^ E_NOTICE); // ============================================================= // 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) End // 修正BSDライセンス。 // ============================================================= ?>
■config.php 環境設定
<?php /*** 設定ファイル ***/ // 日本にする if (strncmp(PHP_OS, 'WIN', 3)) { } else { define('TIMEZONE', 'Asia/Tokyo'); putenv('TZ=' . TIMEZONE); } // システム名 (管理画面・タイトルに表示) //define('SYSTEM_NAME', 'XXXXXXXXXX'); // 管理画面ログイン用ID define('LOGIN_ID', 'admin'); // データソース名(ZEND DB 接続情報) if (strncmp(PHP_OS, 'WIN', 3)) { $DSN_ZEND = array( host=>'localhost', //接続先ホスト username=>'test', //DBユーザ名 password=>'test', //DBパスワード dbname=>'testdb' //DB名 ); } else { $DSN_ZEND = array( host=>'localhost', //接続先ホスト username=>'test', //DBユーザ名 password=>'test', //DBパスワード dbname=>'testdb' //DB名 ); } Zend_Registry::set('DSN_ZEND',$DSN_ZEND); // SMTP定義 define('SMTP', 'localhost'); // SMTPのポート define('SMTP_PORT', '25'); /* 送信メール設定 */ define('ADMIN_RETURN_PATH', 'xxxx@xxxxxxx.xxxx.xx'); define('ADMIN_FROM_NAME', '株式会社XXXXXXXXXX'); define('ADMIN_FROM_ADDRESS', 'xxxx@xxxxxxx.xxxx.xx'); define('ADMIN_TO_NAME', '株式会社XXXXXXXXXX'); define('ADMIN_TO_ADDRESS', 'xxxx@xxxxxxx.xxxx.xx'); define('MEM_USER_SUBJECT', "【XX登録】ありがとうございます(自動配信メール)"); define('MEM_ADMIN_SUBJECT', "【XX-XX】XXXXXのお知らせ"); define('CON_USER_SUBJECT', 'お問合せありがとうございます(自動配信メール)'); define('CON_ADMIN_SUBJECT', '【XX-XX】お客様からの問合せ'); define('CON_O_USER_SUBJECT', 'お問合せありがとうございます(自動配信メール)'); define('CON_SEND_SUBJECT', '【株式会社XXXXXXXXXX】お問合せへの返信'); define('KBN_MEMBER', '会員登録'); define('KBN_INQUIRY', 'お問合わせ'); define('KBN_MAILMAGA', 'メルマガ登録'); /* エラー画面HTML名設定 */ define('ADMIN_ERR_HTML', 'view/admin/errA.html'); define('USER_ERR_HTML', 'view/err.html'); /* デバック出力設定 */ define('DEBUG_FLG', true); // 入力データダンプ define('START_DEBUG_FLG', true); // 出力データダンプ define('END_DEBUG_FLG', true); ?>
■functions.php 共通関数
<?php /* 共通関数 */ // ============================================================= // 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) Start // 修正BSDライセンス。 // ============================================================= // 連想配列 → <input type="hidden" ...> function makeHidden ($vars) { $tmp = array(); foreach($vars as $key => $val) { if(!is_array($val)) { // 配列以外 array_push($tmp, htmlHidden($key, $val)); } else { // 配列 array_push($tmp, __makeHidden($key, $val)); } } return join('', $tmp); } // 連想配列 → <input type="hidden" ...> ヘルパー function __makeHidden($name, $array) { $tmp = array(); foreach($array as $key => $val) { if(!is_array($val)) { array_push($tmp, htmlHidden($name.'['.$key.']', $val)); } else { array_push($tmp, __makeHidden($name.'['.$key.']', $val)); } } return join('', $tmp); } function htmlHidden($name, $value) { return sprintf('<input type="hidden" name="%s" value="%s">'."\n", htmlspecialchars($name), htmlspecialchars($value)); } // 拡張子の抽出 function extractExt($filePath, $changeCase = 'raw') { if(!preg_match('/\.([^\.]+)$/', $filePath, $match)) { // 「.」がみつからない return; } switch($changeCase) { case 'lower': // 小文字 return strtolower($match[1]); case 'upper': // 大文字 return strtoupper($match[1]); case 'raw': // そのまま default: return $match[1]; } } // 指定ディレクトリから期限切れのファイルを削除する function removeExipredFiles($targetDir, $expireDatetime) { $d = dir($targetDir); while (false !== ($entry = $d->read())) { $filePath = $targetDir . $entry; if(is_file($filePath) && filectime($filePath) < strtotime($expireDatetime)) { if (file_exists($filePath)) { unlink($filePath); } } } $d->close(); } //マルチバイトに対応したchunk_split function mb_chunk_split($s,$ch=76,$e="\r\n") { $s_ary = explode( "\r\n", $s ); $return = ''; foreach( $s_ary as $val ){ $len = mb_strlen($val); $chunks = (int)($len/$ch); for($i=0;$i<=$chunks;$i++) { $return .= mb_substr($val,$i*$ch,$ch).$e; } //if( $chuks > 0 ){ // $return .= "\r\n"; //} } return $return; } /* ---------- ---------- ---------- ---------- */ /** * 指定したフォルダ内のファイルを削除する * */ function delFile( $path ) { if ( !is_dir($path) ) { return; } $dir = dir( $path ); $dir->rewind(); while($file = $dir->read()) { if( $file != '.' && $file != '..' && !is_dir($file) ) { if (file_exists( $path . $file )) { unlink( $path . $file ); } } } $dir->close(); } function exts() { } /** * アップされた画像ファイルをリサイズする * * @access public * @param string $rszFilename リサイズファイル名 * @param string $orgFilename オリジナルファイル名 * @param String $mimeType MIMEタイプ * @param integer $rszWidth リサイズ後の幅 * @param integer $rszHeight リサイズ後の高さ * @param integer $mod ファイルモード */ function saveResize($rszFilename,$orgFilename,$mimeType,$rszWidth,$rszHeight,$mod=0666) { if (preg_match("/jpeg/i", $mimeType)){ $function_image_create = 'ImageCreateFromJpeg'; $function_image_new = 'ImageJpeg'; } elseif (preg_match("/png/i", $mimeType)) { $function_image_create = 'ImageCreateFromGif'; $function_image_new = 'ImagePNG'; } elseif (preg_match("/gif/i", $mimeType)) { $function_image_create = 'ImageCreateFromGif'; $function_image_new = 'ImageGif'; } list($orgWidth, $orgHeight) = getimagesize($orgFilename); $rcs_resize = ImageCreate($rszWidth,$rszHeight); $rcs_origin = @$function_image_create($orgFilename); ImageCopyResized($rcs_resize, $rcs_origin, 0, 0, 0, 0, $rszWidth,$rszHeight, $orgWidth,$orgHeight); @$function_image_new($rcs_resize, $rszFilename); ImageDestroy($rcs_origin); ImageDestroy($rcs_resize); } /** * メールを送信する * * @access public * @param string $mailtoName 宛先名 * @param string $mailto 宛先アドレス * @param string $mailfromName 差出人名 * @param string $mailfrom 差出人アドレス * @param string $subject メールの件名 * @param string $body メールの本文 * @param string $extra その他ヘッダ * @param string $cSpFlg mb_chunk_splitするかしないか */ function mailSender( $mailtoName, $mailto, $mailfromName, $mailfrom, $subject, $body, $extra = '', $cSpFlg = true ) { mb_language('Japanese'); // 元のエンコーディングを保存 $orgEncoding = mb_internal_encoding(); // 変換したい文字列のエンコーディングをセット mb_internal_encoding('UTF-8'); ini_set( 'SMTP', SMTP ); ini_set( 'smtp_port', SMTP_PORT ); $header = ''; $mailto = nl2space( $mailto ); $mailtoName = nl2space( $mailtoName ); $mailfrom = nl2space( $mailfrom ); $mailfromName = nl2space( $mailfromName ); $header .= 'return-path: '. ADMIN_RETURN_PATH ."\r\n"; if( $_ENV["OS"] == 'Windows_NT' ){ $header .= 'From: ' . $mailfrom ."\r\n"; } else { $header .= 'From: ' . mb_encode_mimeheader($mailfromName) . ' <' . $mailfrom . ">\r\n" ; } $header .= $extra; $return_path = '-f '. ADMIN_RETURN_PATH; //$body = base64_encode( $body ); $body = mb_convert_kana( $body , "KV" ); if ($cSpFlg == true) { $body = mb_chunk_split( $body ); } mb_send_mail($mailto,$subject,$body,$header,$return_path); // 保存しておいたエンコーディングに戻す mb_internal_encoding($orgEncoding); } function nl2space( $src ){ return mb_eregi_replace( "[\r\n]", ' ' , $src ); } /* ---------- ---------- ---------- ---------- */ function makeDate($dateVars, $mode = null) { if(!is_array($dateVars)) { // 配列以外 if(preg_match('!^(\d{4})\D+(\d{2})\D+(\d{2})!', $dateVars, $match)) { list($matchedFull, $y, $m, $d) = $match; return sprintf(getDateFormat($mode), $y, $m, $d); } else { return null; } } else { // 配列 if($dateVars['y'] != '' && $dateVars['m'] != '' && $dateVars['d'] != '') { return sprintf(getDateFormat($mode), $dateVars['y'], $dateVars['m'], $dateVars['d']); } else { return null; } } } function getDateFormat($mode = null) { switch($mode) { case 'db': // DB用フォーマット $dateFormat = '%04d-%02d-%02d'; break; case 'abbr': // 省略形 $dateFormat = '%04d/%02d/%02d'; break; default: // デフォルト $dateFormat = '%04d年%02d月%02d日'; } return $dateFormat; } /** * 画像をUPLOAD、DELETEする。 * <br> * @param $table テーブル名 * @param $pkey 主キー情報。複数あるときは結合してください。 * @param $itemNames 画像のITEM名を配列で指定 * @param $columns テーブルITEM内容を配列で指定 * @param $mode 処理区分<br> * <ul> * <li>ins_do 登録実行 * <li>upd_do 更新実行 * <li>del_do 削除実行 * </ul> * @param $o リクエスト内容 */ function setAndDelPhoto($table, $pkey, $itemNames, &$columns, $mode, &$o) { if ($mode == 'ins_do') { if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加 echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n"; exit; } $path = DIR_UPLOAD .$table . '/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); $path = DIR_UPLOAD .$table . '/'. $pkey .'/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); foreach ($itemNames as $key => $val) { if (!ereg("^[0-9a-zA-Z_\-]+$", $val)) { // ITEM名であること。20090523追加 echo "failed itemName " . $val . " ...\n"; exit; } if ( !empty($_FILES[$val]['name'])) { $path_parts = pathinfo( $_FILES[$val]['name'] ); $photoNm = $val . '.' . strtolower($path_parts['extension']); $columns[$val] = $photoNm; move_uploaded_file( $_FILES[$val]['tmp_name'], $path . $photoNm ); chmod( $path . $photoNm, 0666 ); } } } else if ($mode == 'upd_do') { if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加 echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n"; exit; } $path = DIR_UPLOAD .$table . '/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); $path = DIR_UPLOAD .$table . '/'. $pkey .'/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); foreach ($itemNames as $key => $val) { if (!ereg("^[0-9a-zA-Z_\-]+$", $val)) { // ITEM名であること。20090523追加 echo "failed itemName " . $val . " ...\n"; exit; } $columns[$val] = $o['old_' . $val]; if ( !empty($_FILES[$val]['name']) && empty( $o['del_' . $val] )) { if ($o['old_' . $val] != '') { if (!ereg("^[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $o['old_' . $val])) { // ファイル名であること。20090523追加 echo "failed to del " . $o['old_' . $val] . " ...\n"; exit; } if (file_exists($path . $o['old_' . $val])) { unlink($path . $o['old_' . $val]); } } if ( !empty($_FILES[$val]['name'])) { $path_parts = pathinfo( $_FILES[$val]['name'] ); $photoNm = $val . '.' . strtolower($path_parts['extension']); $columns[$val] = $photoNm; move_uploaded_file( $_FILES[$val]['tmp_name'], $path . $photoNm ); chmod( $path . $photoNm, 0666 ); } } else if ( !empty( $o['del_' . $val] )) { if ($o['old_' . $val] != '') { if (!ereg("^[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $o['old_' . $val])) { // ファイル名であること。20090523追加 echo "failed to del " . $o['old_' . $val] . " ...\n"; exit; } if (file_exists($path . $o['old_' . $val])) { unlink($path . $o['old_' . $val]); } $columns[$val] = ''; } } } } else if ($mode == 'del_do') { if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加 echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n"; exit; } $path = DIR_UPLOAD .$table . '/'. $pkey .'/'; delFile( $path ); if ( is_dir($path) ) { rmdir( $path ); } } } /** * 画像TempをUPLOADする。 * <br> * @param $itemNames 画像のITEM名を配列で指定 * @param $o リクエスト内容 */ function setPhotoTemp($itemNames, &$o) { $path = getTempFolder(); foreach ($itemNames as $key => $val) { if (!ereg("^[0-9a-zA-Z_\-]+$", $val)) { // ITEM名であること。20090523追加 echo "failed itemName " . $val . " ...\n"; exit; } if ( !empty($_FILES[$val]['name'])) { $path_parts = pathinfo( $_FILES[$val]['name'] ); $photoNm = $val . '.' . strtolower($path_parts['extension']); $pathTmp = mb_substr($path, mb_strlen(DIR_UPLOAD_SECRET . 'temptemptemp/'), mb_strlen($path)-mb_strlen(DIR_UPLOAD_SECRET . 'temptemptemp/')); $o['new_' . $val] = $pathTmp . $photoNm ; move_uploaded_file( $_FILES[$val]['tmp_name'], $path . $photoNm ); } } } /** * 画像をTempからUPLOADする。 * <br> * @param $table テーブル名 * @param $pkey 主キー情報。複数あるときは結合してください。 * @param $itemNames 画像のITEM名を配列で指定 * @param $columns テーブルITEM内容を配列で指定 * @param $mode 処理区分<br> * <ul> * <li>ins_do 登録実行 * <li>upd_do 更新実行 * </ul> * @param $o リクエスト内容 */ function setAndDelPhotoTemp($table, $pkey, $itemNames, &$columns, $mode, &$o) { if ($mode == 'ins_do') { if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加 echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n"; exit; } $path = DIR_UPLOAD .$table . '/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); $path = DIR_UPLOAD .$table . '/'. $pkey .'/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); foreach ($itemNames as $key => $val) { if (!ereg("^[0-9a-zA-Z_\-]+$", $val)) { // ITEM名であること。20090523追加 echo "failed itemName " . $val . " ...\n"; exit; } if ( !empty($o['new_' . $val])) { if(!ereg("^[0-9]", $o['new_' . $val]) || !(ereg("^[^\/]+/[^\/]+$", $o['new_' . $val]))) { // 先頭は年なので数字のはず。/はひとつのはず。20090523追加 echo "failed to copy " . $o['new_' . $val] . " ...\n"; exit; } $path_parts = pathinfo( DIR_UPLOAD_SECRET . 'temptemptemp/' . $o['new_' . $val] ); $photoNm = $val . '.' . strtolower($path_parts['extension']); $columns[$val] = $photoNm; $o[$val] = $photoNm; if (!copy(DIR_UPLOAD_SECRET . 'temptemptemp/' . $o['new_' . $val], $path . $photoNm)) { echo "failed to copy " . $o['new_' . $val] . " ...\n"; exit; } //if (!rename($o['new_' . $val], $path . $photoNm)) { // echo "failed to rename " . $o['new_' . $val] . " ...\n"; //} // tempフォルダはtempフォルダを作成する前に消しています。(1日以前のものを対象にして) chmod( $path . $photoNm, 0666 ); } } } else if ($mode == 'upd_do') { if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加 echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n"; exit; } $path = DIR_UPLOAD .$table . '/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); $path = DIR_UPLOAD .$table . '/'. $pkey .'/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); foreach ($itemNames as $key => $val) { if (!ereg("^[0-9a-zA-Z_\-]+$", $val)) { // ITEM名であること。20090523追加 echo "failed itemName " . $val . " ...\n"; exit; } $columns[$val] = $o['old_' . $val]; $o[$val] = $o['old_' . $val]; if ( !empty($o['new_' . $val]) && empty( $o['del_' . $val] )) { if ($o['old_' . $val] != '') { if (!ereg("^[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $o['old_' . $val])) { // ファイル名であること。20090523追加 echo "failed to del " . $o['old_' . $val] . " ...\n"; exit; } if (file_exists($path . $o['old_' . $val])) { unlink($path . $o['old_' . $val]); } } if ( !empty($o['new_' . $val])) { if(!ereg("^[0-9]", $o['new_' . $val]) || !(ereg("^[^\/]+/[^\/]+$", $o['new_' . $val]))) { // 先頭は年なので数字のはず。/はひとつのはず。20090523追加 echo "failed to copy " . $o['new_' . $val] . " ...\n"; exit; } $path_parts = pathinfo( DIR_UPLOAD_SECRET . 'temptemptemp/' . $o['new_' . $val] ); $photoNm = $val . '.' . strtolower($path_parts['extension']); $columns[$val] = $photoNm; $o[$val] = $photoNm; if (!copy(DIR_UPLOAD_SECRET . 'temptemptemp/' . $o['new_' . $val], $path . $photoNm)) { echo "failed to copy " . $o['new_' . $val] . " ...\n"; exit; } //if (!rename($o['new_' . $val], $path . $photoNm)) { // echo "failed to rename " . $o['new_' . $val] . " ...\n"; //} // tempフォルダはtempフォルダを作成する前に消しています。(1日以前のものを対象にして) chmod( $path . $photoNm, 0666 ); } } else if ( !empty( $o['del_' . $val] )) { if ($o['old_' . $val] != '') { if (!ereg("^[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $o['old_' . $val])) { // ファイル名であること。20090523追加 echo "failed to del " . $o['old_' . $val] . " ...\n"; exit; } if (file_exists($path . $o['old_' . $val])) { unlink($path . $o['old_' . $val]); } $columns[$val] = ''; $o[$val] = ''; } } } } } function getTempFolder() { // テンポラリ使用フォルダを作成する $path = DIR_UPLOAD_SECRET . 'temptemptemp/'; if ( !is_dir($path) ) { mkdir( $path, 0777 ); } else { // 一日以上過ぎたテンポラリフォルダを削除する。 removeOldTempFolder($path, date("YmdHis",getDay(-1))); } $i = 0; $loopflg = true; while ($loopflg == true) { //$temptime = date('YmdHis') . $i++; $temptime = date('YmdHis') . '_' . uniqid(); $path = DIR_UPLOAD_SECRET . 'temptemptemp/' . $temptime . '/'; if ( !is_dir($path) ) { // パスがないとき作る $loopflg = false; mkdir( $path, 0777 ); } } return $path; } function delTempFolder($path) { delFile( $path ); rmdir( $path ); } // 一日以上過ぎたテンポラリフォルダを削除する。 function removeOldTempFolder($dir, $dateYmdHis) { if ( is_dir($dir) ) { if ($handle = opendir("$dir")) { while (false !== ($item = readdir($handle))) { if ($item != "." && $item != "..") { if (is_dir("$dir/$item")) { if (strlen($item) > 14 && substr($item, 0, 14) < $dateYmdHis) { removeOldTempFolder("$dir/$item", $dateYmdHis); } } else { if (file_exists("$dir/$item")) { unlink("$dir/$item"); } //echo " removing $dir/$item<br>\n"; } } } closedir($handle); $path_parts = pathinfo($dir); if (strlen($path_parts['basename']) > 14 && substr($path_parts['basename'], 0, 14) < $dateYmdHis) { rmdir($dir); //echo "removing $dir<br>\n"; } } } } // +−日timeを求める function getDay($day){ $now = time(); return mktime(date("H",$now),date("i",$now),date("s",$now),date("m",$now),date("d",$now)+$day,date("Y",$now)); } function wtTempFile($path, $contents, $filename) { if (!($fd = @fopen($path . $filename, 'wb'))) { echo("not problem writing temporary file " . $path . $filename); exit; } fwrite($fd, $contents); fclose($fd); chmod( $path . $filename, 0666 ); } function mkTempZipAndLoad($path, $zipName, $files="*.*") { exec("zip -j " . $path . '/' . $zipName . ' ' .$path . '/' . $files); $handle = fopen($path . '/' . $zipName, "rb"); $ziplen = filesize($path . '/' . $zipName); $contents = fread($handle, filesize($path . '/' . $zipName)); fclose($handle); header("Content-Disposition: attachment; filename=moushikomiA.zip"); header("Content-Type: application/octet-stream"); header("Cache-Control: public"); header("Pragma: public"); header('Content-Length: ' . $ziplen); print $contents; } /** * 画像を秘密フォルダにUPLOAD、DELETEする。 * <br> * @param $table テーブル名 * @param $pkey 主キー情報。複数あるときは結合してください。 * @param $itemNames 画像のITEM名を配列で指定 * @param $columns テーブルITEM内容を配列で指定 * @param $mode 処理区分<br> * <ul> * <li>ins_do 登録実行 * <li>upd_do 更新実行 * <li>del_do 削除実行 * </ul> * @param $o リクエスト内容 */ function setAndDelPhotoSecret($table, $pkey, $itemNames, &$columns, $mode, &$o) { if ($mode == 'ins_do') { if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加 echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n"; exit; } $path = DIR_UPLOAD_SECRET .$table . '/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); $path = DIR_UPLOAD_SECRET .$table . '/'. $pkey .'/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); foreach ($itemNames as $key => $val) { if (!ereg("^[0-9a-zA-Z_\-]+$", $val)) { // ITEM名であること。20090523追加 echo "failed itemName " . $val . " ...\n"; exit; } if ( !empty($_FILES[$val]['name'])) { $path_parts = pathinfo( $_FILES[$val]['name'] ); $photoNm = $val . '.' . strtolower($path_parts['extension']); $columns[$val] = $photoNm; move_uploaded_file( $_FILES[$val]['tmp_name'], $path . $photoNm ); chmod( $path . $photoNm, 0666 ); } } } else if ($mode == 'upd_do') { if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加 echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n"; exit; } $path = DIR_UPLOAD_SECRET .$table . '/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); $path = DIR_UPLOAD_SECRET .$table . '/'. $pkey .'/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); foreach ($itemNames as $key => $val) { if (!ereg("^[0-9a-zA-Z_\-]+$", $val)) { // ITEM名であること。20090523追加 echo "failed itemName " . $val . " ...\n"; exit; } $columns[$val] = $o['old_' . $val]; if ( !empty($_FILES[$val]['name']) && empty( $o['del_' . $val] )) { if ($o['old_' . $val] != '') { if (!ereg("^[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $o['old_' . $val])) { // ファイル名であること。20090523追加 echo "failed to del " . $o['old_' . $val] . " ...\n"; exit; } if (file_exists($path . $o['old_' . $val])) { unlink($path . $o['old_' . $val]); } } if ( !empty($_FILES[$val]['name'])) { $path_parts = pathinfo( $_FILES[$val]['name'] ); $photoNm = $val . '.' . strtolower($path_parts['extension']); $columns[$val] = $photoNm; move_uploaded_file( $_FILES[$val]['tmp_name'], $path . $photoNm ); chmod( $path . $photoNm, 0666 ); } } else if ( !empty( $o['del_' . $val] )) { if ($o['old_' . $val] != '') { if (!ereg("^[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $o['old_' . $val])) { // ファイル名であること。20090523追加 echo "failed to del " . $o['old_' . $val] . " ...\n"; exit; } if (file_exists($path . $o['old_' . $val])) { unlink($path . $o['old_' . $val]); } $columns[$val] = ''; } } } } else if ($mode == 'del_do') { if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加 echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n"; exit; } $path = DIR_UPLOAD_SECRET .$table . '/'. $pkey .'/'; delFile( $path ); if ( is_dir($path) ) { rmdir( $path ); } } } /** * 画像をTempから秘密フォルダにUPLOADする。 * <br> * @param $table テーブル名 * @param $pkey 主キー情報。複数あるときは結合してください。 * @param $itemNames 画像のITEM名を配列で指定 * @param $columns テーブルITEM内容を配列で指定 * @param $mode 処理区分<br> * <ul> * <li>ins_do 登録実行 * <li>upd_do 更新実行 * </ul> * @param $o リクエスト内容 */ function setAndDelPhotoTempSecret($table, $pkey, $itemNames, &$columns, $mode, &$o) { if ($mode == 'ins_do') { if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加 echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n"; exit; } $path = DIR_UPLOAD_SECRET .$table . '/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); $path = DIR_UPLOAD_SECRET .$table . '/'. $pkey .'/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); foreach ($itemNames as $key => $val) { if (!ereg("^[0-9a-zA-Z_\-]+$", $val)) { // ITEM名であること。20090523追加 echo "failed itemName " . $val . " ...\n"; exit; } if ( !empty($o['new_' . $val])) { if(!ereg("^[0-9]", $o['new_' . $val]) || !(ereg("^[^\/]+/[^\/]+$", $o['new_' . $val]))) { // 先頭は年なので数字のはず。/はひとつのはず。20090523追加 echo "failed to copy " . $o['new_' . $val] . " ...\n"; exit; } $path_parts = pathinfo( DIR_UPLOAD_SECRET . 'temptemptemp/' . $o['new_' . $val] ); $photoNm = $val . '.' . strtolower($path_parts['extension']); $columns[$val] = $photoNm; $o[$val] = $photoNm; if (!copy(DIR_UPLOAD_SECRET . 'temptemptemp/' . $o['new_' . $val], $path . $photoNm)) { echo "failed to copy " . $o['new_' . $val] . " ...\n"; exit; } //if (!rename($o['new_' . $val], $path . $photoNm)) { // echo "failed to rename " . $o['new_' . $val] . " ...\n"; //} // tempフォルダはtempフォルダを作成する前に消しています。(1日以前のものを対象にして) chmod( $path . $photoNm, 0666 ); } } } else if ($mode == 'upd_do') { if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加 echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n"; exit; } $path = DIR_UPLOAD_SECRET .$table . '/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); $path = DIR_UPLOAD_SECRET .$table . '/'. $pkey .'/'; if ( !is_dir($path) ) mkdir( $path, 0777 ); foreach ($itemNames as $key => $val) { if (!ereg("^[0-9a-zA-Z_\-]+$", $val)) { // ITEM名であること。20090523追加 echo "failed itemName " . $val . " ...\n"; exit; } $columns[$val] = $o['old_' . $val]; $o[$val] = $o['old_' . $val]; if ( !empty($o['new_' . $val]) && empty( $o['del_' . $val] )) { if ($o['old_' . $val] != '') { if (!ereg("^[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $o['old_' . $val])) { // ファイル名であること。20090523追加 echo "failed to del " . $o['old_' . $val] . " ...\n"; exit; } if (file_exists($path . $o['old_' . $val])) { unlink($path . $o['old_' . $val]); } } if ( !empty($o['new_' . $val])) { if(!ereg("^[0-9]", $o['new_' . $val]) || !(ereg("^[^\/]+/[^\/]+$", $o['new_' . $val]))) { // 先頭は年なので数字のはず。/はひとつのはず。20090523追加 echo "failed to copy " . $o['new_' . $val] . " ...\n"; exit; } $path_parts = pathinfo( DIR_UPLOAD_SECRET . 'temptemptemp/' . $o['new_' . $val] ); $photoNm = $val . '.' . strtolower($path_parts['extension']); $columns[$val] = $photoNm; $o[$val] = $photoNm; if (!copy(DIR_UPLOAD_SECRET . 'temptemptemp/' . $o['new_' . $val], $path . $photoNm)) { echo "failed to copy " . $o['new_' . $val] . " ...\n"; exit; } //if (!rename($o['new_' . $val], $path . $photoNm)) { // echo "failed to rename " . $o['new_' . $val] . " ...\n"; //} // tempフォルダはtempフォルダを作成する前に消しています。(1日以前のものを対象にして) chmod( $path . $photoNm, 0666 ); } } else if ( !empty( $o['del_' . $val] )) { if ($o['old_' . $val] != '') { if (!ereg("^[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $o['old_' . $val])) { // ファイル名であること。20090523追加 echo "failed to del " . $o['old_' . $val] . " ...\n"; exit; } if (file_exists($path . $o['old_' . $val])) { unlink($path . $o['old_' . $val]); } $columns[$val] = ''; $o[$val] = ''; } } } } } // DB Item Name 編集 function editDbItemName($vars) { return preg_replace('/[^a-z0-9_$#]+/i', '', $vars); } // ============================================================= // 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) End // 修正BSDライセンス。 // ============================================================= // ================================================================================================ // http://ter.ath.cx/yusei/yuseiki/PHP+fgetcsv%28%29%E3%81%AF%E4%BD%BF%E3%81%86%E3%81%AA Start // 「NYSL Version 0.9982」ライセンス。 // ================================================================================================ function fgetExcelCSV(&$fp , $length = null, $delimiter = ',' , $enclosure = '"') { $line = fgets($fp); if($line === false) { return false; } $bytes = preg_split('//' , trim($line)); array_shift($bytes);array_pop($bytes); $cols = array(); $col = ''; $isInQuote = false; while($bytes) { $byte = array_shift($bytes); if($isInQuote) { if($byte == $enclosure) { if($bytes[0] == $enclosure) { $col .= $byte; array_shift($bytes); } else { $isInQuote = false; } } else { $col .= $byte; } } else { if($byte == $delimiter) { $cols[] = $col; $col = ''; } elseif($byte == $enclosure && $col == '') { $isInQuote = true; } else { $col .= $byte; } } while(!$bytes && $isInQuote) { $col .= "\n"; $line = fgets($fp); if($line === false) { $isInQuote = false; } else { $bytes = preg_split('//' , trim($line)); array_shift($bytes);array_pop($bytes); } } } $cols[] = $col; return $cols; } // ================================================================================================ // http://ter.ath.cx/yusei/yuseiki/PHP+fgetcsv%28%29%E3%81%AF%E4%BD%BF%E3%81%86%E3%81%AA End // 「NYSL Version 0.9982」ライセンス。 // ================================================================================================
■AppSrchUtil.php 検索時使用関数
<?php // ============================================================= // 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) Start // 修正BSDライセンス。 // ============================================================= class AppSrchUtil { /** * SQLの条件(WHERE)文の補足設定。 * * @param strWhere 条件文 */ function setSqlStrSub1(&$strWhere) { if (mb_strwidth($strWhere) > 0) { $strWhere .= " AND "; } } /** * 検索時のチェックボックス配列対応。 * * @param vars リクエスト内容 * @param itemName 検索項目 */ function setSrchChkBoxArray(&$vars, $itemName) { if (!empty($vars[$itemName]) && is_array($vars[$itemName])) { $tempArray = array(); foreach( $vars[$itemName] as $val ){ if( $val != '' ){ $tempArray[(String)$val] =(String)$val; } } $vars[$itemName] = $tempArray; } } } // ============================================================= // 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) End // 修正BSDライセンス。 // =============================================================
// ============================================================= // 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) Start // 修正BSDライセンス。 // ============================================================= var doubleClick_flg = true; //Submit制御(DoubleClick制御あり) function do_Submit_Clk1() { if (doubleClick_flg == true) { window.setTimeout(function() { doubleClick_flg = false; }, 1); window.setTimeout(function() { doubleClick_flg = true; }, 1000); document.frm.submit(); } else { return false; } } //Submit制御(DoubleClick制御あり) function do_Submit_Clk2(act) { if (doubleClick_flg == true) { window.setTimeout(function() { doubleClick_flg = false; }, 1); window.setTimeout(function() { doubleClick_flg = true; }, 1000); document.frm.action = act; document.frm.submit(); } else { return false; } } // ============================================================= // 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) End // 修正BSDライセンス。 // =============================================================
8/14 09:00-12:00 ■サイト:http://kazpgm.ddo.jp/に「■common.php、config.php、functions.php、AppSrchUtil.php」として当ブログへのリンクを追加した。
8/25 3:00-3:10 config.phpのdefine('ADMIN_ERR_HTML、、define('USER_ERR_HTML'修正。http://d.hatena.ne.jp/kazpgm/20100825/1282758753(TOOL更新_ユーザ側作成に伴って作成済みPGMを微調整)を反映した。
10/13 3:00-3:30 functions.php 修正 $columnsは使っていないので削除した。http://d.hatena.ne.jp/kazpgm/20101013/1286996826 (TOOL更新_次バージョンのfunctions.php、「kaz.js」と「admin/kaz.js」修正)参照
10/13 3:00-4:00 「kaz.js」と「admin/kaz.js」次バージョン用に変更した。←modeはアクションにしたのでdocument.frm.actionを変更するようにした。http://d.hatena.ne.jp/kazpgm/20101013/1286996826 (TOOL更新_次バージョンのfunctions.php、「kaz.js」と「admin/kaz.js」修正)参照
10/20 23:00-24:00 「common.php」修正。内容はhttp://d.hatena.ne.jp/kazpgm/20101020/1287585996(TOOL更新_error.logを見たらエラーログが出ているのに気づいた。(次バージョン))
2011/01/22 「common.php」修正。TOOL更新_Ver0.1Zd(次バージョン)のZendFramework-1.10.7のinclude_pathを『.php』フォルダに移動する。(http://d.hatena.ne.jp/kazpgm/20110122/1295697206)の内容を反映した。