source: branches/version-2_12-dev/data/class/util/GC_Utils.php @ 21579

Revision 21579, 9.5 KB checked in by Seasoft, 14 years ago (diff)

#1607 (未使用定義の削除)

  • 未使用メソッド削除
    • GC_Utils#gfDownloadCsv
    • GC_Utils#gfSetCsv
    • GC_Utils#gfGetAge
  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * This file is part of EC-CUBE
4 *
5 * Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
6 *
7 * http://www.lockon.co.jp/
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22 */
23
24/**
25 * 各種ユーティリティクラス.
26 *
27 * @package Util
28 * @author LOCKON CO.,LTD.
29 * @version $Id$
30 */
31class GC_Utils {
32
33    /**
34     * ログファイルに変数の詳細を出力
35     *
36     * @param mixed $obj
37     * @return void
38     */
39    function gfDebugLog($obj) {
40        if (DEBUG_MODE === true) {
41            GC_Utils_Ex::gfPrintLog(
42                "*** start Debug ***\n" .
43                print_r($obj, true) .
44                '*** end Debug ***'
45            );
46        }
47    }
48
49    /**
50     * 呼び出し元関数名を返します
51     *
52     * @param int $forLogInfo ログ出力用に利用するかどうか(1:ログ出力用に利用する)
53     * @return string 呼び出し元クラス、関数名、行数の文字列表現
54     */
55    function gfGetCallerInfo($forLogInfo=true) {
56        // バックトレースを取得する
57        $traces = debug_backtrace(false);
58        $bklv = 1;
59        if ($forLogInfo === true) {
60            $bklv = 3;
61            if( ($traces[3]['class'] === 'LC_Page'
62                || $traces[3]['class'] === 'LC_Page_Admin')
63                && $traces[3]['function'] === 'log')
64            {
65                $bklv = 4;
66            }
67        }
68        $str = $traces[$bklv]['class'] . '::' . $traces[$bklv]['function'] . '(' . $traces[$bklv-1]['line'] . ') ';
69        return $str;
70    }
71
72    /**
73     * ログメッセージに、呼び出し元関数名等の情報を付加して返します
74     *
75     * @param string $mess ログメッセージ
76     * @param string $log_level ログレベル('Info' or 'Debug')
77     * @return string ログメッセージに呼び出し元関数名等の情報を付加した文字列
78     */
79    function gfGetLogStr($mess, $log_level='Info') {
80        // メッセージの前に、ログ出力元関数名とログ出力関数呼び出し部分の行数を付与
81        $mess = GC_Utils::gfGetCallerInfo(true) . $mess;
82
83        // ログレベル=Debugの場合は、[Debug]を先頭に付与する
84        if ($log_level === 'Debug') {
85            $mess = '[Debug]' . $mess;
86        }
87
88        return $mess;
89    }
90
91    /**
92     * 管理画面用ログ出力
93     *
94     * 管理画面用ログ出力を行ないます
95     * @param string $mess ログメッセージ
96     * @param string $log_level ログレベル('Info' or 'Debug')
97     * @return void
98     */
99    function gfAdminLog($mess, $log_level='Info') {
100        // ログレベル=Debugの場合は、DEBUG_MODEがtrueの場合のみログ出力する
101        if ($log_level === 'Debug'&& DEBUG_MODE === false) {
102            return;
103        }
104
105        // ログメッセージに、呼び出し元関数名等の情報を付加する
106        $mess = GC_Utils::gfGetLogStr($mess, $log_level);
107
108        // ログ出力
109        // ※現在は管理画面用・フロント用のログ出力とも、同じファイル(site.log)に出力します。
110        //  分けたい場合は、以下の関数呼び出しの第2引数にファイルパスを指定してください
111        GC_Utils_Ex::gfPrintLog($mess);
112    }
113
114    /**
115     * フロント用ログ出力
116     *
117     * フロント用ログ出力を行ないます
118     * @param string $mess ログメッセージ
119     * @param string $log_level ログレベル('Info' or 'Debug')
120     * @return void
121     */
122    function gfFrontLog($mess, $log_level='Info') {
123        // ログレベル=Debugの場合は、DEBUG_MODEがtrueの場合のみログ出力する
124        if ($log_level === 'Debug'&& DEBUG_MODE === false) {
125            return;
126        }
127
128        // ログメッセージに、呼び出し元関数名等の情報を付加する
129        $mess = GC_Utils::gfGetLogStr($mess, $log_level);
130
131        // ログ出力
132        // ※現在は管理画面用・フロント用のログ出力とも、同じファイル(site.log)に出力します。
133        //  分けたい場合は、以下の関数呼び出しの第2引数にファイルパスを指定してください
134        GC_Utils_Ex::gfPrintLog($mess);
135    }
136
137    /*----------------------------------------------------------------------
138     * [名称] gfPrintLog
139     * [概要] ログファイルに日時、処理ファイル名、メッセージを出力
140     * [引数] 表示したいメッセージ
141     * [戻値] なし
142     * [依存] なし
143     * [注釈] -
144     *----------------------------------------------------------------------*/
145    function gfPrintLog($mess, $path = '') {
146        // 日付の取得
147        $today = date('Y/m/d H:i:s');
148        // 出力パスの作成
149        if ($path == '') {
150            $path = LOG_REALFILE;
151        }
152
153        // エスケープされている文字をもとに戻す
154        $trans_tbl = get_html_translation_table (HTML_ENTITIES);
155        $trans_tbl = array_flip ($trans_tbl);
156        $mess = strtr($mess, $trans_tbl);
157
158        $fp = fopen($path, 'a+');
159        if ($fp) {
160            $string = "$today [{$_SERVER['PHP_SELF']}] $mess from {$_SERVER['REMOTE_ADDR']}\n";
161            fwrite($fp, $string);
162            fclose($fp);
163        }
164
165        // ログテーション
166        GC_Utils_Ex::gfLogRotation(MAX_LOG_QUANTITY, MAX_LOG_SIZE, $path);
167    }
168
169    /**
170     * ログローテーション機能
171     *
172     * XXX この類のローテーションは通常 0 開始だが、本実装は 1 開始である。
173     * この中でログ出力は行なわないこと。(無限ループの懸念あり)
174     * @param integer $max_log 最大ファイル数
175     * @param integer $max_size 最大サイズ
176     * @param string  $path ファイルパス
177     * @return void
178     */
179    function gfLogRotation($max_log, $max_size, $path) {
180
181        // ファイルが存在しない場合、終了
182        if (!file_exists($path)) return;
183
184        // ファイルが最大サイズを超えていない場合、終了
185        if (filesize($path) <= $max_size) return;
186
187        // Windows 版 PHP への対策として明示的に事前削除
188        $path_max = "$path.$max_log";
189        if (file_exists($path_max)) {
190            $res = unlink($path_max);
191            // 削除に失敗時した場合、ログローテーションは見送り
192            if (!$res) return;
193        }
194
195        // アーカイブのインクリメント
196        for ($i = $max_log; $i >= 2; $i--) {
197            $path_old = "$path." . ($i - 1);
198            $path_new = "$path.$i";
199            if (file_exists($path_old)) {
200                rename($path_old, $path_new);
201            }
202        }
203
204        // 現在ファイルのアーカイブ
205        rename($path, "$path.1");
206    }
207
208    /*----------------------------------------------------------------------
209     * [名称] gfMakePassword
210     * [概要] ランダムパスワード生成(英数字)
211     * [引数] パスワードの桁数
212     * [戻値] ランダム生成されたパスワード
213     * [依存] なし
214     * [注釈] -
215     *----------------------------------------------------------------------*/
216    function gfMakePassword($pwLength) {
217
218        // 乱数表のシードを決定
219        srand((double)microtime() * 54234853);
220
221        // パスワード文字列の配列を作成
222        $character = 'abcdefghkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ2345679';
223        $pw = preg_split('//', $character, 0, PREG_SPLIT_NO_EMPTY);
224
225        $password = '';
226        for ($i = 0; $i<$pwLength; $i++) {
227            $password .= $pw[array_rand($pw, 1)];
228        }
229
230        return $password;
231    }
232
233    /*----------------------------------------------------------------------------------------------------------------------
234     * [名称] gfMailHeaderAddr
235     * [概要] 入力されたメールアドレスをメール関数用の宛先に変換
236     * [引数] 「メールアドレス」または「名前<メールアドレス>」、複数アドレス指定時はカンマ区切りで指定する。
237     * [戻値] 「メールアドレス」または「JIS_MIMEにコード変換した名前 <メールアドレス>」、複数アドレス指定時はカンマ区切りで返却する。
238     * [依存] なし
239     * [注釈] -
240     *----------------------------------------------------------------------------------------------------------------------*/
241
242    function gfMailHeaderAddr($str) {
243        $addrs = explode(',', $str); //アドレスを配列に入れる
244        foreach ($addrs as $addr) {
245            if (preg_match("/^(.+)<(.+)>$/", $addr, $matches)) {
246                //引数が「名前<メールアドレス>」の場合
247                $mailaddrs[] = mb_encode_mimeheader(trim($matches[1])).' <'.trim($matches[2]).'>';
248            } else {
249                //メールアドレスのみの場合
250                $mailaddrs[] =  trim($addr);
251            }
252        }
253        return implode(', ', $mailaddrs); //複数アドレスはカンマ区切りにする
254    }
255}
Note: See TracBrowser for help on using the repository browser.