Esempio n. 1
0
 /**
  * コンストラクタ
  *
  * @param string $filename
  * @param bool $allow_linebreaks
  */
 public function __construct($filename, $allow_linebreaks = false)
 {
     if (!file_exists($filename)) {
         FileCtl::make_datafile($filename);
         $this->_data = array();
     } else {
         $content = FileCtl::file_read_contents($filename);
         if (!$content || !is_array($this->_data = @unserialize($content))) {
             $this->_data = array();
         }
     }
     $this->_filename = $filename;
     $this->_allowLinebreaks = $allow_linebreaks;
 }
Esempio n. 2
0
/**
 * ファイル内容を読み込んで表示する関数
 */
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;
}
Esempio n. 3
0
/**
 * ファイル内容を読み込んで表示する関数
 */
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;
}
Esempio n. 4
0
/**
 * Atom 0.3 を RSS 1.0 に変換する(PHP5, DOM & XSL)
 */
function atom_to_rss_by_xsl($input, $stylesheet, $output)
{
    $xmlDoc = new DomDocument();
    if ($xmlDoc->load(realpath($input))) {
        $xslDoc = new DomDocument();
        $xslDoc->load(realpath($stylesheet));
        $proc = new XSLTProcessor();
        $proc->importStyleSheet($xslDoc);
        $rssDoc = $proc->transformToDoc($xmlDoc);
        $rssDoc->save($output);
        $rss_content = FileCtl::file_read_contents($output);
    } else {
        $rss_content = null;
    }
    if (!$rss_content) {
        P2Util::pushInfoHtml('<p>p2 error: XSL - AtomをRSSに変換できませんでした。</p>');
        return FALSE;
    }
    return $rss_content;
}
Esempio n. 5
0
/**
 * $subject_keys を取得する
 */
function getSubjectKeys($sb_keys_txt, $sb_keys_b_txt)
{
    // 更新しない場合は、2つ前のと1つ前のを比べて、新規スレを調べる
    if (!empty($_REQUEST['norefresh']) || empty($_REQUEST['refresh']) && isset($_REQUEST['word'])) {
        $file = $sb_keys_b_txt;
    } else {
        $file = $sb_keys_txt;
    }
    if (file_exists($file) && ($cont = FileCtl::file_read_contents($file))) {
        if (is_array($subject_keys = @unserialize($cont))) {
            return $subject_keys;
        }
    }
    return array();
}
Esempio n. 6
0
 /**
  * dat形式(<>)の書き込み履歴をデータPHP形式(TAB)に変換する
  */
 public static function transResHistLogDatToPhp()
 {
     global $_conf;
     // 書き込み履歴を記録しない設定の場合は何もしない
     if ($_conf['res_write_rec'] == 0) {
         return true;
     }
     // p2_res_hist.dat.php がなくて、p2_res_hist.dat が読み込み可能であったら
     if (!file_exists($_conf['res_hist_dat_php']) and is_readable($_conf['res_hist_dat'])) {
         // 読み込んで
         if ($cont = FileCtl::file_read_contents($_conf['res_hist_dat'])) {
             // <>区切りからタブ区切りに変更する
             // まずタブを全て外して
             $cont = str_replace("\t", "", $cont);
             // <>をタブに変換して
             $cont = str_replace("<>", "\t", $cont);
             // データPHP形式で保存
             DataPhp::writeDataPhp($_conf['res_hist_dat_php'], $cont, $_conf['res_write_perm']);
         }
     }
     return true;
 }
Esempio n. 7
0
 /**
  * コンストラクタ
  *
  * @param void
  * @return ResFilter|null
  */
 public static function restore()
 {
     global $_conf;
     $cachefile = $_conf['pref_dir'] . '/p2_res_filter.txt';
     $res_filter_cont = FileCtl::file_read_contents($cachefile);
     if ($res_filter_cont) {
         $filter = self::configure(unserialize($res_filter_cont));
     } else {
         $filter = null;
     }
     return $filter;
 }
Esempio n. 8
0
 /**
  * データphp形式のファイルで、末尾にデータを追加する
  */
 public static function putDataPhp($data_php, $cont, $perm = 0606, $ncheck = false)
 {
     if ($cont === "") {
         return true;
     }
     $pre_quote = preg_quote(DataPhp::getPre());
     $hip_quote = preg_quote(DataPhp::getHip());
     $cont_esc = DataPhp::escapeDataPhp($cont);
     $old_cont = FileCtl::file_read_contents($data_php);
     if ($old_cont) {
         // ファイルが、データphp形式以外の場合は、何もせずにfalseを返す
         if (!preg_match("/^\\s*<\\?php\\s\\/\\*/", $old_cont)) {
             trigger_error('putDataPhp() file is broken.', E_USER_WARNING);
             return false;
         }
         $old_cut = preg_replace('{' . $hip_quote . '.*$}s', '', $old_cont);
         // 指定に応じて、古い内容の末尾が改行でなければ、改行を追加する
         if ($ncheck) {
             if (substr($old_cut, -1) != "\n") {
                 $old_cut .= "\n";
             }
         }
         $new_cont = $old_cut . $cont_esc . DataPhp::getHip();
         // データ内容がまだなければ、新規データphp
     } else {
         $new_cont = DataPhp::getPre() . $cont_esc . DataPhp::getHip();
     }
     // ファイルがなければ生成
     FileCtl::make_datafile($data_php, $perm);
     // 書き込む
     $fp = @fopen($data_php, 'wb') or p2die("{$data_php} を更新できませんでした");
     flock($fp, LOCK_EX);
     $last = ignore_user_abort(1);
     ftruncate($fp, 0);
     fwrite($fp, $new_cont);
     ignore_user_abort($last);
     flock($fp, LOCK_UN);
     fclose($fp);
     return true;
 }
