kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

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ライセンス。
//  =============================================================

■「kaz.js」と「admin/kaz.js」

//  =============================================================
//  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)の内容を反映した。