/** * コンストラクタ * * @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; }
/** * ファイル内容を読み込んで表示する関数 */ 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; }
/** * ファイル内容を読み込んで表示する関数 */ 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; }
/** * 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; }
/** * $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(); }
/** * 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; }
/** * コンストラクタ * * @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; }
/** * データ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; }
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) {
/** * したらば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; }