ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/trunk/webapp/lib/util/util.php @ 62

Last change on this file since 62 was 62, checked in by ogawa, 15 years ago

function cache に対応

File size: 11.7 KB
Line 
1<?php
2/**
3 * @copyright 2005-2006 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7/**
8 * リダイレクト
9 *
10 * @param string $module
11 * @param string $action
12 * @param array  $params
13 */
14function openpne_redirect($module, $action = '', $params = array())
15{
16    if ($module == 'ktai') {
17        if (session_id()) {
18            $params['ksid'] = session_id();
19        }
20    }
21    $url = openpne_gen_url($module, $action, $params);
22    client_redirect_absolute($url);
23}
24
25/**
26 * クライアントリダイレクト
27 *
28 * @param   string  $dest ジャンプ先URI(絶対パス)
29 */
30function client_redirect_absolute($dest)
31{
32    // 改行文字を削除
33    $dest = str_replace(array("\r", "\n"), '', $dest);
34    header('Location: '. $dest);
35    exit;
36}
37
38/**
39 * クライアントリダイレクト(ログインページ)
40 */
41function client_redirect_login()
42{
43    client_redirect_absolute(get_login_url());
44}
45
46/**
47 * ログインページを取得
48 *
49 * @return string ログインページURL
50 */
51function get_login_url()
52{
53    if (LOGIN_URL_PC) {
54        return LOGIN_URL_PC;
55    } else {
56        return openpne_gen_url('pc', 'page_o_login');
57    }
58}
59
60//---
61
62/**
63 * URLを生成
64 */
65function openpne_gen_url($module, $action = '', $params = array(), $absolute = true, $force = false)
66{
67    switch ($force) {
68    case 'ssl':
69        $url = OPENPNE_SSL_URL;
70        break;
71    case 'nonssl':
72        $url = OPENPNE_URL;
73        break;
74    default:
75        $url = openpne_gen_url_head($module, $action, $absolute);
76        break;
77    }
78
79    $p = array('m' => $module, 'a' => $action) + $params;
80    if (need_ssl_param($module, $action, $force)) {
81        $p['ssl_param'] = 1;
82    } else {
83        unset($p['ssl_param']);
84    }
85
86    require_once 'PHP/Compat/Function/http_build_query.php';
87    if ($q = http_build_query($p)) {
88        $url .= '?' . $q;
89    }
90    return $url;
91}
92
93function openpne_gen_url_head($module, $action = '', $absolute = true)
94{
95    if (OPENPNE_USE_PARTIAL_SSL) {
96        switch (openpne_ssl_type($module, $action)) {
97        case 'SSL_REQUIRED':
98            $head = ($absolute || !is_ssl()) ? OPENPNE_SSL_URL : './';
99            break;
100        case 'SSL_SELECTABLE':
101            if ($absolute) {
102                $head = (is_ssl()) ? OPENPNE_SSL_URL : OPENPNE_URL;
103            } else {
104                $head = './';
105            }
106            break;
107        case 'SSL_DISABLED':
108            $head = ($absolute || is_ssl()) ? OPENPNE_URL : './';
109            break;
110        }
111    } else {
112        $head = ($absolute) ? OPENPNE_URL : './';
113    }
114    return $head;
115}
116
117//---
118
119/**
120 * module / action が部分SSL対象かどうかを判別する
121 */
122function openpne_ssl_type($m, $a)
123{
124    if (in_array($a, (array)$GLOBALS['_OPENPNE_SSL_REQUIRED'][$m])) {
125        $type = 'SSL_REQUIRED';
126    } elseif (in_array($a, (array)$GLOBALS['_OPENPNE_SSL_SELECTABLE'][$m])) {
127        $type = 'SSL_SELECTABLE';
128    } else {
129        $type = 'SSL_DISABLED';
130    }
131    return $type;
132}
133
134/**
135 * 現在のリクエストがSSL通信であるかどうかを判別
136 */
137function is_ssl()
138{
139    static $is_ssl;
140    if (!isset($is_ssl)) {
141        if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
142            $is_ssl = true;
143        } elseif (OPENPNE_USE_SSL_PARAM && !empty($_REQUEST['ssl_param'])) {
144            $is_ssl = true;
145        } else {
146            $is_ssl = false;
147        }
148    }
149    return $is_ssl;
150}
151
152function need_ssl_param($module, $action = '', $force = false)
153{
154    $need = false;
155    if (OPENPNE_USE_PARTIAL_SSL && OPENPNE_USE_SSL_PARAM) {
156        switch ($force) {
157        case 'ssl':
158            $need = true;
159            break;
160        case 'nonssl':
161            $need = false;
162            break;
163        default:
164            switch (openpne_ssl_type($module, $action)) {
165            case 'SSL_REQUIRED':
166                $need = true;
167                break;
168            case 'SSL_SELECTABLE':
169                $need = is_ssl();
170                break;
171            case 'SSL_DISABLED':
172                break;
173            }
174            break;
175        }
176    }
177    return $need;
178}
179
180//---
181
182function is_ktai_mail_address($mail)
183{
184    $pieces = explode('@', $mail);
185    $domain = array_pop($pieces);
186
187    return in_array($domain, $GLOBALS['OpenPNE']['KTAI_DOMAINS']);
188}
189
190function db_common_is_mailaddress($value)
191{
192    if (preg_match('/^[^:;@,\s]+@\w[\w-.]*\.[a-zA-Z]+$/', $value)) {
193        return true;
194    } else {
195        return false;
196    }
197}
198
199//---
200
201function _mt_srand()
202{
203    if (version_compare(phpversion(), '4.2.0', '<')) {
204        list($usec, $sec) = explode(' ', microtime());
205        $seed = (float)$sec + ((float)$usec * 100000);
206
207        mt_srand($seed);
208    }
209}
210
211function do_common_create_password($length = 8)
212{
213    // パスワードに使用する文字
214    $elem = 'abcdefghkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ2345679';
215    $max = strlen($elem) - 1;
216
217    _mt_srand();
218    $password = '';
219    for ($i = 0; $i < $length; $i++) {
220        $password .= substr($elem, mt_rand(0, $max), 1);
221    }
222    return $password;
223}
224
225function create_hash()
226{
227    _mt_srand();
228    return md5(uniqid(mt_rand(), true));
229}
230
231//---
232
233function &get_crypt_blowfish()
234{
235    static $singleton;
236    if (empty($singleton)) {
237        require_once 'Crypt/Blowfish.php';
238        $singleton = new Crypt_Blowfish(ENCRYPT_KEY);
239    }
240    return $singleton;
241}
242
243/**
244 * 可逆的な暗号化をする
245 *
246 * @param string $str 平文
247 * @return string 暗号文
248 */
249function t_encrypt($str)
250{
251    if (!$str) return '';
252
253    $bf =& get_crypt_blowfish();
254    $str = $bf->encrypt($str);
255
256    //base64
257    $str = base64_encode($str);
258
259    return $str;
260}
261
262/**
263 * 可逆的な暗号を復号化する
264 *
265 * @param string $str 暗号文
266 * @return string 平文
267 */
268function t_decrypt($str)
269{
270    if (!$str) return '';
271
272    //base64
273    $str = base64_decode($str);
274
275    $bf =& get_crypt_blowfish();
276    return rtrim($bf->decrypt($str));
277}
278
279function t_wordwrap($str, $width = 80, $break = "\n")
280{
281    if (!$width) {
282        return $str;
283    }
284
285    $lines = explode($break, $str);
286    foreach ($lines as $key => $line) {
287        if (mb_strwidth($line) > $width) {
288            $new_line = '';
289            do {
290                if ($new_line) {
291                    $new_line .= $break;
292                }
293                $tmp = mb_strimwidth($line, 0, $width);
294                $new_line .= $tmp;
295                $line = substr($line, strlen($tmp));
296            } while (strlen($line) > 0);
297            $lines[$key] = $new_line;
298        }
299    }
300    return implode($break, $lines);
301}
302
303function util_is_unused_mail($name)
304{
305    $unused = explode(',', UNUSED_MAILS);
306    return in_array($name, $unused);
307}
308
309function util_get_c_navi($navi_type = 'h')
310{
311    switch ($navi_type) {
312    case 'global':
313        $navi_type = 'global';
314        $navi = array(
315            array('url' => '?m=pc&a=page_h_search', 'caption' => 'メンバー検索'),
316            array('url' => '?m=pc&a=page_h_com_find_all', 'caption' => 'コミュニティ検索'),
317            array('url' => '?m=pc&a=page_h_review_search', 'caption' => 'レビュー検索'),
318            array('url' => '?m=pc&a=page_h_home', 'caption' => 'マイホーム'),
319            array('url' => '?m=pc&a=page_h_invite', 'caption' => '友人を誘う'),
320            array('url' => '?m=pc&a=page_h_diary_list_all', 'caption' => '最新日記'),
321            array('url' => '?m=pc&a=page_h_ranking', 'caption' => 'ランキング'),
322            array('url' => '?m=pc&a=page_h_config', 'caption' => '設定変更'),
323//            array('url' => '?m=pc&a=do_inc_page_header_logout', 'caption' => 'ログアウト'),
324        );
325        break;
326    case 'h':
327    default:
328        $navi_type = 'h';
329        $navi = array(
330            array('url' => '?m=pc&a=page_h_home', 'caption' => 'ホーム'),
331            array('url' => '?m=pc&a=page_fh_friend_list', 'caption' => WORD_MY_FRIEND),
332            array('url' => '?m=pc&a=page_fh_diary_list', 'caption' => '日記'),
333            array('url' => '?m=pc&a=page_h_message_box', 'caption' => 'メッセージ'),
334            array('url' => '?m=pc&a=page_h_ashiato', 'caption' => 'あしあと'),
335            array('url' => '?m=pc&a=page_h_bookmark_list', 'caption' => 'お気に入り'),
336            array('url' => '?m=pc&a=page_fh_review_list_member', 'caption' => 'マイレビュー'),
337            array('url' => '?m=pc&a=page_h_prof', 'caption' => 'マイページ確認'),
338            array('url' => '?m=pc&a=page_h_config_prof', 'caption' => 'プロフィール変更'),
339        );
340        break;
341    case 'f':
342        $navi = array(
343            array('url' => '?m=pc&a=page_f_home', 'caption' => 'ホーム'),
344            array('url' => '?m=pc&a=page_fh_friend_list', 'caption' => WORD_FRIEND),
345            array('url' => '?m=pc&a=page_fh_diary_list', 'caption' => '日記を読む'),
346            array('url' => '?m=pc&a=page_f_message_send', 'caption' => 'メッセージを送る'),
347            array('url' => '?m=pc&a=page_f_bookmark_add', 'caption' => 'お気に入りに追加'),
348            array('url' => '?m=pc&a=page_fh_review_list_member', 'caption' => 'レビュー'),
349            array('url' => '?m=pc&a=page_f_invite', 'caption' => WORD_MY_FRIEND.'に紹介'),
350            array('url' => '?m=pc&a=page_f_link_request', 'caption' => WORD_MY_FRIEND.'に追加'),
351            array('url' => '?m=pc&a=page_f_intro_edit', 'caption' => '紹介文を書く'),
352        );
353        break;
354    case 'c':
355        $navi = array(
356            array('url' => '?m=pc&a=page_c_home', 'caption' => 'コミュニティトップ'),
357            array('url' => '?m=pc&a=page_c_topic_list', 'caption' => '掲示板'),
358            array('url' => '?m=pc&a=page_c_member_review', 'caption' => 'おすすめレビュー'),
359            array('url' => '?m=pc&a=page_c_join_commu', 'caption' => 'コミュニティに参加'),
360            array('url' => '?m=pc&a=page_c_invite', 'caption' => WORD_MY_FRIEND.'に紹介'),
361            array('url' => '?m=pc&a=page_c_leave_commu', 'caption' => 'コミュニティを退会'),
362        );
363        break;
364    }
365    $db = db_get_c_navi($navi_type);
366    foreach ($db as $value) {
367        $i = $value['sort_order'] - 1;
368        $navi[$i] = array('url' => $value['url'], 'caption' => $value['caption']);
369    }
370    return $navi;
371}
372
373/**
374 * checkdate の wrapper function
375 * Warning 対策
376 */
377function t_checkdate($month, $day, $year)
378{
379    return checkdate(intval($month), intval($day), intval($year));
380}
381
382/**
383 * Date_Calc::isFutureDate の wrapper function
384 */
385function t_isFutureDate($day, $month, $year)
386{
387    require_once 'Date/Calc.php';
388    return Date_Calc::isFutureDate(intval($day), intval($month), intval($year));
389}
390
391//---
392
393function &get_cache_lite_function()
394{
395    static $instance;
396    if (empty($instance)) {
397        require_once 'Cache/Lite/Function.php';
398        $options = array(
399            'cacheDir' => OPENPNE_VAR_DIR . '/function_cache/',
400            'hashedDirectoryLevel' => 2,
401            'hashedDirectoryUmask' => 0777,
402        );
403        $instance = new Cache_Lite_Function($options);
404    }
405    return $instance;
406}
407
408/**
409 * call function cache
410 */
411function pne_cache_call()
412{
413    $arg_list = func_get_args();
414    $lifetime = array_shift($arg_list);
415
416    if (OPENPNE_USE_FUNCTION_CACHE) {
417        $cache =& get_cache_lite_function();
418        $cache->setOption('lifetime', intval($lifetime));
419        return call_user_func_array(array(&$cache, 'call'), $arg_list);
420    } else {
421        $function = array_shift($arg_list);
422        return call_user_func_array($function, $arg_list);
423    }
424}
425
426/**
427 * drop function cache
428 */
429function pne_cache_drop()
430{
431    $arg_list = func_get_args();
432
433    if (OPENPNE_USE_FUNCITON_CACHE) {
434        $cache =& get_cache_lite_funcion();
435        return call_user_func_array(array(&$cache, 'drop'), $arg_list);
436    } else {
437        return true;
438    }
439}
440
441?>
Note: See TracBrowser for help on using the repository browser.