コード例 #1
0
ファイル: read_res_hist.funcs.php プロジェクト: poppen/p2
/**
 * チェックした書き込み記事を削除する
 *
 * @access  public
 * @return  boolean
 */
function deleMsg($checked_hists)
{
    global $_conf;
    if (!($reslines = file($_conf['p2_res_hist_dat']))) {
        p2die(sprintf('%s を開けませんでした', $_conf['p2_res_hist_dat']));
        return false;
    }
    $reslines = array_map('rtrim', $reslines);
    // ファイルの下に記録されているものが新しいので逆順にする
    $reslines = array_reverse($reslines);
    $neolines = array();
    // チェックして整えて
    if ($reslines) {
        $rmnums = _getRmNums($checked_hists, $reslines);
        $neolines = _rmLine($rmnums, $reslines);
        P2Util::pushInfoHtml("<p>p2 info: " . count($rmnums) . "件のレス記事を削除しました</p>");
    }
    if (is_array($neolines)) {
        // 行順を戻す
        $neolines = array_reverse($neolines);
        $cont = "";
        if ($neolines) {
            $cont = implode("\n", $neolines) . "\n";
        }
        // 書き込み処理
        if (false === FileCtl::filePutRename($_conf['p2_res_hist_dat'], $cont)) {
            $errmsg = sprintf('p2 error: %s(), FileCtl::filePutRename() failed.', __FUNCTION__);
            trigger_error($errmsg, E_USER_WARNING);
            return false;
        }
    }
    return true;
}
コード例 #2
0
ファイル: NgAbornCtl.php プロジェクト: unpush/p2-php
 /**
  * あぼーん&NGワード設定を保存する
  *
  * @param void
  * @return void
  */
 public static function saveNgAborns()
 {
     global $ngaborns, $ngaborns_hits;
     global $_conf;
     $lasttime = date('Y/m/d G:i');
     if ($_conf['ngaborn_daylimit']) {
         $daylimit = time() - 60 * 60 * 24 * $_conf['ngaborn_daylimit'];
     } else {
         $daylimit = 0;
     }
     $errors = '';
     foreach ($ngaborns_hits as $code => $hits) {
         // ヒットしなかった場合でも1/100の確率で古いデータを削除するために処理を続ける
         if (!$hits && mt_rand(1, 100) < 100) {
             continue;
         }
         if (isset($ngaborns[$code]) && !empty($ngaborns[$code]['data'])) {
             // 更新時間でソートする
             usort($ngaborns[$code]['data'], array('NgAbornCtl', 'cmpLastTime'));
             $cont = '';
             foreach ($ngaborns[$code]['data'] as $a_ngaborn) {
                 if (empty($a_ngaborn['lasttime']) || $a_ngaborn['lasttime'] == '--') {
                     // 古いデータを削除する都合上、仮に現在の日時を付与
                     $a_ngaborn['lasttime'] = $lasttime;
                 } else {
                     // 必要ならここで古いデータはスキップ(削除)する
                     if ($daylimit > 0 && strtotime($a_ngaborn['lasttime']) < $daylimit) {
                         continue;
                     }
                 }
                 $cont .= sprintf("%s\t%s\t%d\n", $a_ngaborn['cond'], $a_ngaborn['lasttime'], $a_ngaborn['hits']);
             }
             // foreach
             /*
             echo "<pre>";
             echo $cont;
             echo "</pre>";
             */
             // 書き込む
             $fp = @fopen($ngaborns[$code]['file'], 'wb');
             if (!$fp) {
                 $errors .= "cannot write. ({$ngaborns[$code]['file']})\n";
             } else {
                 flock($fp, LOCK_EX);
                 fputs($fp, $cont);
                 flock($fp, LOCK_UN);
                 fclose($fp);
             }
         }
         // if
     }
     // foreach
     if ($errors !== '') {
         p2die('NGあぼーんファイルが更新できませんでした。', $errors);
     }
 }
コード例 #3
0
/**
 * ■スレッドあぼーんを複数一括解除する
 */
function settaborn_off($host, $bbs, $taborn_off_keys)
{
    if (!$taborn_off_keys) {
        return;
    }
    // p2_threads_aborn.idx のパス取得
    $taborn_idx = P2Util::idxDirOfHostBbs($host, $bbs) . 'p2_threads_aborn.idx';
    // p2_threads_aborn.idx がなければ
    if (!file_exists($taborn_idx)) {
        p2die('あぼーんリストが見つかりませんでした。');
    }
    // p2_threads_aborn.idx 読み込み
    $taborn_lines = FileCtl::file_read_lines($taborn_idx, FILE_IGNORE_NEW_LINES);
    // 指定keyを削除
    foreach ($taborn_off_keys as $val) {
        $neolines = array();
        if ($taborn_lines) {
            foreach ($taborn_lines as $line) {
                $lar = explode('<>', $line);
                if ($lar[1] == $val) {
                    // key発見
                    // echo "key:{$val} のスレッドをあぼーん解除しました。<br>";
                    $kaijo_attayo = true;
                    continue;
                }
                if (!$lar[1]) {
                    continue;
                }
                // keyのないものは不正データ
                $neolines[] = $line;
            }
        }
        $taborn_lines = $neolines;
    }
    // 書き込む
    if (file_exists($taborn_idx)) {
        copy($taborn_idx, $taborn_idx . '.bak');
        // 念のためバックアップ
    }
    $cont = '';
    if (is_array($taborn_lines)) {
        foreach ($taborn_lines as $l) {
            $cont .= $l . "\n";
        }
    }
    if (FileCtl::file_write_contents($taborn_idx, $cont) === false) {
        p2die('cannot write file.');
    }
    /*
    if (!$kaijo_attayo) {
        // echo "指定されたスレッドは既にあぼーんリストに載っていないようです。";
    } else {
        // echo "あぼーん解除、完了しました。";
    }
    */
}
コード例 #4
0
ファイル: editfile.php プロジェクト: xingskycn/p2-php
/**
 * ファイル内容を読み込んで編集する関数
 */