Esempio n. 9
0
    if ($pre_sb_cont = FileCtl::file_read_contents($p2_sb_keys_txt)) {
        $pre_subject_keys = @unserialize($pre_sb_cont);
        if (!is_array($pre_subject_keys)) {
            $pre_subject_keys = array();
        }
        unset($pre_sb_cont);
    } else {
        $pre_subject_keys = array();
    }
} else {
    $pre_subject_keys = array();
}
// }}}
// {{{ itaj 設定
$itaj = null;
if ($p2_setting_cont = FileCtl::file_read_contents($p2_setting_txt)) {
    $p2_setting = @unserialize($p2_setting_cont);
    if (is_array($p2_setting) && array_key_exists('itaj', $p2_setting)) {
        $itaj = $p2_setting['itaj'];
    }
}
if ($itaj === null || $itaj === '') {
    $itaj = P2Util::getItaName($host, $bbs);
}
// }}}
//============================================================
// メイン
//============================================================
$aThreadList = new ThreadList();
// 板とモードのセット ===================================
if ($spmode) {
Esempio n. 10
0
/**
 * したらばJBBSの rawmode.cgi を読んで、datに保存する(2ch風に整形)
 */
function shitarabaDownload(ThreadRead $aThread)
{
    $GLOBALS['machi_latest_num'] = '';
    // {{{ 既得datの取得レス数が適性かどうかを念のためチェック
    if (file_exists($aThread->keydat)) {
        $dls = FileCtl::file_read_lines($aThread->keydat);
        if (!$dls || sizeof($dls) != $aThread->gotnum) {
            // echo 'bad size!<br>';
            unlink($aThread->keydat);
            $aThread->gotnum = 0;
        }
    } else {
        $aThread->gotnum = 0;
    }
    // }}}
    if ($aThread->gotnum == 0) {
        $file_append = false;
        $START = 1;
    } else {
        $file_append = true;
        $START = $aThread->gotnum + 1;
    }
    // JBBS@したらば
    if (P2Util::isHostJbbsShitaraba($aThread->host)) {
        // したらばのlivedoor移転に対応。読込先をlivedoorとする。
        $host = P2Util::adjustHostJbbs($aThread->host);
        list($host, $category, ) = explode('/', $host);
        $machiurl = "http://{$host}/bbs/rawmode.cgi/{$category}/{$aThread->bbs}/{$aThread->key}/{$START}-";
    }
    $tempfile = $aThread->keydat . '.dat.temp';
    FileCtl::mkdirFor($tempfile);
    $machiurl_res = P2Util::fileDownload($machiurl, $tempfile);
    if ($machiurl_res->isError()) {
        $aThread->diedat = true;
        return false;
    }
    // {{{ したらばならEUCをSJISに変換
    if (P2Util::isHostJbbsShitaraba($aThread->host)) {
        $temp_data = FileCtl::file_read_contents($tempfile);
        $temp_data = mb_convert_encoding($temp_data, 'CP932', 'CP51932');
        if (FileCtl::file_write_contents($tempfile, $temp_data) === false) {
            p2die('cannot write file.');
        }
    }
    // }}}
    $mlines = FileCtl::file_read_lines($tempfile);
    // 一時ファイルを削除する
    unlink($tempfile);
    // ↓rawmode.cgiではこれは出ないだろう
    /*
    // (JBBS)ERROR!: スレッドがありません。過去ログ倉庫にもありません。
    if (stripos($mlines[0], 'ERROR') === 0) {
        $aThread->getdat_error_msg_ht .= $mlines[0];
        $aThread->diedat = true;
        return false;
    }
    */
    // {{{ DATを書き込む
    if ($mdatlines = shitarabaDatTo2chDatLines($mlines)) {
        $file_append = $file_append ? FILE_APPEND : 0;
        $cont = '';
        for ($i = $START; $i <= $GLOBALS['machi_latest_num']; $i++) {
            if ($mdatlines[$i]) {
                $cont .= $mdatlines[$i];
            } else {
                $cont .= "あぼーん<>あぼーん<>あぼーん<>あぼーん<>\n";
            }
        }
        if (FileCtl::file_write_contents($aThread->keydat, $cont, $file_append) === false) {
            p2die('cannot write file.');
        }
    }
    // }}}
    $aThread->isonline = true;
    return true;
}