source: branches/feature-module-update/data/lib/glib.php @ 15078

Revision 15078, 8.1 KB checked in by nanasess, 15 years ago (diff)

r15064 から svn cp
とりあえず暫定コミット.

  • UTF-8 に変更
  • slib.php, glib.php のクラス化
  • LC_Page の抽象化(一部)
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7
8/*----------------------------------------------------------------------
9 * [名称] gfDownloadCsv
10 * [概要] 引数データをCSVとして、クライアントにダウンロードさせる
11 * [引数] 1:ヘッダ文字列 2:CSVデータ
12 * [戻値] -
13 * [依存] -
14 * [注釈] 引数は1,2ともカンマ区切りになっていること
15 *----------------------------------------------------------------------*/
16function gfDownloadCsv($header, $contents){
17   
18    $fiest_name = date("YmdHis") .".csv";
19   
20    /* HTTPヘッダの出力 */
21    Header("Content-disposition: attachment; filename=${fiest_name}");
22    Header("Content-type: application/octet-stream; name=${fiest_name}");
23   
24    $return = $header.$contents;
25    if (mb_detect_encoding($return) == CHAR_CODE){                      //文字コード変換
26        $return = mb_convert_encoding($return,'SJIS',CHAR_CODE);
27        $return = str_replace( array( "\r\n", "\r" ), "\n", $return);   // 改行方法の統一
28    }
29    echo $return;
30}
31
32/*----------------------------------------------------------------------
33 * [名称] gfSetCsv
34 * [概要] 引数の配列をCSV形式に変換する
35 * [引数] 1:CSVにする配列 2:引数1が連想配列時の添え字を指定した配列
36 * [戻値] CSVデータ
37 * [依存] -
38 * [注釈] -
39 *----------------------------------------------------------------------*/
40function gfSetCsv( $array, $arrayIndex = "" ){ 
41    //引数$arrayIndexは、$arrayが連想配列のときに添え字を指定してやるために使用する
42   
43    $return = "";
44    for ($i=0; $i<count($array); $i++){
45       
46        for ($j=0; $j<count($array[$i]); $j++ ){
47            if ( $j > 0 ) $return .= ",";
48            $return .= "\"";           
49            if ( $arrayIndex ){
50                $return .= mb_ereg_replace("<","<",mb_ereg_replace( "\"","\"\"",$array[$i][$arrayIndex[$j]] )) ."\"";           
51            } else {
52                $return .= mb_ereg_replace("<","<",mb_ereg_replace( "\"","\"\"",$array[$i][$j] )) ."\"";
53            }
54        }
55        $return .= "\n";           
56    }
57   
58    return $return;
59}
60
61/*----------------------------------------------------------------------
62 * [名称] gfGetAge
63 * [概要] 日付より年齢を計算する。
64 * [引数] 1:日付文字列(yyyy/mm/dd、yyyy-mm-dd hh:mm:ss等)
65 * [戻値] 年齢の数値
66 * [依存] -
67 * [注釈] -
68 *----------------------------------------------------------------------*/
69function gfGetAge($dbdate)
70{
71    $ty = date("Y");
72    $tm = date("m");
73    $td = date("d");
74    list($by, $bm, $bd) = split("[-/ ]", $dbdate);
75    $age = $ty - $by;
76    if($tm * 100 + $td < $bm * 100 + $bd) $age--;
77    return $age;
78}
79
80/*----------------------------------------------------------------------
81 * [名称] gfDebugLog
82 * [概要] ログファイルに変数の詳細を出力する。
83 * [引数] 対象となる変数
84 * [戻値] なし
85 * [依存] gfPrintLog
86 * [注釈] -
87 *----------------------------------------------------------------------*/
88function gfDebugLog($obj){
89        gfPrintLog("*** start Debug ***");
90        ob_start();
91        print_r($obj);
92        $buffer = ob_get_contents();
93        ob_end_clean();
94        $fp = fopen(LOG_PATH, "a+");
95        fwrite( $fp, $buffer."\n" );
96        fclose( $fp );
97        gfPrintLog("*** end Debug ***");
98
99        // ログテーション
100        gfLogRotation(MAX_LOG_QUANTITY, MAX_LOG_SIZE, LOG_PATH);
101}
102
103/*----------------------------------------------------------------------
104 * [名称] gfPrintLog
105 * [概要] ログファイルに日時、処理ファイル名、メッセージを出力
106 * [引数] 表示したいメッセージ
107 * [戻値] なし
108 * [依存] なし
109 * [注釈] -
110 *----------------------------------------------------------------------*/
111function gfPrintLog($mess, $path = '') {
112    // 日付の取得
113    $today = date("Y/m/d H:i:s");
114    // 出力パスの作成
115    if ($path == "") {
116        $path = LOG_PATH;
117    }
118
119    // エスケープされている文字をもとに戻す
120    $trans_tbl = get_html_translation_table (HTML_ENTITIES);
121    $trans_tbl = array_flip ($trans_tbl);
122    $mess = strtr($mess, $trans_tbl);
123
124    $fp = fopen($path, "a+");
125    if($fp) {
126        fwrite( $fp, $today." [".$_SERVER['PHP_SELF']."] ".$mess." from ". $_SERVER['REMOTE_ADDR']. "\n" );
127        fclose( $fp );
128    }
129   
130    // ログテーション
131    gfLogRotation(MAX_LOG_QUANTITY, MAX_LOG_SIZE, $path);
132}
133
134/**         
135 * ログローテーション機能         
136 *         
137 * @param integer $max_log 最大ファイル数
138 * @param integer $max_size 最大サイズ
139 * @param string  $path ファイルパス
140 * @return void なし
141 */         
142function gfLogRotation($max_log, $max_size, $path) {
143   
144    // ディレクトリ名を取得
145    $dirname = dirname($path);
146    // ファイル名を取得
147    $basename = basename($path);
148   
149    // ファイルが最大サイズを超えていないかチェック
150    if(filesize($path) > $max_size) {
151        if ($dh = opendir($dirname)) {
152            while (($file = readdir($dh)) !== false) {
153                // ログローテーションにて作成されたファイルを取得
154                if(ereg("^". $basename . "\." , $file)) {
155                    $arrLog[] = $file;
156                }
157            }
158           
159            // ファイルログが最大個数なら以上なら古いファイルから削除する
160            $count = count($arrLog);
161            if($count >= $max_log) {
162                $diff = $count - $max_log;
163                for($i = 0; $diff >= $i ; $i++) {
164                    unlink($dirname. "/" .array_pop($arrLog));
165                }   
166            }
167           
168            // ログファイルの添え字をずらす
169            $count = count($arrLog);
170            for($i = $count; 1 <= $i; $i--) {
171                $move_number = $i + 1;
172               
173                if(file_exists("$path.$move_number")) unlink("$path.$move_number");
174                copy("$dirname/" . $arrLog[$i - 1], "$path.$move_number");     
175               
176            }
177            $ret = copy($path, "$path.1");
178           
179            // 新規ログファイルを作成
180            if($ret) {
181                unlink($path);         
182                touch($path);
183            }
184        }
185    }
186}
187
188/*----------------------------------------------------------------------
189 * [名称] gfMakePassword
190 * [概要] ランダムパスワード生成(英数字)
191 * [引数] パスワードの桁数
192 * [戻値] ランダム生成されたパスワード
193 * [依存] なし
194 * [注釈] -
195 *----------------------------------------------------------------------*/
196function gfMakePassword($pwLength) {
197   
198    // 乱数表のシードを決定
199    srand((double)microtime() * 54234853);
200   
201    // パスワード文字列の配列を作成
202    $character = "abcdefghkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ2345679";
203    $pw = preg_split("//", $character, 0, PREG_SPLIT_NO_EMPTY);
204   
205    $password = "";
206    for($i = 0; $i<$pwLength; $i++ ) {
207        $password .= $pw[array_rand($pw, 1)];
208    }
209
210    return $password;
211}
212
213/*----------------------------------------------------------------------
214 * [名称] sf_explodeExt
215 * [概要] ファイルの拡張子取得
216 * [引数] ファイル名
217 * [戻値] 拡張子
218 * [依存] なし
219 * [注釈] -
220 *----------------------------------------------------------------------*/
221function gf_explodeExt($fileName) {
222    $ext1 = explode(".", $fileName);
223    $ext2 = $ext1[count($ext1) - 1];
224    $ext2 = strtolower($ext2);
225    return $ext2;
226}
227
228
229/*----------------------------------------------------------------------------------------------------------------------
230 * [名称] gfMailHeaderAddr
231 * [概要] 入力されたメールアドレスをメール関数用の宛先に変換
232 * [引数] 「メールアドレス」または「名前<メールアドレス>」、複数アドレス指定時はカンマ区切りで指定する。
233 * [戻値] 「メールアドレス」または「JIS_MIMEにコード変換した名前 <メールアドレス>」、複数アドレス指定時はカンマ区切りで返却する。
234 * [依存] なし
235 * [注釈] -
236 *----------------------------------------------------------------------------------------------------------------------*/
237
238function gfMailHeaderAddr($str) {
239    $addrs = explode(",", $str); //アドレスを配列に入れる
240    foreach ($addrs as $addr) {
241        if (preg_match("/^(.+)<(.+)>$/", $addr, $matches)) {
242            //引数が「名前<メールアドレス>」の場合
243            $mailaddrs[] = mb_encode_mimeheader(trim($matches[1]))." <".trim($matches[2]).">";
244        } else {
245            //メールアドレスのみの場合
246            $mailaddrs[] =  trim($addr);
247        }
248    }
249    return implode(", ", $mailaddrs); //複数アドレスはカンマ区切りにする
250}
251?>
Note: See TracBrowser for help on using the repository browser.