function editFile($path, $encode, $title)
{
    global $_conf, $modori_url, $rows, $cols, $csrfid;
    if ($path == '') {
        p2die('path が指定されていません');
    }
    $filename = basename($path);
    $ptitle = 'Edit: ' . p2h($title) . ' (' . $filename . ')';
    //ファイル内容読み込み
    FileCtl::make_datafile($path) or p2die("cannot make file. ({$path})");
    $cont = file_get_contents($path);
    if ($encode == "EUC-JP") {
        $cont = mb_convert_encoding($cont, 'CP932', 'CP51932');
    }
    $cont_area = p2h($cont);
    if ($modori_url) {
        $modori_url_ht = "<p><a href=\"{$modori_url}\">Back</a></p>\n";
    } else {
        $modori_url_ht = '';
    }
    $rows_at = $rows > 0 ? sprintf(' rows="%d"', $rows) : '';
    $cols_at = $cols > 0 ? sprintf(' cols="%d"', $cols) : '';
    // プリント
    echo $_conf['doctype'];
    echo <<<EOHEADER
<html lang="ja">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
    <meta http-equiv="Content-Style-Type" content="text/css">
    <meta http-equiv="Content-Script-Type" content="text/javascript">
    <meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
    {$_conf['extra_headers_ht']}
    <title>{$ptitle}</title>
</head>
<body onload="top.document.title=self.document.title;">
EOHEADER;
    $info_msg_ht = P2Util::getInfoHtml();
    echo $modori_url_ht;
    echo $ptitle;
    echo <<<EOFORM
<form action="{$_SERVER['SCRIPT_NAME']}" method="post" accept-charset="{$_conf['accept_charset']}">
    <input type="hidden" name="file" value="{$filename}">
    <input type="hidden" name="modori_url" value="{$modori_url}">
    <input type="hidden" name="encode" value="{$encode}">
    <input type="hidden" name="rows" value="{$rows}">
    <input type="hidden" name="cols" value="{$cols}">
    <input type="hidden" name="csrfid" value="{$csrfid}">
    <input type="submit" name="submit" value="Save">
    {$info_msg_ht}<br>
    <textarea style="font-size:9pt;" id="filecont" name="filecont" wrap="off"{$rows_at}{$cols_at}>{$cont_area}</textarea>
    {$_conf['detect_hint_input_ht']}{$_conf['k_input_ht']}
</form>
EOFORM;
    echo '</body></html>';
    return true;
}
コード例 #5
0
ファイル: P2CommandRunner.php プロジェクト: unpush/p2-php
 /**
  * subject.txtの並列ダウンロードを実行する
  *
  * @param string $mode
  * @param array $_conf
  * @return bool
  */
 public static function fetchSubjectTxt($mode, array $_conf)
 {
     // コマンド生成
     $args = array(escapeshellarg($_conf['expack.php_cli_path']));
     if ($_conf['expack.dl_pecl_http']) {
         $args[] = '-d';
         $args[] = 'extension=' . escapeshellarg('http.' . PHP_SHLIB_SUFFIX);
     }
     $args[] = escapeshellarg(P2_CLI_DIR . DIRECTORY_SEPARATOR . 'fetch-subject-txt.php');
     switch ($mode) {
         case 'fav':
         case 'recent':
         case 'res_hist':
         case 'merge_favita':
             $args[] = sprintf('--mode=%s', $mode);
             break;
         default:
             return false;
     }
     if ($_conf['expack.misc.multi_favs']) {
         switch ($mode) {
             case 'fav':
                 $args[] = sprintf('--set=%d', $_conf['m_favlist_set']);
                 break;
             case 'merge_favita':
                 $args[] = sprintf('--set=%d', $_conf['m_favita_set']);
                 break;
         }
     }
     // 標準エラー出力を標準出力にリダイレクト
     $args[] = '2>&1';
     $command = implode(' ', $args);
     //P2Util::pushInfoHtml('<p>' . htmlspecialchars($command, ENT_QUOTES) . '</p>');
     // 実行
     $pipe = popen($command, 'r');
     if (!is_resource($pipe)) {
         p2die('コマンドを実行できませんでした。', $command);
     }
     $output = '';
     while (!feof($pipe)) {
         $output .= fgets($pipe);
     }
     $status = pclose($pipe);
     if ($status != 0) {
         P2Util::pushInfoHtml(sprintf('<p>%s(): ERROR(%d)</p>', __METHOD__, $status));
     }
     if ($output !== '') {
         if ($status == 2) {
             P2Util::pushInfoHtml($output);
         } else {
             P2Util::pushInfoHtml('<p>' . nl2br(htmlspecialchars($output, ENT_QUOTES)) . '</p>');
         }
     }
     return $status == 0;
 }
コード例 #6
0
ファイル: P2Lock.php プロジェクト: xingskycn/p2-php
 /**
  * コンストラクタ
  *
  * @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}).");
     }
 }
コード例 #7
0
ファイル: Session.php プロジェクト: xingskycn/p2-php
 /**
  * よりセキュアなセッション管理を開始する
  * @return bool
  */
 private function _autoBegin()
 {
     // まだ強化セッションが始まっていなかったら
     if (!isset($_SESSION[$this->sess_array]['actime'])) {
         // セッション変数($this->sess_array)を初期セット
         $this->_initSess();
         // セッション変数の登録に失敗したら、エラー
         if (!isset($_SESSION[$this->sess_array]['actime'])) {
             trigger_error('Session::_autoBegin() セッション変数を登録できませんでした。', E_USER_WARNING);
             p2die('Session');
             return false;
         }
     }
     return true;
 }
