示例#1
0
 /**
  * コンストラクタ
  *
  * @param  string $name     ロック名(≒排他処理したいファイル名)
  * @param  bool   $remove   ロックファイルを自動で削除するかどうか
  * @param  string $suffix   ロックファイル名の接尾辞
  */
 public function __construct($name, $remove = true, $suffix = '.lck')
 {
     $this->_filename = p2_realpath($name . $suffix);
     $this->_remove = $remove;
     FileCtl::mkdirFor($this->_filename);
     $this->_fh = fopen($this->_filename, 'wb');
     if (!$this->_fh) {
         p2die("cannot create lockfile ({$this->_filename}).");
     }
     if (!flock($this->_fh, LOCK_EX)) {
         p2die("cannot get lock ({$this->_filename}).");
     }
 }
示例#2
0
/**
 * 一時変数でグローバル変数を汚染しないように設定処理を関数化
 */
function p2_init()
{
    global $MYSTYLE, $STYLE, $debug;
    global $skin, $skin_en, $skin_name, $skin_uniq;
    global $_conf, $_login, $_p2session;
    // {{{ 基本変数
    $_conf['p2web_url'] = 'http://akid.s17.xrea.com/';
    $_conf['p2ime_url'] = 'http://akid.s17.xrea.com/p2ime.php';
    $_conf['favrank_url'] = 'http://akid.s17.xrea.com/favrank/favrank.php';
    $_conf['expack.web_url'] = 'http://page2.skr.jp/rep2/';
    $_conf['expack.download_url'] = 'http://page2.skr.jp/rep2/downloads.html';
    $_conf['expack.history_url'] = 'http://page2.skr.jp/rep2/history.html';
    $_conf['expack.tgrep_url'] = 'http://page2.xrea.jp/tgrep/search';
    $_conf['expack.gate_php'] = 'http://page2.skr.jp/gate.php';
    $_conf['menu_php'] = 'menu.php';
    $_conf['subject_php'] = 'subject.php';
    $_conf['read_php'] = 'read.php';
    $_conf['read_new_php'] = 'read_new.php';
    $_conf['read_new_k_php'] = 'read_new_k.php';
    // }}}
    // {{{ 環境設定
    // デバッグ
    //$debug = !empty($_GET['debug']);
    putenv('LC_CTYPE=C');
    // タイムゾーンをセット
    date_default_timezone_set('Asia/Tokyo');
    if (!(defined('P2_CLI_RUN') && P2_CLI_RUN)) {
        // スクリプト実行制限時間 (秒)
        set_time_limit(60);
        // (60)
        // umask
        umask(0);
    }
    // 自動フラッシュをオフにする
    ob_implicit_flush(0);
    // file($filename, FILE_IGNORE_NEW_LINES) で CR/LF/CR+LF のいずれも行末として扱う
    ini_set('auto_detect_line_endings', 1);
    // output_add_rewrite_var(), http_build_query() 等で生成・変更される
    // URLのGETパラメータ区切り文字(列)を"&"にする。(デフォルトは"&")
    ini_set('arg_separator.output', '&');
    // Windows なら
    if (strncasecmp(PHP_OS, 'WIN', 3) === 0) {
        define('P2_OS_WINDOWS', 1);
    } else {
        define('P2_OS_WINDOWS', 0);
    }
    // HTTPS接続なら
    if (array_key_exists('HTTPS', $_SERVER) && strcasecmp($_SERVER['HTTPS'], 'on') === 0) {
        define('P2_HTTPS_CONNECTION', 1);
    } else {
        define('P2_HTTPS_CONNECTION', 0);
    }
    // ヌルバイト定数
    // mbstring.script_encoding = SJIS-win だと
    // "\0", "\x00" 以降がカットされるので、chr()関数を使う
    define('P2_NULLBYTE', chr(0));
    // }}}
    // {{{ P2Util::header_content_type() を不要にするおまじない
    ini_set('default_mimetype', 'text/html');
    ini_set('default_charset', 'Shift_JIS');
    // }}}
    // {{{ ライブラリ類のパス設定
    define('P2_CONFIG_DIR', __DIR__);
    define('P2_BASE_DIR', dirname(P2_CONFIG_DIR));
    // ドキュメントルート
    define('P2_WWW_DIR', P2_BASE_DIR . '/rep2');
    // コマンドラインスクリプト
    define('P2_SCRIPT_DIR', P2_BASE_DIR . '/scripts');
    // 基本的な機能を提供するするライブラリ
    define('P2_LIB_DIR', P2_BASE_DIR . '/lib');
    // おまけ的な機能を提供するするライブラリ
    define('P2EX_LIB_DIR', P2_BASE_DIR . '/lib/expack');
    // プラグインライブラリ
    define('P2_PLUGIN_DIR', P2_BASE_DIR . '/lib/plugins');
    // スタイルシート
    define('P2_STYLE_DIR', P2_BASE_DIR . '/style');
    // スキン
    define('P2_SKIN_DIR', P2_WWW_DIR . '/skin');
    define('P2_USER_SKIN_DIR', P2_WWW_DIR . '/user_skin');
    // }}}
    // {{{ 環境チェックとデバッグ
    // ユーティリティを読み込む
    include P2_LIB_DIR . '/global.funcs.php';
    include P2_LIB_DIR . '/startup.funcs.php';
    spl_autoload_register('p2_load_class');
    include P2_LIB_DIR . '/wiki/P2UtilWiki.php';
    if ($debug) {
        $profiler = new Benchmark_Profiler(true);
        // p2_print_memory_usage();
        register_shutdown_function('p2_print_memory_usage');
    }
    // }}}
    // {{{ 文字コードの指定
    mb_internal_encoding('SJIS-win');
    mb_http_output('pass');
    mb_substitute_character(63);
    // 文字コード変換に失敗した文字が "?" になる
    //mb_substitute_character(0x3013); // 〓
    //ob_start('mb_output_handler');
    if (function_exists('mb_ereg_replace')) {
        define('P2_MBREGEX_AVAILABLE', 1);
        mb_regex_encoding('SJIS-win');
    } else {
        define('P2_MBREGEX_AVAILABLE', 0);
    }
    // }}}
    // {{{ 管理者用設定etc.
    // 管理者用設定を読み込み
    include P2_CONFIG_DIR . '/conf_admin.inc.php';
    // ディレクトリの絶対パス化
    $_conf['data_dir'] = p2_realpath($_conf['data_dir']);
    $_conf['dat_dir'] = p2_realpath($_conf['dat_dir']);
    $_conf['idx_dir'] = p2_realpath($_conf['idx_dir']);
    $_conf['pref_dir'] = p2_realpath($_conf['pref_dir']);
    $_conf['db_dir'] = p2_realpath($_conf['db_dir']);
    // 管理用保存ディレクトリ
    $_conf['admin_dir'] = $_conf['data_dir'] . '/admin';
    // cache 保存ディレクトリ
    // 2005/06/29 $_conf['pref_dir'] . '/p2_cache' より変更
    $_conf['cache_dir'] = $_conf['data_dir'] . '/cache';
    // Cookie 保存ディレクトリ
    // 2008/09/09 $_conf['pref_dir'] . '/p2_cookie' より変更
    $_conf['cookie_dir'] = $_conf['data_dir'] . '/cookie';
    // コンパイルされたテンプレートの保存ディレクトリ
    $_conf['compile_dir'] = $_conf['data_dir'] . '/compile';
    // セッションデータ保存ディレクトリ
    $_conf['session_dir'] = $_conf['data_dir'] . '/session';
    // テンポラリディレクトリ
    $_conf['tmp_dir'] = $_conf['data_dir'] . '/tmp';
    // バージョンIDを二重引用符やヒアドキュメント内に埋め込むための変数
    $_conf['p2_version_id'] = P2_VERSION_ID;
    // 文字コード自動判定用のヒント文字列
    $_conf['detect_hint'] = '◎◇';
    $_conf['detect_hint_input_ht'] = '<input type="hidden" name="_hint" value="◎◇">';
    $_conf['detect_hint_input_xht'] = '<input type="hidden" name="_hint" value="◎◇" />';
    //$_conf['detect_hint_utf8'] = mb_convert_encoding('◎◇', 'UTF-8', 'SJIS-win');
    $_conf['detect_hint_q'] = '_hint=%81%9D%81%9E';
    // rawurlencode($_conf['detect_hint'])
    $_conf['detect_hint_q_utf8'] = '_hint=%E2%97%8E%E2%97%87';
    // rawurlencode($_conf['detect_hint_utf8'])
    // }}}
    // {{{ 変数設定
    $preferences = array('conf_user_file' => 'conf_user.srd.cgi', 'favita_brd' => 'p2_favita.brd', 'favlist_idx' => 'p2_favlist.idx', 'recent_idx' => 'p2_recent.idx', 'palace_idx' => 'p2_palace.idx', 'res_hist_idx' => 'p2_res_hist.idx', 'res_hist_dat' => 'p2_res_hist.dat', 'res_hist_dat_php' => 'p2_res_hist.dat.php', 'idpw2ch_php' => 'p2_idpw2ch.php', 'sid2ch_php' => 'p2_sid2ch.php', 'auth_user_file' => 'p2_auth_user.php', 'login_log_file' => 'p2_login.log.php', 'login_failed_log_file' => 'p2_login_failed.dat.php');
    foreach ($preferences as $k => $v) {
        $_conf[$k] = $_conf['pref_dir'] . '/' . $v;
    }
    $_conf['orig_favita_brd'] = $_conf['favita_brd'];
    $_conf['orig_favlist_idx'] = $_conf['favlist_idx'];
    $_conf['cookie_db_path'] = $_conf['db_dir'] . '/p2_cookies.sqlite3';
    $_conf['post_db_path'] = $_conf['db_dir'] . '/p2_post_data.sqlite3';
    $_conf['hostcheck_db_path'] = $_conf['db_dir'] . '/p2_hostcheck_cache.sqlite3';
    $_conf['matome_db_path'] = $_conf['db_dir'] . '/p2_matome_cache.sqlite3';
    $_conf['iv2_cache_db_path'] = $_conf['db_dir'] . '/iv2_cache.sqlite3';
    // 補正
    if ($_conf['expack.use_pecl_http'] && !extension_loaded('http')) {
        if (!($_conf['expack.use_pecl_http'] == 2 && $_conf['expack.dl_pecl_http'])) {
            $_conf['expack.use_pecl_http'] = 0;
        }
    }
    // }}}
    $_conf['dropbox_auth_json'] = P2_CONFIG_DIR . '/dropbox.json';
    include P2_CONFIG_DIR . '/empty_style.php';
    include P2_LIB_DIR . '/bootstrap.php';
}
示例#3
0
/**
 * 一時変数でグローバル変数を汚染しないように設定処理を関数化
 */
