當前位置: 首頁>>代碼示例>>PHP>>正文


PHP FileCtl::mkdirFor方法代碼示例

本文整理匯總了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;
}
開發者ID:poppen,項目名稱:p2,代碼行數:41,代碼來源:downloadDatCha2.func.php

示例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}).");
     }
 }
開發者ID:xingskycn,項目名稱:p2-php,代碼行數:20,代碼來源:P2Lock.php

示例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;
 }
開發者ID:unpush,項目名稱:p2-php,代碼行數:26,代碼來源:AbstractDataStore.php

示例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;
 }
開發者ID:nyarla,項目名稱:fluxflex-rep2ex,代碼行數:22,代碼來源:HostCheck.php

示例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;
 }
開發者ID:poppen,項目名稱:p2,代碼行數:53,代碼來源:FileCtl.php

示例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;
}
開發者ID:xingskycn,項目名稱:p2-php,代碼行數:38,代碼來源:title.php

示例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;
 }
開發者ID:xingskycn,項目名稱:p2-php,代碼行數:97,代碼來源:FavSetManager.php

示例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;
         }
//.........這裏部分代碼省略.........
開發者ID:poppen,項目名稱:p2,代碼行數:101,代碼來源:ThreadRead.php

示例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;
 }
開發者ID:xingskycn,項目名稱:p2-php,代碼行數:89,代碼來源:SettingTxt.php

示例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;
 }
開發者ID:poppen,項目名稱:p2,代碼行數:23,代碼來源:P2Util.php

示例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;
 }
開發者ID:xingskycn,項目名稱:p2-php,代碼行數:84,代碼來源:SubjectTxt.php

示例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;
}
開發者ID:68,項目名稱:rep2iphone,代碼行數:13,代碼來源:post_i.php

示例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();
}
開發者ID:poppen,項目名稱:p2,代碼行數:24,代碼來源:conf.inc.php

示例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}";
//.........這裏部分代碼省略.........
開發者ID:poppen,項目名稱:p2,代碼行數:101,代碼來源:SubjectTxt.php

示例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'])) {
開發者ID:xingskycn,項目名稱:p2-php,代碼行數:31,代碼來源:read.php


注:本文中的FileCtl::mkdirFor方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。