コード例 #8
0
ファイル: AbstractDataStore.php プロジェクト: unpush/p2-php
 /**
  * データを保存するP2KeyValueStoreオブジェクトを取得する
  *
  * @param string $databasePath
  * @param string $codec
  * @param string $tableName
  * @return P2KeyValueStore
  */
 protected static function _getKVS($databasePath, $codec = P2KeyValueStore::CODEC_SERIALIZING, $tableName = null)
 {
     global $_conf;
     $id = $codec . ':' . $databasePath;
     if (array_key_exists($id, self::$_kvs)) {
         return self::$_kvs[$id];
     }
     if (!file_exists($databasePath) && !is_dir(dirname($databasePath))) {
         FileCtl::mkdirFor($databasePath);
     }
     try {
         $kvs = P2KeyValueStore::getStore($databasePath, $codec, $tableName);
         self::$_kvs[$id] = $kvs;
     } catch (Exception $e) {
         p2die(get_class($e) . ': ' . $e->getMessage());
     }
     return $kvs;
 }
コード例 #9
0
ファイル: Common.php プロジェクト: xingskycn/p2-php
 /**
  * コンストラクタ
  */
 public function __construct()
 {
     static $set_to_utf8 = false;
     // 設定の読み込み
     $ini = ic2_loadconfig();
     $this->_ini = $ini;
     if (!$ini['General']['dsn']) {
         p2die('DSNが設定されていません。');
     }
     // データベースへ接続
     $this->_database_dsn = $ini['General']['dsn'];
     $this->_db = $this->getDatabaseConnection();
     if (DB::isError($this->_db)) {
         p2die($this->_db->getMessage());
     }
     // クライアントの文字セットに UTF-8 を指定
     if (!$set_to_utf8) {
         if (preg_match('/^(\\w+)(?:\\((\\w+)\\))?:/', $this->_database_dsn, $m)) {
             $driver = strtolower($m[1]);
         } else {
             $driver = 'unknown';
         }
         switch ($driver) {
             case 'mysql':
             case 'mysqli':
                 if ($driver == 'mysql' && function_exists('mysql_set_charset')) {
                     mysql_set_charset('utf8', $this->_db->connection);
                 } elseif ($driver == 'mysqli' && function_exists('mysqli_set_charset')) {
                     mysqli_set_charset($this->_db->connection, 'utf8');
                 } else {
                     $this->_db->query("SET NAMES utf8");
                 }
                 break;
             case 'pgsql':
                 if (function_exists('pg_set_client_encoding')) {
                     pg_set_client_encoding($this->_db->connection, 'UNICODE');
                 } else {
                     $this->_db->query("SET CLIENT_ENCODING TO 'UNICODE'");
                 }
                 break;
         }
         $set_to_utf8 = true;
     }
 }
コード例 #10
0
ファイル: viewtxt.php プロジェクト: xingskycn/p2-php
/**
 * ファイル内容を読み込んで表示する関数
 */
function viewTxtFile($file, $encode)
{
    if (!$file) {
        p2die('file が指定されていません');
    }
    $filename = basename($file);
    $ptitle = $filename;
    //ファイル内容読み込み
    $cont = FileCtl::file_read_contents(P2_BASE_DIR . DIRECTORY_SEPARATOR . $file);
    if ($cont === false) {
        $cont_area = '';
    } else {
        if (strcasecmp($encode, 'EUC-JP') === 0) {
            $cont = mb_convert_encoding($cont, 'CP932', 'CP51932');
        } elseif (strcasecmp($encode, 'UTF-8') === 0) {
            $cont = mb_convert_encoding($cont, 'CP932', 'UTF-8');
        }
        $cont_area = p2h($cont);
    }
    // プリント
    echo <<<EOHEADER
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
    <meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
    {$_conf['extra_headers_ht']}
    <title>{$ptitle}</title>
    <link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
</head>
<body onload="top.document.title=self.document.title;">

EOHEADER;
    P2Util::printInfoHtml();
    echo "<pre>";
    echo $cont_area;
    echo "</pre>";
    echo '</body></html>';
    return true;
}
コード例 #11
0
/**
 * チェックした書き込み記事を削除する
 */
function deleMsg($checked_hists)
{
    global $_conf;
    $lock = new P2Lock($_conf['res_hist_dat'], false);
    // 読み込んで
    $reslines = FileCtl::file_read_lines($_conf['res_hist_dat'], FILE_IGNORE_NEW_LINES);
    if ($reslines === false) {
        p2die("{$_conf['res_hist_dat']} を開けませんでした");
    }
    // ファイルの下に記録されているものが新しいので逆順にする
    $reslines = array_reverse($reslines);
    $neolines = array();
    // チェックして整えて
    if ($reslines) {
        $n = 1;
        foreach ($reslines as $ares) {
            $rar = explode("<>", $ares);
            // 番号と日付が一致するかをチェックする
            if (checkMsgID($checked_hists, $n, $rar[2])) {
                $rmnums[] = $n;
                // 削除する番号を登録
            }
            $n++;
        }
        $neolines = rmLine($rmnums, $reslines);
        P2Util::pushInfoHtml('<p>p2 info: ' . count($rmnums) . '件のレス記事を削除しました</p>');
    }
    if (is_array($neolines)) {
        // 行順を戻す
        $neolines = array_reverse($neolines);
        $cont = "";
        if ($neolines) {
            $cont = implode("\n", $neolines) . "\n";
        }
        // 書き込む
        if (FileCtl::file_write_contents($_conf['res_hist_dat'], $cont) === false) {
            p2die('cannot write file.');
        }
    }
}
コード例 #12
0
ファイル: viewtxt.php プロジェクト: unpush/p2-php
/**
 * ファイル内容を読み込んで表示する関数
 */