function p2_init()
{
    global $MYSTYLE, $STYLE, $debug;
    global $skin, $skin_en, $skin_name, $skin_uniq;
    global $_conf, $_login, $_p2session;
    // エラー出力設定
    if (defined('E_DEPRECATED')) {
        error_reporting(E_ALL & ~(E_NOTICE | E_STRICT | E_DEPRECATED));
    } else {
        error_reporting(E_ALL & ~(E_NOTICE | E_STRICT));
    }
    // {{{ 基本変数
    $_conf['p2web_url'] = 'http://akid.s17.xrea.com/';
    $_conf['p2ime_url'] = 'http://akid.s17.xrea.com/p2ime.php';
    $_conf['favrank_url'] = 'http://akid.s17.xrea.com/favrank/favrank.php';
    $_conf['expack.web_url'] = 'http://page2.skr.jp/rep2/';
    $_conf['expack.download_url'] = 'http://page2.skr.jp/rep2/downloads.html';
    $_conf['expack.history_url'] = 'http://page2.skr.jp/rep2/history.html';
    $_conf['expack.tgrep_url'] = 'http://page2.xrea.jp/tgrep/search';
    $_conf['expack.gate_php'] = 'http://page2.skr.jp/gate.php';
    $_conf['menu_php'] = 'menu.php';
    $_conf['subject_php'] = 'subject.php';
    $_conf['read_php'] = 'read.php';
    $_conf['read_new_php'] = 'read_new.php';
    $_conf['read_new_k_php'] = 'read_new_k.php';
    // }}}
    // {{{ 環境設定
    // デバッグ
    //$debug = !empty($_GET['debug']);
    putenv('LC_CTYPE=C');
    // タイムゾーンをセット
    date_default_timezone_set('Asia/Tokyo');
    // スクリプト実行制限時間 (秒)
    if (!defined('P2_CLI_RUN')) {
        set_time_limit(60);
        // (60)
    }
    // 自動フラッシュをオフにする
    ob_implicit_flush(0);
    // file($filename, FILE_IGNORE_NEW_LINES) で CR/LF/CR+LF のいずれも行末として扱う
    ini_set('auto_detect_line_endings', 1);
    // session.trans_sid有効時 や output_add_rewrite_var(),
    // http_build_query() 等で生成・変更される
    // URLのGETパラメータ区切り文字(列)を"&amp;"にする。(デフォルトは"&")
    ini_set('arg_separator.output', '&amp;');
    // セッションIDの 付加機能が有効となった場合に、セッションIDを含めるために書き換 えられるHTMLタグにimg=srcを追加
    $temp_rewriter_tags = explode(',', ini_get('url_rewriter.tags'));
    if (is_array($temp_rewriter_tags)) {
        if (!array_search('img=src', $temp_rewriter_tags)) {
            $temp_rewriter_tags[] = 'img=src';
            ini_set('url_rewriter.tags', implode(',', $temp_rewriter_tags));
        }
    }
    // Windows なら
    if (strncasecmp(PHP_OS, 'WIN', 3) === 0) {
        // Windows
        defined('PATH_SEPARATOR') or define('PATH_SEPARATOR', ';');
        defined('DIRECTORY_SEPARATOR') or define('DIRECTORY_SEPARATOR', '\\');
        define('P2_OS_WINDOWS', 1);
    } else {
        defined('PATH_SEPARATOR') or define('PATH_SEPARATOR', ':');
        defined('DIRECTORY_SEPARATOR') or define('DIRECTORY_SEPARATOR', '/');
        define('P2_OS_WINDOWS', 0);
    }
    // HTTPS接続なら
    if (array_key_exists('HTTPS', $_SERVER) && strcasecmp($_SERVER['HTTPS'], 'on') === 0) {
        define('P2_HTTPS_CONNECTION', 1);
    } else {
        define('P2_HTTPS_CONNECTION', 0);
    }
    // ヌルバイト定数
    // mbstring.script_encoding = SJIS-win だと
    // "\0", "\x00" 以降がカットされるので、chr()関数を使う
    define('P2_NULLBYTE', chr(0));
    // }}}
    // {{{ P2Util::header_content_type() を不要にするおまじない
    ini_set('default_mimetype', 'text/html');
    ini_set('default_charset', 'Shift_JIS');
    // }}}
    // {{{ ライブラリ類のパス設定
    define('P2_CONF_DIR', dirname(__FILE__));
    // __DIR__ @php-5.3
    define('P2_BASE_DIR', dirname(P2_CONF_DIR));
    // 基本的な機能を提供するするライブラリ
    define('P2_LIB_DIR', P2_BASE_DIR . '/lib');
    // おまけ的な機能を提供するするライブラリ
    define('P2EX_LIB_DIR', P2_BASE_DIR . '/lib/expack');
    // スタイルシート
    define('P2_STYLE_DIR', P2_BASE_DIR . '/style');
    // スキン
    define('P2_SKIN_DIR', P2_BASE_DIR . '/skin');
    define('P2_USER_SKIN_DIR', P2_BASE_DIR . '/user_skin');
    // PEARインストールディレクトリ、検索パスに追加される
    define('P2_PEAR_DIR', P2_BASE_DIR . '/includes');
    // コマンドラインツール
    define('P2_CLI_DIR', P2_BASE_DIR . '/cli');
    // 検索パスをセット
    if (is_dir(P2_PEAR_DIR)) {
        set_include_path(P2_PEAR_DIR . PATH_SEPARATOR . get_include_path());
    }
    // }}}
    // {{{ 環境チェックとデバッグ
    // ユーティリティを読み込む
    include P2_LIB_DIR . '/global.funcs.php';
    include P2_LIB_DIR . '/startup.funcs.php';
    spl_autoload_register('p2_load_class');
    require_once P2_LIB_DIR . '/wiki/p2utilwiki.class.php';
    // 動作環境を確認 (要件を満たしているならコメントアウト可)
    p2_check_environment(__LINE__);
    if ($debug) {
        if (!class_exists('Benchmark_Profiler', false)) {
            require 'Benchmark/Profiler.php';
        }
        $profiler = new Benchmark_Profiler(true);
        // p2_print_memory_usage();
        register_shutdown_function('p2_print_memory_usage');
    }
    // }}}
    // {{{ 文字コードの指定
    mb_internal_encoding('SJIS-win');
    mb_http_output('pass');
    mb_substitute_character(63);
    // 文字コード変換に失敗した文字が "?" になる
    //mb_substitute_character(0x3013); // 〓
    //ob_start('mb_output_handler');
    if (function_exists('mb_ereg_replace')) {
        define('P2_MBREGEX_AVAILABLE', 1);
        mb_regex_encoding('SJIS-win');
    } else {
        define('P2_MBREGEX_AVAILABLE', 0);
    }
    // }}}
    // {{{ 管理者用設定etc.
    // 管理者用設定を読み込み
    include P2_CONF_DIR . '/conf_admin.inc.php';
    // ディレクトリの絶対パス化
    $_conf['data_dir'] = p2_realpath($_conf['data_dir']);
    $_conf['dat_dir'] = p2_realpath($_conf['dat_dir']);
    $_conf['idx_dir'] = p2_realpath($_conf['idx_dir']);
    $_conf['pref_dir'] = p2_realpath($_conf['pref_dir']);
    $_conf['db_dir'] = p2_realpath($_conf['db_dir']);
    // 管理用保存ディレクトリ
    $_conf['admin_dir'] = $_conf['data_dir'] . '/admin';
    // cache 保存ディレクトリ
    // 2005/06/29 $_conf['pref_dir'] . '/p2_cache' より変更
    $_conf['cache_dir'] = $_conf['data_dir'] . '/cache';
    // Cookie 保存ディレクトリ
    // 2008/09/09 $_conf['pref_dir'] . '/p2_cookie' より変更
    $_conf['cookie_dir'] = $_conf['data_dir'] . '/cookie';
    // コンパイルされたテンプレートの保存ディレクトリ
    $_conf['compile_dir'] = $_conf['data_dir'] . '/compile';
    // セッションデータ保存ディレクトリ
    $_conf['session_dir'] = $_conf['data_dir'] . '/session';
    // テンポラリディレクトリ
    $_conf['tmp_dir'] = $_conf['data_dir'] . '/tmp';
    // バージョンIDを二重引用符やヒアドキュメント内に埋め込むための変数
    $_conf['p2_version_id'] = P2_VERSION_ID;
    // 文字コード自動判定用のヒント文字列
    $_conf['detect_hint'] = '◎◇';
    $_conf['detect_hint_input_ht'] = '<input type="hidden" name="_hint" value="◎◇">';
    $_conf['detect_hint_input_xht'] = '<input type="hidden" name="_hint" value="◎◇" />';
    //$_conf['detect_hint_utf8'] = mb_convert_encoding('◎◇', 'UTF-8', 'SJIS-win');
    $_conf['detect_hint_q'] = '_hint=%81%9D%81%9E';
    // rawurlencode($_conf['detect_hint'])
    $_conf['detect_hint_q_utf8'] = '_hint=%E2%97%8E%E2%97%87';
    // rawurlencode($_conf['detect_hint_utf8'])
    // }}}
    // {{{ 変数設定
    $preferences = array('conf_user_file' => 'conf_user.srd.cgi', 'favita_brd' => 'p2_favita.brd', 'favlist_idx' => 'p2_favlist.idx', 'recent_idx' => 'p2_recent.idx', 'palace_idx' => 'p2_palace.idx', 'res_hist_idx' => 'p2_res_hist.idx', 'res_hist_dat' => 'p2_res_hist.dat', 'res_hist_dat_php' => 'p2_res_hist.dat.php', 'idpw2ch_php' => 'p2_idpw2ch.php', 'sid2ch_php' => 'p2_sid2ch.php', 'auth_user_file' => 'p2_auth_user.php', 'auth_imodeid_file' => 'p2_auth_imodeid.php', 'auth_docomo_file' => 'p2_auth_docomo.php', 'auth_ez_file' => 'p2_auth_ez.php', 'auth_jp_file' => 'p2_auth_jp.php', 'login_log_file' => 'p2_login.log.php', 'login_failed_log_file' => 'p2_login_failed.dat.php');
    foreach ($preferences as $k => $v) {
        $_conf[$k] = $_conf['pref_dir'] . '/' . $v;
    }
    $_conf['orig_favita_brd'] = $_conf['favita_brd'];
    $_conf['orig_favlist_idx'] = $_conf['favlist_idx'];
    $_conf['cookie_db_path'] = $_conf['db_dir'] . '/p2_cookies.sqlite3';
    $_conf['post_db_path'] = $_conf['db_dir'] . '/p2_post_data.sqlite3';
    $_conf['hostcheck_db_path'] = $_conf['db_dir'] . '/p2_hostcheck_cache.sqlite3';
    $_conf['matome_db_path'] = $_conf['db_dir'] . '/p2_matome_cache.sqlite3';
    $_conf['iv2_cache_db_path'] = $_conf['db_dir'] . '/iv2_cache.sqlite3';
    // 補正
    if ($_conf['expack.use_pecl_http'] && !extension_loaded('http')) {
        if (!($_conf['expack.use_pecl_http'] == 2 && $_conf['expack.dl_pecl_http'])) {
            $_conf['expack.use_pecl_http'] = 0;
        }
    }
    // }}}
    include P2_CONF_DIR . '/empty_style.php';
    include P2_LIB_DIR . '/bootstrap.php';
}