本文整理匯總了PHP中FileCtl::mkdirFor方法的典型用法代碼示例。如果您正苦於以下問題:PHP FileCtl::mkdirFor方法的具體用法?PHP FileCtl::mkdirFor怎麽用?PHP FileCtl::mkdirFor使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類FileCtl
的用法示例。
在下文中一共展示了FileCtl::mkdirFor方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。
示例1: downloadDatCha2
/**
* チャットちゃんねる cha2.net の dat を読んで保存する関數
* (差分取得には未対応)
* ※2ch互換として読み込んでいるので現在この関數は利用はしていない。@see TreadRead->downloadDat()
*
* @access public
* @return boolean
*/
function downloadDatCha2(&$ThreadRead)
{
// {{{ 既得datの取得レス數が適性かどうかを念のためチェック
if (file_exists($ThreadRead->keydat)) {
$dls = file($ThreadRead->keydat);
if (sizeof($dls) != $ThreadRead->gotnum) {
// echo 'bad size!<br>';
unlink($ThreadRead->keydat);
$ThreadRead->gotnum = 0;
}
} else {
$ThreadRead->gotnum = 0;
}
// }}}
if ($ThreadRead->gotnum == 0) {
$file_append = false;
$START = 1;
} else {
$file_append = true;
$START = $ThreadRead->gotnum + 1;
}
// チャットちゃんねる
$cha2url = "http://{$ThreadRead->host}/cgi-bin/{$ThreadRead->bbs}/dat/{$ThreadRead->key}.dat";
$datfile = $ThreadRead->keydat;
FileCtl::mkdirFor($datfile);
$cha2url_res = P2Util::fileDownload($cha2url, $datfile);
if (!$cha2url_res or !$cha2url_res->is_success()) {
$ThreadRead->diedat = true;
return false;
}
$ThreadRead->isonline = true;
return true;
}
示例2: __construct
/**
* コンストラクタ
*
* @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}).");
}
}
示例3: _getKVS
/**
* データを保存する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;
}
示例4: _cachedGetHost
/**
* cachedGetHostByAddr/cachedGetHostByName のキャッシュエンジン
*/
private static function _cachedGetHost($remote, $function)
{
global $_conf;
$lifeTime = (int) $GLOBALS['_HOSTCHKCONF']['gethostby_lifetime'];
if ($lifeTime <= 0) {
return $function($remote);
}
if (!file_exists($_conf['hostcheck_db_path'])) {
FileCtl::mkdirFor($_conf['hostcheck_db_path']);
}
$kvs = P2KeyValueStore::getStore($_conf['hostcheck_db_path']);
$result = $kvs->get($remote, $lifeTime);
if ($result !== null) {
return $result;
}
$result = $function($remote);
$kvs->set($remote, $result);
return $result;
}
示例5: make_datafile
/**
* ファイルがなければ生成し、書き込み権限がなければパーミッションを調整する
* (既にファイルがあり、書き込み権限もある場合は、何もしない。※modifiedの更新もしない)
*
* @static
* @access public
*
* @param boolean $die true なら、エラーでただちに終了する
* @return boolean 問題がなければtrue
*/
function make_datafile($file, $perm = 0606, $die = true)
{
$me = __CLASS__ . "::" . __FUNCTION__ . "()";
// 引數チェック
if (strlen($file) == 0) {
trigger_error("{$me}, file is null", E_USER_WARNING);
return false;
}
if (empty($perm)) {
trigger_error("{$me}, empty perm. ( {$file} )", E_USER_WARNING);
$die and die("Error: {$me}, empty perm");
return false;
}
// ファイルがなければ
if (!file_exists($file)) {
if (!FileCtl::mkdirFor($file)) {
$die and die("Error: {$me} -> FileCtl::mkdirFor() failed.");
return false;
}
if (!touch($file)) {
$die and die("Error: {$me} -> touch() failed.");
return false;
}
chmod($file, $perm);
// ファイルがあれば
} else {
if (!is_writable($file)) {
if (false === ($cont = file_get_contents($file))) {
$die and die("Error: {$me} -> file_get_contents() failed.");
return false;
}
unlink($file);
if (false === file_put_contents($file, $cont, LOCK_EX)) {
// 備忘メモ: $file が nullの時、file_put_contents() はfalseを返すがwaringは出さないので注意
// ここでは $file は約束されているが…
$die and die("Error: {$me} -> file_put_contents() failed.");
return false;
}
chmod($file, $perm);
}
}
return true;
}
示例6: checkUpdatan
/**
* オンライン上のrep2-expack最新版をチェックする
*
* @return string HTML
*/
function checkUpdatan()
{
global $_conf, $p2web_url_r, $expack_url_r, $expack_dl_url_r, $expack_hist_url_r;
$no_p2status_dl_flag = false;
$ver_txt_url = $_conf['expack.web_url'] . 'version.txt';
$cachefile = P2Util::cacheFileForDL($ver_txt_url);
FileCtl::mkdirFor($cachefile);
if (file_exists($cachefile)) {
// キャッシュの更新が指定時間以內なら
if (filemtime($cachefile) > time() - $_conf['p2status_dl_interval'] * 86400) {
$no_p2status_dl_flag = true;
}
}
if (empty($no_p2status_dl_flag)) {
P2Util::fileDownload($ver_txt_url, $cachefile);
}
$ver_txt = FileCtl::file_read_lines($cachefile, FILE_IGNORE_NEW_LINES);
$update_ver = $ver_txt[0];
$kita = 'キタ━━━━(゚∀゚)━━━━!!!!!!';
//$kita = 'キタ*・゚゚・*:.。..。.:*・゚(゚∀゚)゚・*:.。. .。.:*・゚゚・*!!!!!';
$newversion_found_html = '';
if ($update_ver && version_compare($update_ver, $_conf['p2version'], '>')) {
$newversion_found_html = <<<EOP
<div class="kakomi">
{$kita}<br>
オンライン上に 拡張パック の最新バージョンを見つけますた。<br>
rep2-expack rev.{$update_ver} → <a href="{$expack_dl_url_r}"{$_conf['ext_win_target_at']}>ダウンロード</a> / <a href="{$expack_hist_url_r}"{$_conf['ext_win_target_at']}>更新記録</a>
</div>
<hr class="invisible">
EOP;
}
return $newversion_found_html;
}
示例7: loadAllFavSet
/**
* すべてのお気にスレ・お気に板を読み込む
*
* @param bool $force
* @return void
*/
public static function loadAllFavSet($force = false)
{
global $_conf;
static $done = false;
if ($done && !$force) {
return;
}
// キャッシュの有無をチェック
$cache_file = $_conf['cache_dir'] . DIRECTORY_SEPARATOR . 'favset_cache.txt';
if ($force || !file_exists($cache_file)) {
$use_cache = false;
} else {
$cache_mtime = filemtime($cache_file);
if (filemtime(__FILE__) > $cache_mtime) {
$use_cache = false;
} else {
$use_cache = true;
}
}
// キャッシュが有効かどうかをチェック
if ($use_cache && file_exists($_conf['orig_favlist_idx']) && filemtime($_conf['orig_favlist_idx']) > $cache_mtime) {
$use_cache = false;
}
if ($use_cache && file_exists($_conf['orig_favita_brd']) && filemtime($_conf['orig_favita_brd']) > $cache_mtime) {
$use_cache = false;
}
// 読み込み対象ファイルのリストを作成すると同時にキャッシュが有効かどうかをチェック
$favlist_idxes = array($_conf['orig_favlist_idx']);
$favita_brds = array($_conf['orig_favita_brd']);
for ($i = 1; $i <= $_conf['expack.misc.favset_num']; $i++) {
$favlist_idx = $_conf['pref_dir'] . DIRECTORY_SEPARATOR . sprintf('p2_favlist%d.idx', $i);
if ($use_cache && file_exists($favlist_idx) && filemtime($favlist_idx) > $cache_mtime) {
$use_cache = false;
}
$favlist_idxes[$i] = $favlist_idx;
$favita_brd = $_conf['pref_dir'] . DIRECTORY_SEPARATOR . sprintf('p2_favita%d.brd', $i);
if ($use_cache && file_exists($favita_brd) && filemtime($favita_brd) > $cache_mtime) {
$use_cache = false;
}
$favita_brds[$i] = $favita_brd;
}
// キャッシュが有効なら、それを使う
if ($use_cache) {
$cache = unserialize(file_get_contents($cache_file));
if (is_array($cache)) {
list($_conf['favlists'], $_conf['favitas']) = $cache;
$done = true;
return;
}
}
// すべてのお気にスレを読み込む
$_conf['favlists'] = array();
foreach ($favlist_idxes as $i => $favlist_idx) {
$_conf['favlists'][$i] = array();
if ($favlines = FileCtl::file_read_lines($favlist_idx, FILE_IGNORE_NEW_LINES)) {
foreach ($favlines as $l) {
$lar = explode('<>', $l);
// bbsのないものは不正データなのでスキップ
if (!isset($lar[11])) {
continue;
}
$key = $lar[1];
$host = $lar[10];
$bbs = $lar[11];
$group = P2Util::getHostGroupName($host);
$_conf['favlists'][$i][] = array('group' => $group, 'host' => $host, 'bbs' => $bbs, 'key' => $key);
}
}
}
// すべてのお気に板を読み込む
$_conf['favitas'] = array();
foreach ($favita_brds as $i => $favita_brd) {
$_conf['favitas'][$i] = array();
if ($favlines = FileCtl::file_read_lines($favita_brd, FILE_IGNORE_NEW_LINES)) {
foreach ($favlines as $l) {
$lar = explode("\t", $l);
$host = $lar[1];
$bbs = $lar[2];
$itaj = $lar[3];
$group = P2Util::getHostGroupName($host);
$_conf['favitas'][$i][] = array('group' => $group, 'host' => $host, 'bbs' => $bbs, 'itaj' => $itaj);
}
}
}
//キャッシュに保存する
if (!is_dir($_conf['pref_dir'])) {
FileCtl::mkdirFor($cache_file);
}
file_put_contents($cache_file, serialize(array($_conf['favlists'], $_conf['favitas'])));
$done = true;
}
示例8: downloadDat2chKako
/**
* 2chの過去ログ倉庫からdat.gzをダウンロード&解凍する
*
* @access private
* @return true|string|false 取得できたか、更新がなかった場合はtrue(または"304 Not Modified")を返す
*/
function downloadDat2chKako($uri, $ext)
{
global $_conf;
$url = $uri . $ext;
$purl = parse_url($url);
// クエリー
$purl['query'] = isset($purl['query']) ? '?' . $purl['query'] : '';
// プロキシ
if ($_conf['proxy_use']) {
$send_host = $_conf['proxy_host'];
$send_port = $_conf['proxy_port'];
$send_path = $url;
} else {
$send_host = $purl['host'];
$send_port = isset($purl['port']) ? $purl['port'] : null;
$send_path = $purl['path'] . $purl['query'];
}
// デフォルトを80
if (!$send_port) {
$send_port = 80;
}
$request = 'GET ' . $send_path . " HTTP/1.0\r\n";
$request .= "Host: " . $purl['host'] . "\r\n";
$request .= "User-Agent: " . P2Util::getP2UA($withMonazilla = true) . "\r\n";
$request .= "Connection: Close\r\n";
//$request .= "Accept-Encoding: gzip\r\n";
/*
if ($modified) {
$request .= "If-Modified-Since: $modified\r\n";
}
*/
$request .= "\r\n";
// WEBサーバへ接続
$fp = fsockopen($send_host, $send_port, $errno, $errstr, $_conf['fsockopen_time_limit']);
if (!$fp) {
P2Util::pushInfoHtml(sprintf('<p>サーバ接続エラー: %s (%s)<br>p2 info - %s に接続できませんでした。</div>', hs($errstr), hs($errno), P2View::tagA(P2Util::throughIme($url), hs($url), array('target' => $_conf['ext_win_target']))));
$this->diedat = true;
return false;
}
// HTTPリクエスト送信
fputs($fp, $request);
// HTTPヘッダレスポンスを取得する
$h = $this->freadHttpHeader($fp);
if ($h === false) {
fclose($fp);
$this->_pushInfoHtmlFreadHttpHeaderError($url);
$this->diedat = true;
return false;
}
// {{{ HTTPコードをチェック
$code = $h['code'];
// Partial Content
if ($code == "200") {
// OK。何もしない
// Not Modified
} elseif ($code == "304") {
fclose($fp);
//$this->isonline = true;
return "304 Not Modified";
// 予期しないHTTPコード。なかったと判斷
} else {
fclose($fp);
$this->downloadDat2chKakoNotFound($uri, $ext);
return false;
}
// }}}
if (isset($h['headers']['Last-Modified'])) {
$lastmodified = $h['headers']['Last-Modified'];
}
if (isset($h['headers']['Content-Length'])) {
if (preg_match("/^([0-9]+)/", $h['headers']['Content-Length'], $matches)) {
$onbytes = $h['headers']['Content-Length'];
}
}
$isGzip = false;
if (isset($h['headers']['Content-Encoding'])) {
if (preg_match("/^(x-)?gzip/", $h['headers']['Content-Encoding'], $matches)) {
$isGzip = true;
}
}
// bodyを読む
$body = '';
while (!feof($fp)) {
$body .= fread($fp, 8192);
}
fclose($fp);
$done_gunzip = false;
if ($isGzip) {
$gztempfile = $this->keydat . '.gz';
FileCtl::mkdirFor($gztempfile);
if (file_put_contents($gztempfile, $body, LOCK_EX) === false) {
die("Error: cannot write file. downloadDat2chKako()");
return false;
}
//.........這裏部分代碼省略.........
示例9: downloadSettingTxt
/**
* SETTING.TXT をダウンロードして、パースして、キャッシュする
*
* @return boolean 実行成否
*/
public function downloadSettingTxt()
{
global $_conf;
// まちBBS・したらば は SETTING.TXT が存在しないものとする
if (P2Util::isHostMachiBbs($this->_host) || P2Util::isHostJbbsShitaraba($this->_host)) {
return false;
}
FileCtl::mkdirFor($this->_setting_txt);
// 板ディレクトリが無ければ作る
if (file_exists($this->_setting_srd) && file_exists($this->_setting_txt)) {
// 更新しない場合は、その場で抜けてしまう
if (!empty($_GET['norefresh']) || isset($_REQUEST['word'])) {
return true;
// キャッシュが新しい場合も抜ける
} elseif ($this->isCacheFresh()) {
return true;
}
$modified = http_date(filemtime($this->_setting_txt));
} else {
$modified = false;
}
// DL
$params = array();
$params['timeout'] = $_conf['http_conn_timeout'];
$params['readTimeout'] = array($_conf['http_read_timeout'], 0);
if ($_conf['proxy_use']) {
$params['proxy_host'] = $_conf['proxy_host'];
$params['proxy_port'] = $_conf['proxy_port'];
}
$req = new HTTP_Request($this->_url, $params);
$modified && $req->addHeader('If-Modified-Since', $modified);
$req->addHeader('User-Agent', "Monazilla/1.00 ({$_conf['p2ua']})");
$response = $req->sendRequest();
if (PEAR::isError($response)) {
$error_msg = $response->getMessage();
} else {
$code = $req->getResponseCode();
if ($code == 302) {
// ホストの移転を追跡
$new_host = BbsMap::getCurrentHost($this->_host, $this->_bbs);
if ($new_host != $this->_host) {
$aNewSettingTxt = new SettingTxt($new_host, $this->_bbs);
$body = $aNewSettingTxt->downloadSettingTxt();
return true;
}
}
if (!($code == 200 || $code == 206 || $code == 304)) {
//var_dump($req->getResponseHeader());
$error_msg = $code;
}
}
// DLエラー
if (isset($error_msg) && strlen($error_msg) > 0) {
$url_t = P2Util::throughIme($this->_url);
$info_msg_ht = "<p class=\"info-msg\">Error: {$error_msg}<br>";
$info_msg_ht .= "rep2 info: <a href=\"{$url_t}\"{$_conf['ext_win_target_at']}>{$this->_url}</a> に接続できませんでした。</p>";
P2Util::pushInfoHtml($info_msg_ht);
touch($this->_setting_txt);
// DL失敗した場合も touch
return false;
}
$body = $req->getResponseBody();
// DL成功して かつ 更新されていたら保存
if ($body && $code != '304') {
// したらば or be.2ch.net ならEUCをSJISに変換
if (P2Util::isHostJbbsShitaraba($this->_host) || P2Util::isHostBe2chNet($this->_host)) {
$body = mb_convert_encoding($body, 'CP932', 'CP51932');
}
if (FileCtl::file_write_contents($this->_setting_txt, $body) === false) {
p2die('cannot write file');
}
// パースしてキャッシュを保存する
if (!$this->cacheParsedSettingTxt()) {
return false;
}
} else {
// touchすることで更新インターバルが効くので、しばらく再チェックされなくなる
touch($this->_setting_txt);
// 同時にキャッシュもtouchしないと、_setting_txtと_setting_srdで更新時間がずれ、
// 毎回ここまで処理が來る(サーバへのヘッダリクエストが飛ぶ)場合がある。
touch($this->_setting_srd);
}
return true;
}
示例10: cacheFileForDL
/**
* ダウンロードURLからキャッシュファイルパスを返す
*
* @access public
* @return string|false
*/
function cacheFileForDL($url)
{
global $_conf;
if (!($parsed = parse_url($url))) {
return false;
}
$save_uri = $parsed['host'];
$save_uri .= isset($parsed['port']) ? ':' . $parsed['port'] : '';
$save_uri .= $parsed['path'] ? $parsed['path'] : '';
$save_uri .= isset($parsed['query']) ? '?' . $parsed['query'] : '';
$save_uri = str_replace('%2F', '/', rawurlencode($save_uri));
$save_uri = preg_replace('|\\.+/|', '', $save_uri);
$save_uri = rtrim($save_uri, '/');
$cachefile = $_conf['cache_dir'] . '/' . $save_uri;
FileCtl::mkdirFor($cachefile);
return $cachefile;
}
示例11: downloadSubject
/**
* subject.txtをダウンロードする
*
* @return string subject.txt の中身
*/
public function downloadSubject()
{
global $_conf;
if ($this->storage === 'file') {
FileCtl::mkdirFor($this->subject_file);
// 板ディレクトリが無ければ作る
if (file_exists($this->subject_file)) {
if (!empty($_REQUEST['norefresh']) || empty($_REQUEST['refresh']) && isset($_REQUEST['word'])) {
return;
// 更新しない場合は、その場で抜けてしまう
} elseif (!empty($GLOBALS['expack.subject.multi-threaded-download.done'])) {
return;
// 並列ダウンロード済の場合も抜ける
} elseif (empty($_POST['newthread']) and $this->isSubjectTxtFresh()) {
return;
// 新規スレ立て時でなく、更新が新しい場合も抜ける
}
$modified = http_date(filemtime($this->subject_file));
} else {
$modified = false;
}
}
// DL
$params = array();
$params['timeout'] = $_conf['http_conn_timeout'];
$params['readTimeout'] = array($_conf['http_read_timeout'], 0);
if ($_conf['proxy_use']) {
$params['proxy_host'] = $_conf['proxy_host'];
$params['proxy_port'] = $_conf['proxy_port'];
}
$req = new HTTP_Request($this->subject_url, $params);
$modified && $req->addHeader("If-Modified-Since", $modified);
$req->addHeader('User-Agent', "Monazilla/1.00 ({$_conf['p2ua']})");
$response = $req->sendRequest();
if (PEAR::isError($response)) {
$error_msg = $response->getMessage();
} else {
$code = $req->getResponseCode();
if ($code == 302) {
// ホストの移転を追跡
$new_host = BbsMap::getCurrentHost($this->host, $this->bbs);
if ($new_host != $this->host) {
$aNewSubjectTxt = new SubjectTxt($new_host, $this->bbs);
$body = $aNewSubjectTxt->downloadSubject();
return $body;
}
}
if (!($code == 200 || $code == 206 || $code == 304)) {
//var_dump($req->getResponseHeader());
$error_msg = $code;
}
}
if (isset($error_msg) && strlen($error_msg) > 0) {
$url_t = P2Util::throughIme($this->subject_url);
$info_msg_ht = "<p class=\"info-msg\">Error: {$error_msg}<br>";
$info_msg_ht .= "rep2 info: <a href=\"{$url_t}\"{$_conf['ext_win_target_at']}>{$this->subject_url}</a> に接続できませんでした。</p>";
P2Util::pushInfoHtml($info_msg_ht);
$body = '';
} else {
$body = $req->getResponseBody();
}
// ■ DL成功して かつ 更新されていたら
if ($body && $code != "304") {
// したらば or be.2ch.net ならEUCをSJISに変換
if (P2Util::isHostJbbsShitaraba($this->host) || P2Util::isHostBe2chNet($this->host)) {
$body = mb_convert_encoding($body, 'CP932', 'CP51932');
}
if (FileCtl::file_write_contents($this->subject_file, $body) === false) {
p2die('cannot write file');
}
} else {
// touchすることで更新インターバルが効くので、しばらく再チェックされなくなる
// (変更がないのに修正時間を更新するのは、少し気が進まないが、ここでは特に問題ないだろう)
if ($this->storage === 'file') {
touch($this->subject_file);
}
}
return $body;
}
示例12: cachePathForCookie
/**
* ホスト名からクッキーファイルパスを返す
*
* @access public
* @return string
*/
function cachePathForCookie($host)
{
global $_conf;
$cachefile = $_conf['cookie_dir'] . "/{$host}/" . $_conf['cookie_file_name'];
FileCtl::mkdirFor($cachefile);
return $cachefile;
}
示例13: _prepareFileSession
/**
* @return void
*/
function _prepareFileSession()
{
global $_conf;
// セッションデータ保存ディレクトリを設定
if ($_conf['session_save'] == 'p2' and session_module_name() == 'files') {
// $_conf['data_dir'] を絶対パスに変換する
define('P2_DATA_DIR_REAL_PATH', File_Util::realPath($_conf['data_dir']));
$_conf['session_dir'] = P2_DATA_DIR_REAL_PATH . DIRECTORY_SEPARATOR . 'session';
}
if (!is_dir($_conf['session_dir'])) {
require_once P2_LIB_DIR . '/FileCtl.php';
FileCtl::mkdirFor($_conf['session_dir'] . '/dummy_filename');
}
if (!is_writable($_conf['session_dir'])) {
die(sprintf('p2 error: セッションデータ保存ディレクトリ (%s) に書き込み権限がありません。', hs($_conf['session_dir'])));
}
session_save_path($_conf['session_dir']);
// session.save_path のパスの深さが2より大きいとガーベッジコレクションが行われないので
// 自前でガーベッジコレクションする
P2Util::session_gc();
}
示例14: downloadSubject
/**
* subject.txtをダウンロードする
*
* @access public
* @return array|null|false subject.txtの配列データ(eaccelerator, apc用)、またはnullを返す。
* 失敗した場合はfalseを返す。
*/
function downloadSubject()
{
global $_conf;
static $spentDlTime_ = 0;
// DL所要合計時間
$perm = isset($_conf['dl_perm']) ? $_conf['dl_perm'] : 0606;
$modified = false;
if ($this->storage == 'file') {
FileCtl::mkdirFor($this->subject_file);
// 板ディレクトリが無ければ作る
if (file_exists($this->subject_file)) {
// ファイルキャッシュがあれば、DL製限時間をかける
if (UA::isK()) {
$dlSubjectTotalLimitTime = $_conf['dlSubjectTotalLimitTimeM'];
} else {
$dlSubjectTotalLimitTime = $_conf['dlSubjectTotalLimitTime'];
}
if ($dlSubjectTotalLimitTime and $spentDlTime_ > $dlSubjectTotalLimitTime) {
return null;
}
// 條件によって、キャッシュを適用する
// subject.php でrefresh指定がある時は、キャッシュを適用しない
if (!(basename($_SERVER['SCRIPT_NAME']) == $_conf['subject_php'] && !empty($_REQUEST['refresh']))) {
// キャッシュ適用指定時は、その場で抜ける
if (!empty($_GET['norefresh']) || isset($_REQUEST['word'])) {
return null;
// 並列ダウンロード済の場合も抜ける
} elseif (!empty($GLOBALS['expack.subject.multi-threaded-download.done'])) {
return null;
// 新規スレ立て時以外で、キャッシュが新鮮な場合も抜ける
} elseif (empty($_POST['newthread']) and $this->isSubjectTxtFresh()) {
return null;
}
}
$modified = gmdate("D, d M Y H:i:s", filemtime($this->subject_file)) . " GMT";
}
}
$dlStartTime = $this->microtimeFloat();
// DL
require_once 'HTTP/Request.php';
$params = array();
$params['timeout'] = $_conf['fsockopen_time_limit'];
if ($_conf['proxy_use']) {
$params['proxy_host'] = $_conf['proxy_host'];
$params['proxy_port'] = $_conf['proxy_port'];
}
$req = new HTTP_Request($this->subject_url, $params);
$modified && $req->addHeader('If-Modified-Since', $modified);
$req->addHeader('User-Agent', sprintf('Monazilla/1.00 (%s/%s)', $_conf['p2uaname'], $_conf['p2version']));
$response = $req->sendRequest();
$error_msg = null;
if (PEAR::isError($response)) {
$error_msg = $response->getMessage();
} else {
$code = $req->getResponseCode();
if ($code == 302) {
// ホストの移転を追跡
require_once P2_LIB_DIR . '/BbsMap.php';
$new_host = BbsMap::getCurrentHost($this->host, $this->bbs);
if ($new_host != $this->host) {
$aNewSubjectTxt = new SubjectTxt($new_host, $this->bbs);
return $aNewSubjectTxt->downloadSubject();
}
}
if (!($code == 200 || $code == 206 || $code == 304)) {
//var_dump($req->getResponseHeader());
$error_msg = $code;
}
}
if (!is_null($error_msg) && strlen($error_msg) > 0) {
$attrs = array();
if ($_conf['ext_win_target']) {
$attrs['target'] = $_conf['ext_win_target'];
}
$atag = P2View::tagA(P2Util::throughIme($this->subject_url), hs($this->subject_url), $attrs);
$msg_ht = sprintf('<div>Error: %s<br>p2 info - %s に接続できませんでした。</div>', hs($error_msg), $atag);
P2Util::pushInfoHtml($msg_ht);
$body = '';
} else {
$body = $req->getResponseBody();
}
$dlEndTime = $this->microtimeFloat();
$dlTime = $dlEndTime - $dlStartTime;
$spentDlTime_ += $dlTime;
// DL成功して かつ 更新されていたら
if ($body && $code != '304') {
// したらば or be.2ch.net ならEUCをSJISに変換
if (P2Util::isHostJbbsShitaraba($this->host) || P2Util::isHostBe2chNet($this->host)) {
$body = mb_convert_encoding($body, 'SJIS-win', 'eucJP-win');
}
// eaccelerator or apcに保存する場合
if ($this->storage == 'eaccelerator' || $this->storage == 'apc') {
$cache_key = "{$this->host}/{$this->bbs}";
//.........這裏部分代碼省略.........
示例15: ThreadRead
$aThread = new ThreadRead();
}
// lsのセット
if (!empty($ls)) {
$aThread->ls = mb_convert_kana($ls, 'a');
}
//==========================================================
// idxの読み込み
//==========================================================
// hostを分解してidxファイルのパスを求める
if (!isset($aThread->keyidx)) {
$aThread->setThreadPathInfo($host, $bbs, $key);
}
// 板ディレクトリが無ければ作る
FileCtl::mkdirFor($aThread->keyidx);
FileCtl::mkdirFor($aThread->keydat);
$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 {
$idx_data = array_fill(0, 12, '');
}
$aThread->getThreadInfoFromIdx();
//==========================================================
// preview >>1
//==========================================================
//if (!empty($_GET['onlyone'])) {