function viewTxtFile($file, $encode)
{
    if ($file == '') {
        p2die('file が指定されていません');
    }
    $filename = basename($file);
    $ptitle = $filename;
    //ファイル内容読み込み
    $cont = FileCtl::file_read_contents($file);
    if ($cont === false) {
        $cont_area = '';
    } else {
        if ($encode == 'EUC-JP') {
            $cont = mb_convert_encoding($cont, 'CP932', 'CP51932');
        } elseif ($encode == 'UTF-8') {
            $cont = mb_convert_encoding($cont, 'CP932', 'UTF-8');
        }
        $cont_area = htmlspecialchars($cont, ENT_QUOTES);
    }
    // プリント
    echo <<<EOHEADER
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
    <meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
    {$_conf['extra_headers_ht']}
    <title>{$ptitle}</title>
    <link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
</head>
<body onload="top.document.title=self.document.title;">

EOHEADER;
    P2Util::printInfoHtml();
    echo "<pre>";
    echo $cont_area;
    echo "</pre>";
    echo '</body></html>';
    return TRUE;
}
コード例 #13
0
 * rep2 - あぼーんワード編集インタフェース
 */
require_once './conf/conf.inc.php';
$_login->authorize();
// ユーザ認証
$filename = isset($_REQUEST['file']) ? $_REQUEST['file'] : '';
$csrfid = P2Util::getCsrfId(__FILE__ . $filename);
if (!empty($_POST['submit_save']) || !empty($_POST['submit_default'])) {
    if (!isset($_POST['csrfid']) or $_POST['csrfid'] != $csrfid) {
        p2die('不正なポストです');
    }
}
$writable_files = array('p2_aborn_thread.txt' => 'あぼーんスレッドタイトル', 'p2_aborn_name.txt' => 'あぼーんネーム', 'p2_aborn_mail.txt' => 'あぼーんメール', 'p2_aborn_msg.txt' => 'あぼーんメッセージ', 'p2_aborn_id.txt' => 'あぼーんID', 'p2_ng_name.txt' => 'NGネーム', 'p2_ng_mail.txt' => 'NGメール', 'p2_ng_msg.txt' => 'NGメッセージ', 'p2_ng_id.txt' => 'NGID');
if (!array_key_exists($filename, $writable_files)) {
    $files_st = implode(', ', array_keys($writable_files));
    p2die(basename($_SERVER['SCRIPT_NAME']) . " 先生の書き込めるファイルは、{$files_st} だけ!");
}
$path = $_conf['pref_dir'] . DIRECTORY_SEPARATOR . $filename;
//=====================================================================
// 前処理
//=====================================================================
// {{{ ■保存ボタンが押されていたら、設定を保存
if (!empty($_POST['submit_save'])) {
    $newdata = '';
    foreach ($_POST['nga'] as $na_info) {
        $a_word = strtr(trim($na_info['word'], "\t\r\n"), "\t\r\n", "   ");
        $a_bbs = strtr(trim($na_info['bbs'], "\t\r\n"), "\t\r\n", "   ");
        $a_tt = strtr(trim($na_info['tt'], "\t\r\n"), "\t\r\n", "   ");
        $a_time = strtr(trim($na_info['ht']), "\t\r\n", "   ");
        if ($a_time === '') {
            $a_time = '--';
コード例 #14
0
ファイル: edit_conf_user.php プロジェクト: xingskycn/p2-php
<?php

/**
 *  rep2 - ユーザ設定編集UI
 */
require_once __DIR__ . '/../init.php';
$_login->authorize();
// ユーザ認証
$csrfid = P2Util::getCsrfId(__FILE__);
if (!empty($_POST['submit_save']) || !empty($_POST['submit_default'])) {
    if (!isset($_POST['csrfid']) || $_POST['csrfid'] != $csrfid) {
        p2die('不正なポストです');
    }
}
define('P2_EDIT_CONF_USER_DEFAULT', 0);
define('P2_EDIT_CONF_USER_LONGTEXT', 1);
define('P2_EDIT_CONF_USER_HIDDEN', 2);
define('P2_EDIT_CONF_USER_DISABLED', 4);
define('P2_EDIT_CONF_USER_SKIPPED', 8);
define('P2_EDIT_CONF_USER_PASSWORD', 16);
define('P2_EDIT_CONF_FILE_ADMIN', 1024);
define('P2_EDIT_CONF_FILE_ADMIN_EX', 2048);
include P2_CONFIG_DIR . '/conf_user_def.inc.php';
//=====================================================================
// 前処理
//=====================================================================
// {{{ 保存ボタンが押されていたら、設定を保存
if (!empty($_POST['submit_save'])) {
    // 値の適正チェック、矯正
    // トリム
    $_POST['conf_edit'] = array_map('trim', $_POST['conf_edit']);
コード例 #15
0
ファイル: login.php プロジェクト: unpush/p2-php
    } elseif ($new_login_pass != $_POST['form_new_login_pass2']) {
        P2Util::pushInfoHtml("<p>rep2 error: {$p_str['password']} と {$p_str['password']} (確認) が一致しませんでした。</p>");
        // パスワード変更登録処理を行う
    } else {
        $crypted_login_pass = sha1($new_login_pass);
        $auth_user_cont = <<<EOP
<?php
\$rec_login_user_u = '{$_login->user_u}';
\$rec_login_pass_x = '{$crypted_login_pass}';
?>
EOP;
        FileCtl::make_datafile($_conf['auth_user_file'], $_conf['pass_perm']);
        // ファイルがなければ生成
        $fp = @fopen($_conf['auth_user_file'], 'wb');
        if (!$fp) {
            p2die("{$_conf['auth_user_file']} を保存できませんでした。認証ユーザ登録失敗。");
        }
        flock($fp, LOCK_EX);
        fputs($fp, $auth_user_cont);
        flock($fp, LOCK_UN);
        fclose($fp);
        P2Util::pushInfoHtml('<p>○認証パスワードを変更登録しました</p>');
    }
}
//====================================================
// 補助認証
//====================================================
$mobile = Net_UserAgent_Mobile::singleton();
$p_htm['auth_ctl'] = '';
// docomo認証
if ($mobile->isDoCoMo()) {
コード例 #16
0
ファイル: FileCtl.php プロジェクト: xingskycn/p2-php
 /**
  * ディレクトリがなければ作る
  *
  * @param string $apath
  * @param int $perm
  * @return bool
  */
 public static function mkdirRecursive($apath, $perm = null)
 {
     if (is_dir($apath)) {
         return true;
     } elseif (file_exists($apath)) {
         p2die("cannot mkdir, file already exists. ({$apath})");
     }
     // デフォルトのパーミッション
     $perm = intval($perm);
     if (($perm & 0777) === 0 || ($perm & ~0777) !== 0) {
         $default_perm = 0777 & umask();
         $perm = $default_perm ? $default_perm : 0777;
     }
     if (strlen($apath) === 0) {
         p2die("cannot mkdir. ({$apath})", 'ディレクトリ名が空白です。');
     }
     if (strpos($apath, P2_NULLBYTE) !== false) {
         $epath = str_replace(P2_NULLBYTE, '\\0', $apath);
         p2die("cannot mkdir. ({$epath})", 'ディレクトリ名にNULLバイトが含まれています。');
     }
     if (!@mkdir($apath, $perm, true)) {
         p2die("cannot mkdir. ({$apath})");
     }
     return true;
 }
コード例 #17
0
ファイル: P2Util.php プロジェクト: nyarla/fluxflex-rep2ex
 /**
  * P2Clientクラスのインスタンスを生成する
  *
  * @param void
  * @return P2Client
  */
 public static function getP2Client()
 {
     global $_conf;
     if (!is_dir($_conf['db_dir'])) {
         FileCtl::mkdirRecursive($_conf['db_dir']);
     }
     try {
         return new P2Client("http://{$_conf['p2_2ch_host']}/p2/", $_conf['p2_2ch_mail'], $_conf['p2_2ch_pass'], $_conf['db_dir'], (bool) $_conf['p2_2ch_ignore_cip']);
     } catch (P2Exception $e) {
         p2die($e->getMessage());
     }
 }
コード例 #18
0
ファイル: read_res_hist.php プロジェクト: poppen/p2
if (!file_exists($_conf['p2_res_hist_dat'])) {
    P2Util::printSimpleHtml($karappoMsgHtml);
    exit;
}
$res_hist_dat_size = filesize($_conf['p2_res_hist_dat']);
$logSizeSt = P2Util::getTranslatedUnitFileSize($res_hist_dat_size);
$maxLogSize = 0;
//1024*1024*10;
$maxLogSizeSt = P2Util::getTranslatedUnitFileSize($maxLogSize);
if ($maxLogSize and $res_hist_dat_size > $maxLogSize) {
    P2Util::printSimpleHtml(sprintf('書き込みログ容量(%s/%s)が大き過ぎるため、表\示できません。<br>
            %sのページより、書き込みログの一括削除を行って下さい。', hs($logSizeSt), hs($maxLogSizeSt), P2View::tagA($_conf['editpref_php'], hs('設定管理'), array('target' => 'subject'))));
    exit;
}
if (false === ($datlines = file($_conf['p2_res_hist_dat']))) {
    p2die('書き込み履歴ログファイルを読み込めませんでした');
} elseif (!$datlines) {
    P2Util::printSimpleHtml($karappoMsgHtml);
    exit;
}
// ファイルの下に記録されているものが新しいので反転させる
$datlines = array_reverse($datlines);
$datlines_num = count($datlines);
$ResHist = new ResHist();
// HTMLプリント用変数
$toolbar_ht = <<<EOP
\tチェックした項目を<input type="submit" name="submit" value="{$deletemsg_st}">
\t全てのチェックボックスを 
\t<input type="button" onclick="hist_checkAll(true)" value="選択"> 
\t<input type="button" onclick="hist_checkAll(false)" value="解除">
EOP;
コード例 #19
0
ファイル: read_new_i.php プロジェクト: poppen/p2
}
//==================================================================
// 変数
//==================================================================
$GLOBALS['rnum_all_range'] = $_conf['k_rnum_range'];
$GLOBALS['word'] = null;
$sb_view = "shinchaku";
$newtime = date("gis");
$host = geti($_GET['host'], geti($_POST['host']));
$bbs = geti($_GET['bbs'], geti($_POST['bbs']));
$spmode = geti($_GET['spmode'], geti($_POST['spmode']));
if ((!$host || !isset($bbs)) && !isset($spmode)) {
    p2die('必要な引数が指定されていません');
}
if ($host && P2Validate::host($host) || $bbs && P2Validate::bbs($bbs) || $spmode && P2Validate::spmode($spmode)) {
    p2die('不正な引数です');
}
$hr = P2View::getHrHtmlK();
//====================================================================
// メイン
//====================================================================
register_shutdown_function('saveMatomeCache');
$GLOBALS['_read_new_html'] = '';
ob_start();
$aThreadList = new ThreadList();
// 板とモードのセット
if ($spmode) {
    if ($spmode == "taborn" or $spmode == "soko") {
        $aThreadList->setIta($host, $bbs, P2Util::getItaName($host, $bbs));
    }
    $aThreadList->setSpMode($spmode);
コード例 #20
0
ファイル: post_form.php プロジェクト: nyarla/fluxflex-rep2ex
<?php

/**
 * rep2 - レス書き込みフォーム
 */
require_once './conf/conf.inc.php';
$_login->authorize();
// ユーザ認証
//==================================================
// 変数
//==================================================
if (empty($_GET['host'])) {
    // 引数エラー
    p2die('host が指定されていません');
} else {
    $host = $_GET['host'];
}
$bbs = isset($_GET['bbs']) ? $_GET['bbs'] : '';
$key = isset($_GET['key']) ? $_GET['key'] : '';
$rescount = isset($_GET['rescount']) ? intval($_GET['rescount']) : 1;
$popup = isset($_GET['popup']) ? intval($_GET['popup']) : 0;
$itaj = P2Util::getItaName($host, $bbs);
if (!$itaj) {
    $itaj = $bbs;
}
$itaj_hd = htmlspecialchars($itaj, ENT_QUOTES, 'Shift_JIS', false);
$ttitle_en = isset($_GET['ttitle_en']) ? $_GET['ttitle_en'] : '';
$ttitle = strlen($ttitle_en) > 0 ? UrlSafeBase64::decode($ttitle_en) : '';
$ttitle_hd = htmlspecialchars($ttitle, ENT_QUOTES);
$key_idx = P2Util::idxDirOfHostBbs($host, $bbs) . $key . '.idx';
// フォームのオプション読み込み
コード例 #21
0
ファイル: tgrepc.php プロジェクト: unpush/p2-php
function tgrep_search($query)
{
    global $_conf;
    $client = new HTTP_Client();
    $client->setDefaultHeader('User-Agent', 'p2-tgrep-client');
    $code = $client->get($_conf['expack.tgrep_url'] . '?' . $query);
    if (PEAR::isError($code)) {
        p2die($code->getMessage());
    } elseif ($code != 200) {
        p2die("HTTP Error - {$code}");
    }
    $response = $client->currentResponse();
    $result = unserialize($response['body']);
    if (!$result) {
        p2die('Error: 検索結果の展開に失敗しました。');
    }
    return $result;
}
コード例 #22
0
ファイル: subject.php プロジェクト: xingskycn/p2-php
/**
 * $subject_keys をシリアライズして保存する
 */
function saveSubjectKeys($subject_keys, $sb_keys_txt, $sb_keys_b_txt)
{
    global $_conf;
    //$GLOBALS['debug'] && $GLOBALS['profiler']->enterSection('saveSubjectKeys()');
    //if (file_exists($sb_keys_b_txt)) { unlink($sb_keys_b_txt); }
    if (empty($_REQUEST['norefresh']) && !empty($subject_keys)) {
        if (file_exists($sb_keys_txt)) {
            FileCtl::make_datafile($sb_keys_b_txt);
            copy($sb_keys_txt, $sb_keys_b_txt);
        } else {
            FileCtl::make_datafile($sb_keys_txt);
        }
        if ($sb_keys_cont = serialize($subject_keys)) {
            if (FileCtl::file_write_contents($sb_keys_txt, $sb_keys_cont) === false) {
                p2die('cannot write file.');
            }
        }
    }
    //$GLOBALS['debug'] && $GLOBALS['profiler']->leaveSection('saveSubjectKeys()');
    return true;
}
コード例 #23
0
ファイル: read_new_k.php プロジェクト: nyarla/fluxflex-rep2ex
    $host = $_GET['host'];
} elseif (isset($_POST['host'])) {
    $host = $_POST['host'];
}
if (isset($_GET['bbs'])) {
    $bbs = $_GET['bbs'];
} elseif (isset($_POST['bbs'])) {
    $bbs = $_POST['bbs'];
}
if (isset($_GET['spmode'])) {
    $spmode = $_GET['spmode'];
} elseif (isset($_POST['spmode'])) {
    $spmode = $_POST['spmode'];
}
if (!(isset($host) && isset($bbs)) && !isset($spmode)) {
    p2die('必要な引数が指定されていません');
}
// 未読数制限
if (isset($_GET['unum_limit'])) {
    $unum_limit = (int) $_GET['unum_limit'];
} elseif (isset($_POST['unum_limit'])) {
    $unum_limit = (int) $_POST['unum_limit'];
} else {
    $unum_limit = 0;
}
//=================================================
// あぼーん&NGワード設定読み込み
//=================================================
$GLOBALS['ngaborns'] = NgAbornCtl::loadNgAborns();
//====================================================================
// メイン
コード例 #24
0
ファイル: login.php プロジェクト: poppen/p2
/**
 * パスワード変更登録処理
 *
 * @return  void or P2Util::pushInfoHtml() or die
 */
function _preExecChangePass()
{
    global $_login;
    if (isset($_POST['form_login_pass'])) {
        // 入力チェック
        if (!isset($_POST['csrfid']) || $_POST['csrfid'] != P2Util::getCsrfId()) {
            P2Util::pushInfoHtml('<p>p2 error: 不正なPOSTです</p>');
        } elseif (!preg_match('/^[0-9a-zA-Z_]+$/', $_POST['form_login_pass'])) {
            P2Util::pushInfoHtml('<p>p2 error: パスワードを半角英数字で入力して下さい。</p>');
            // パスワード変更登録処理を行う
        } else {
            if (!$_login->savaRegistUserPass($_login->user_u, $_POST['form_login_pass'])) {
                p2die('ユーザ登録処理を完了できませんでした。');
            }
            P2Util::pushInfoHtml('<p>○認証パスワードを変更登録しました</p>');
        }
    }
}
コード例 #25
0
ファイル: ic2_manager.php プロジェクト: xingskycn/p2-php
}
// }}}
// {{{ 初期化
// ライブラリ読み込み
require_once P2EX_LIB_DIR . '/ImageCache2/bootstrap.php';
// 設定読み込み
$ini = ic2_loadconfig();
if ($ini['Viewer']['cache'] && file_exists($_conf['iv2_cache_db_path'])) {
    $viewer_cache_exists = true;
} else {
    $viewer_cache_exists = false;
}
// データベースに接続
$db = DB::connect($ini['General']['dsn']);
if (DB::isError($db)) {
    p2die($db->getMessage());
}
// テンプレートエンジン初期化
$_flexy_options =& PEAR5::getStaticProperty('HTML_Template_Flexy', 'options');
$_flexy_options = array('locale' => 'ja', 'charset' => 'Shift_JIS', 'compileDir' => $_conf['compile_dir'] . DIRECTORY_SEPARATOR . 'ic2', 'templateDir' => P2EX_LIB_DIR . '/ImageCache2/templates', 'numberFormat' => '');
$flexy = new HTML_Template_Flexy();
// }}}
// {{{ データベース操作・ファイル削除
if (isset($_POST['action'])) {
    switch ($_POST['action']) {
        // 画像を削除する
        case 'dropZero':
        case 'dropAborn':
            if ($_POST['action'] == 'dropZero') {
                // ランク=0 の画像を削除する
                $where = $db->quoteIdentifier('rank') . ' = 0';
コード例 #26
0
ファイル: spm_k.php プロジェクト: xingskycn/p2-php
kspDetectThread();
// global $host, $bbs, $key, $ls
$aThread = new Thread();
// hostを分解してidxファイルのパスを求める
if (!isset($aThread->keyidx)) {
    $aThread->setThreadPathInfo($host, $bbs, $key);
}
$aThread->itaj = P2Util::getItaName($host, $bbs);
if (!$aThread->itaj) {
    $aThread->itaj = $aThread->bbs;
}
// idxファイルがあれば読み込む
if ($lines = FileCtl::file_read_lines($aThread->keyidx, FILE_IGNORE_NEW_LINES)) {
    $idx_data = explode('<>', $lines[0]);
} else {
    p2die('指定されたスレッドのidxがありません。');
}
$aThread->getThreadInfoFromIdx();
//=================================================
// 表示用変数を設定
//=================================================
$ptitle_ht = $aThread->ttitle_hd;
$thread_url = "{$_conf['read_php']}?host={$host}&amp;bbs={$bbs}&amp;key={$key}{$_conf['k_at_a']}";
$params = array();
if (!empty($_GET['from_read_new'])) {
    $params['from_read_new'] = '1';
}
$default = !empty($_GET['spm_default']) ? intval($_GET['spm_default']) : '';
//=================================================
// 表示
//=================================================
コード例 #27
0
ファイル: ic2.php プロジェクト: nyarla/fluxflex-rep2ex
<?php

/**
 * ImageCache2 - 画像のダウンロード・サムネイル作成
 */
// {{{ p2基本設定読み込み&認証
define('P2_OUTPUT_XHTML', 1);
require_once './conf/conf.inc.php';
$_login->authorize();
if (!$_conf['expack.ic2.enabled']) {
    p2die('ImageCache2は無効です。', 'conf/conf_admin_ex.inc.php の設定を変えてください。');
}
// }}}
// {{{ 初期化
// ライブラリ読み込み
require_once 'HTTP/Client.php';
require_once P2EX_LIB_DIR . '/ic2/bootstrap.php';
// 受け付けるMIMEタイプ
$mimemap = array('image/jpeg' => '.jpg', 'image/png' => '.png', 'image/gif' => '.gif');
// 設定ファイル読み込み
$ini = ic2_loadconfig();
// }}}
// {{{ prepare
// パラメータを設定
$id = isset($_REQUEST['id']) ? intval($_REQUEST['id']) : null;
$uri = isset($_REQUEST['uri']) ? $_REQUEST['uri'] : (isset($_REQUEST['url']) ? $_REQUEST['url'] : null);
$file = isset($_REQUEST['file']) ? $_REQUEST['file'] : null;
$force = !empty($_REQUEST['f']);
// 強制更新
$thumb = isset($_REQUEST['t']) ? intval($_REQUEST['t']) : IC2_Thumbnailer::SIZE_SOURCE;
// サムネイルタイプ
コード例 #28
0
ファイル: BrdMenu.php プロジェクト: xingskycn/p2-php
 /**
  * brdファイルを生成する
  *
  * @return    string    brdファイルのパス
  */
 public function makeBrdFile($cachefile)
 {
     global $_conf, $word;
     $p2brdfile = $cachefile . ".p2.brd";
     FileCtl::make_datafile($p2brdfile);
     $data = FileCtl::file_read_lines($cachefile);
     $cont = '';
     $this->setBrdMatch($cachefile);
     // パターンマッチ形式を登録
     $this->setBrdList($data);
     // カテゴリーと板をセット
     if ($this->categories) {
         foreach ($this->categories as $cate) {
             if ($cate->num > 0) {
                 $cont .= $cate->name . "\t0\n";
                 foreach ($cate->menuitas as $mita) {
                     $cont .= "\t{$mita->host}\t{$mita->bbs}\t{$mita->itaj}\n";
                 }
             }
         }
     }
     if ($cont) {
         if (FileCtl::file_write_contents($p2brdfile, $cont) === false) {
             p2die("{$p2brdfile} を更新できませんでした");
         }
         return $p2brdfile;
     } else {
         if (!$word) {
             P2Util::pushInfoHtml("<p>p2 error: {$cachefile} から板メニューを生成することはできませんでした。</p>");
         }
         return false;
     }
 }
コード例 #29
0
ファイル: parser.inc.php プロジェクト: unpush/p2-php
/**
 * Atom 0.3 を RSS 1.0 に変換する(共通)
 */
function atom_to_rss($input, $stylesheet, $output)
{
    global $_conf;
    // 保存用ディレクトリがなければつくる
    if (!is_dir(dirname($output))) {
        FileCtl::mkdirFor($output);
    }
    // 変換
    if (extension_loaded('xslt')) {
        // PHP4, Sablotron
        $rss_content = atom_to_rss_by_xslt($input, $stylesheet, $output);
    } elseif (extension_loaded('xsl')) {
        // PHP5, LibXSLT
        $rss_content = atom_to_rss_by_xsl($input, $stylesheet, $output);
    }
    // チェック
    if (!$rss_content) {
        if (file_exists($output)) {
            unlink($output);
        }
        return FALSE;
    }
    chmod($output, $_conf['expack.rss.setting_perm']);
    // FreeBSD 5.3 Ports の textproc/php4-xslt ではバグのせいか変換の際に名前空間が失われるので補正する
    // (php4-xslt-4.3.10_2, expat-1.95.8, libiconv-1.9.2_1, Sablot-1.0.1)
    // バグのない環境なら何も変わらない・・・はず。
    $rss_fix_patterns = array('/<(\\/)?(RDF|Seq|li)( .+?)?>/u' => '<$1rdf:$2$3>', '/<(channel|item) about=/u' => '<$1 rdf:about=', '/<(\\/)?(encoded)>/u' => '<$1content:$2>', '/<(\\/)?(creator|subject|date|pubdate)>/u' => '<$1dc:$2>');
    $rss_fixed = preg_replace(array_keys($rss_fix_patterns), array_values($rss_fix_patterns), $rss_content);
    if (md5($rss_content) != md5($rss_fixed)) {
        $fp = @fopen($output, 'wb') or p2die("cannot write. ({$output})");
        flock($fp, LOCK_EX);
        fwrite($fp, $rss_fixed);
        flock($fp, LOCK_UN);
        fclose($fp);
    }
    return TRUE;
}
コード例 #30
0
ファイル: setfav.inc.php プロジェクト: xingskycn/p2-php
/**
 * お気にスレをセットする
 *
 * @param   string      $host
 * @param   string      $bbs
 * @param   string      $key
 * @param   int|string  $setfavita  0(解除), 1(追加), 2(トグル), top, up, down, bottom
 * @param   string      $ttitle
 * @param   int|null    $setnum
 * @return  bool
 */
function setFav($host, $bbs, $key, $setfav, $ttitle = null, $setnum = null)
{
    global $_conf;
    //==================================================================
    // key.idx
    //==================================================================
    // idxfileのパスを求めて
    $idxfile = P2Util::idxDirOfHostBbs($host, $bbs) . $key . '.idx';
    // 板ディレクトリが無ければ作る
    // FileCtl::mkdirFor($idxfile);
    // 既にidxデータがあるなら読み込む
    if ($lines = FileCtl::file_read_lines($idxfile, FILE_IGNORE_NEW_LINES)) {
        $data = explode('<>', $lines[0]);
    } else {
        $data = array_fill(0, 12, '');
        if (is_string($ttitle) && strlen($ttitle)) {
            $data[0] = p2h($ttitle, false);
        }
    }
    // {{{ スレッド.idx 記録
    if (($setfav == '0' || $setfav == '1') && $_conf['favlist_idx'] == $_conf['orig_favlist_idx']) {
        // お気にスレから外した結果、idxの意味がなくなれば削除する
        if ($setfav == '0' and !$data[3] && !$data[4] && $data[9] <= 1) {
            @unlink($idxfile);
        } else {
            $sar = array($data[0], $key, $data[2], $data[3], $data[4], $data[5], $setfav, $data[7], $data[8], $data[9], $data[10], $data[11], $data[12]);
            P2Util::recKeyIdx($idxfile, $sar);
        }
    }
    // }}}
    //==================================================================
    // favlist.idx
    //==================================================================
    if (!is_null($setnum) && $_conf['expack.misc.multi_favs']) {
        if (0 < $setnum && $setnum <= $_conf['expack.misc.favset_num']) {
            $favlist_idx = $_conf['pref_dir'] . sprintf('/p2_favlist%d.idx', $setnum);
        } else {
            $favlist_idx = $_conf['orig_favlist_idx'];
        }
    } else {
        $favlist_idx = $_conf['favlist_idx'];
    }
    // favlistファイルがなければ生成
    FileCtl::make_datafile($favlist_idx);
    // favlist読み込み
    $favlines = FileCtl::file_read_lines($favlist_idx, FILE_IGNORE_NEW_LINES);
    //================================================
    // 処理
    //================================================
    $neolines = array();
    $before_line_num = 0;
    $was_set = false;
    // 最初に重複要素を削除しておく
    if (!empty($favlines)) {
        $i = -1;
        foreach ($favlines as $l) {
            $i++;
            $lar = explode('<>', $l);
            // 重複回避
            if ($lar[1] == $key && $lar[11] == $bbs) {
                $before_line_num = $i;
                // 移動前の行番号をセット
                $was_set = true;
                continue;
                // keyのないものは不正データなのでスキップ
            } elseif (!$lar[1]) {
                continue;
            } else {
                $neolines[] = $l;
            }
        }
    }
    if ($setfav == 2) {
        $setfav = $was_set ? 0 : 1;
    }
    // 記録データ設定
    if ($setfav) {
        if (!function_exists('getSetPosLines')) {
            include P2_LIB_DIR . '/getsetposlines.inc.php';
        }
        $newdata = "{$data[0]}<>{$key}<>{$data[2]}<>{$data[3]}<>{$data[4]}<>{$data[5]}<>1<>{$data[7]}<>{$data[8]}<>{$data[9]}<>{$host}<>{$bbs}";
        $rec_lines = getSetPosLines($neolines, $newdata, $before_line_num, $setfav);
    } else {
        $rec_lines = $neolines;
    }
    $cont = '';
    if (!empty($rec_lines)) {
        foreach ($rec_lines as $l) {
            $cont .= $l . "\n";
        }
    }
    // 書き込む
    if (FileCtl::file_write_contents($favlist_idx, $cont) === false) {
        p2die('cannot write file.');
    }
    //================================================
    // お気にスレ共有
    //================================================
    if ($_conf['join_favrank'] && $_conf['favlist_idx'] == $_conf['orig_favlist_idx']) {
        if ($setfav == "0") {
            $act = "out";
        } elseif ($setfav == "1") {
            $act = "add";
        } else {
            return;
        }
        $itaj = P2Util::getItaName($host, $bbs);
        $post = array("host" => $host, "bbs" => $bbs, "key" => $key, "ttitle" => $data[0], "ita" => $itaj, "act" => $act);
        postFavRank($post);
    }
    return true;
}