本文整理汇总了PHP中P2Util::isHostJbbsShitaraba方法的典型用法代码示例。如果您正苦于以下问题:PHP P2Util::isHostJbbsShitaraba方法的具体用法?PHP P2Util::isHostJbbsShitaraba怎么用?PHP P2Util::isHostJbbsShitaraba使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类P2Util
的用法示例。
在下文中一共展示了P2Util::isHostJbbsShitaraba方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: downloadDat
/**
* DATをダウンロードする
*/
public function downloadDat()
{
global $_conf;
// まちBBS
if (P2Util::isHostMachiBbs($this->host)) {
DownloadDatMachiBbs::invoke($this);
// JBBS@したらば
} elseif (P2Util::isHostJbbsShitaraba($this->host)) {
if (!function_exists('shitarabaDownload')) {
include P2_LIB_DIR . '/read_shitaraba.inc.php';
}
shitarabaDownload($this);
// 2ch系
} else {
$this->getDatBytesFromLocalDat();
// $aThread->length をset
// 2ch bbspink●読み
if (P2Util::isHost2chs($this->host) && !empty($_GET['maru'])) {
// ログインしてなければ or ログイン後、24時間以上経過していたら自動再ログイン
if (!file_exists($_conf['sid2ch_php']) || !empty($_REQUEST['relogin2ch']) || filemtime($_conf['sid2ch_php']) < time() - 60 * 60 * 24) {
if (!function_exists('login2ch')) {
include P2_LIB_DIR . '/login2ch.inc.php';
}
if (!login2ch()) {
$this->getdat_error_msg_ht .= $this->get2chDatError();
$this->diedat = true;
return false;
}
}
include $_conf['sid2ch_php'];
$this->_downloadDat2chMaru($uaMona, $SID2ch);
// 2ch bbspink モリタポ読み
} elseif (P2Util::isHost2chs($this->host) && !empty($_GET['moritapodat']) && $_conf['p2_2ch_mail'] && $_conf['p2_2ch_pass']) {
if (!array_key_exists('csrfid', $_GET) || $this->_getCsrfIdForMoritapoDat() != $_GET['csrfid']) {
p2die('不正なリクエストです');
}
$this->_downloadDat2chMoritapo();
// 2chの過去ログ倉庫読み
} elseif (!empty($_GET['kakolog']) && !empty($_GET['kakoget'])) {
if ($_GET['kakoget'] == 1) {
$ext = '.dat.gz';
} elseif ($_GET['kakoget'] == 2) {
$ext = '.dat';
}
$this->_downloadDat2chKako($_GET['kakolog'], $ext);
// 2ch or 2ch互換
} else {
// DATを差分DLする
$this->_downloadDat2ch($this->length);
}
}
}
示例2: downloadDat
/**
* DATをダウンロード保存する
*
* @access public
* @return boolean
*/
function downloadDat()
{
global $_conf;
// まちBBS
if (P2Util::isHostMachiBbs($this->host)) {
require_once P2_LIB_DIR . '/downloadDatMachiBbs.func.php';
downloadDatMachiBbs($this);
// JBBS@したらば
} elseif (P2Util::isHostJbbsShitaraba($this->host)) {
require_once P2_LIB_DIR . '/downloadDatShitaraba.func.php';
downloadDatShitaraba($this);
/*
// cha2.net(→2ch互換として扱ってみる)
} elseif (P2Util::isHostCha2($this->host)) {
require_once P2_LIB_DIR . '/downloadDatCha2.func.php';
downloadDatCha2($this);
*/
// 2ch系
} else {
$this->getDatBytesFromLocalDat();
// $aThread->length をset
// 2ch bbspink●読み
if (P2Util::isHost2chs($this->host) && !empty($_GET['maru'])) {
// ログインしてなければ or ログイン後、24時間以上経過していたら自動再ログイン
if (!file_exists($_conf['sid2ch_php']) || !empty($_REQUEST['relogin2ch']) or filemtime($_conf['sid2ch_php']) < time() - 60 * 60 * 24) {
require_once P2_LIB_DIR . '/login2ch.func.php';
if (!login2ch()) {
$this->pushDownloadDatErrorMsgHtml($this->get2chDatError());
$this->diedat = true;
return false;
}
}
$this->downloadDat2chMaru();
// 2chの過去ログ倉庫読み
} elseif (!empty($_GET['kakolog']) && !empty($_GET['kakoget'])) {
if ($_GET['kakoget'] == 1) {
$ext = '.dat.gz';
} elseif ($_GET['kakoget'] == 2) {
$ext = '.dat';
}
$this->downloadDat2chKako($_GET['kakolog'], $ext);
// 2ch or 2ch互換
} else {
// DATを差分DLする
$this->downloadDat2ch($this->length);
}
}
return true;
}
示例3: getMotoThread
/**
* 元スレURLを返す
*
* @access public
* @param boolean $original 携帯でも2chのスレURLを返す
* @return string URL
*/
function getMotoThread($original = false)
{
global $_conf;
// 携帯カスタマイズ指定
if ($_conf['ktai'] && !$original && $_conf['k_motothre_external']) {
$motothre_url = $this->compileMobile2chUri();
// まちBBS
} elseif (P2Util::isHostMachiBbs($this->host)) {
// PC
if (!$_conf['ktai'] || $original) {
/*
$motothre_url = sprintf(
'http://%s/bbs/read.cgi?BBS=%s&KEY=%s',
$this->host, rawurlencode($this->bbs), rawurlencode($this->key)
);
*/
$motothre_url = "http://{$this->host}/bbs/read.cgi/{$this->bbs}/{$this->key}/{$this->ls}";
// 携帯
} else {
$motothre_url = sprintf('http://%s/bbs/read.cgi?IMODE=TRUE&BBS=%s&KEY=%s', $this->host, rawurlencode($this->bbs), rawurlencode($this->key));
}
// まちびねっと
} elseif (P2Util::isHostMachiBbsNet($this->host)) {
$motothre_url = sprintf('http://%s/test/read.cgi?bbs=%s&key=%s', $this->host, rawurlencode($this->bbs), rawurlencode($this->key));
// JBBSしたらば
} elseif (P2Util::isHostJbbsShitaraba($this->host)) {
$preg = '{(jbbs\\.shitaraba\\.com|jbbs\\.livedoor\\.com|jbbs\\.livedoor\\.jp)}';
$host_bbs_cgi = preg_replace($preg, '$1/bbs/read.cgi', $this->host);
$motothre_url = "http://{$host_bbs_cgi}/{$this->bbs}/{$this->key}/{$this->ls}";
// $motothre_url = "http://{$this->host}/bbs/read.cgi?BBS={$this->bbs}&KEY={$this->key}";
// 2ch系
} elseif (P2Util::isHost2chs($this->host)) {
// PC
if (!UA::isK() || UA::isIPhoneGroup() || $original) {
$motothre_url = "http://{$this->host}/test/read.cgi/{$this->bbs}/{$this->key}/{$this->ls}";
// 携帯
} else {
// BBS PINK
if (P2Util::isHostBbsPink($this->host)) {
// r.iはもう使われていない
//$motothre_url = "http://{$this->host}/test/r.i/{$this->bbs}/{$this->key}/{$this->ls}";
$motothre_url = "http://speedo.ula.cc/test/r.so/{$this->host}/{$this->bbs}/{$this->key}/{$this->ls}?guid=ON";
// 2ch(c.2ch)
} else {
$motothre_url = $this->compileMobile2chUri();
}
}
// その他
} else {
$motothre_url = "http://{$this->host}/test/read.cgi/{$this->bbs}/{$this->key}/{$this->ls}";
}
return $motothre_url;
}
示例4: elseif
}
// sbject ツールバー =====================================
include P2_LIB_DIR . '/sb_toolbar.inc.php';
if ($have_sb_footer_links) {
echo "<p>";
echo $dat_soko_ht;
echo $taborn_link_ht;
echo $taborn_now_ht;
echo $buildnewthread_ht;
echo $import_dat_ht;
echo "</p>";
}
// スペシャルモードでなければフォーム入力補完========================
$ini_url_text = '';
if (!$aThreadList->spmode) {
if (P2Util::isHostJbbsShitaraba($aThreadList->host)) {
// したらば
$ini_url_text = "http://{$aThreadList->host}/bbs/read.cgi?BBS={$aThreadList->bbs}&KEY=";
} elseif (P2Util::isHostMachiBbs($aThreadList->host)) {
// まちBBS
$ini_url_text = "http://{$aThreadList->host}/bbs/read.pl?BBS={$aThreadList->bbs}&KEY=";
} elseif (P2Util::isHostMachiBbsNet($aThreadList->host)) {
// まちビねっと
$ini_url_text = "http://{$aThreadList->host}/test/read.cgi?bbs={$aThreadList->bbs}&key=";
} else {
$ini_url_text = "http://{$aThreadList->host}/test/read.cgi/{$aThreadList->bbs}/";
}
}
//if(!$aThreadList->spmode || $aThreadList->spmode=="fav" || $aThreadList->spmode=="recent" || $aThreadList->spmode=="res_hist"){
$onclick_ht = <<<EOP
var url_v=document.forms["urlform"].elements["url_text"].value;
示例5: fetchSubjectTxt
/**
* subject.txtを一括ダウンロード&保存する
*
* @param array|string $subjects
* @param bool $force
* @return void
*/
public static function fetchSubjectTxt($subjects, $force = false)
{
global $_conf;
// {{{ ダウンロード対象を設定
// お気に板等の.idx形式のファイルをパース
if (is_string($subjects)) {
$lines = FileCtl::file_read_lines($subjects, FILE_IGNORE_NEW_LINES);
if (!$lines) {
return;
}
$subjects = array();
foreach ($lines as $l) {
$la = explode('<>', $l);
if (count($la) < 12) {
continue;
}
$host = $la[10];
$bbs = $la[11];
if ($host === '' || $bbs === '') {
continue;
}
$id = $host . '<>' . $bbs;
if (isset($subjects[$id])) {
continue;
}
$subjects[$id] = array($host, $bbs);
}
// [host, bbs] の連想配列を検証
} elseif (is_array($subjects)) {
$originals = $subjects;
$subjects = array();
foreach ($originals as $s) {
if (!is_array($s) || !isset($s['host']) || !isset($s['bbs'])) {
continue;
}
$id = $s['host'] . '<>' . $s['bbs'];
if (isset($subjects[$id])) {
continue;
}
$subjects[$id] = array($s['host'], $s['bbs']);
}
// 上記以外
} else {
return;
}
if (!count($subjects)) {
return;
}
// }}}
// {{{ キューをセットアップ
// キューおよびその他の変数を初期化
$queue = new P2HttpRequestQueue();
$hosts = array();
$time = time() - $_conf['sb_dl_interval'];
$eucjp2sjis = null;
// 各subject.txtへのリクエストをキューに追加
foreach ($subjects as $subject) {
list($host, $bbs) = $subject;
$file = P2Util::datDirOfHostBbs($host, $bbs) . 'subject.txt';
if (!$force && file_exists($file) && filemtime($file) > $time) {
continue;
}
$url = 'http://' . $host . '/' . $bbs . '/subject.txt';
if (P2Util::isHostJbbsShitaraba($host) || P2Util::isHostBe2chNet($host)) {
if ($eucjp2sjis === null) {
$eucjp2sjis = new P2HttpCallback_SaveEucjpAsSjis();
}
$req = new P2HttpGet($url, $file, null, $eucjp2sjis);
} else {
$req = new P2HttpGet($url, $file);
}
// 同一ホストに対しての同時接続は MAX_REQUESTS_PER_HOST まで
if (!isset($hosts[$host])) {
$hosts[$host] = new P2HttpRequestQueue();
$queue->push($req);
} elseif (count($hosts[$host]) < self::MAX_REQUESTS_PER_HOST) {
$queue->push($req);
} else {
$hosts[$host]->pop()->setNext($req);
}
$hosts[$host]->push($req);
}
// }}}
// リクエストを送信
if (count($queue)) {
self::send(new HttpRequestPool(), $queue);
clearstatcache();
}
}
示例6: getMotoThread
/**
* 元スレURLを返す
*
* @param bool $force_pc trueなら携帯モードでもPC用の元スレURLを返す
* @param string $ls レス表示番号or範囲。nullならlsプロパティを使う
* 掲示板によっては無視される場合もある
* @return string 元スレURL
*/
public function getMotoThread($force_pc = false, $ls = null)
{
global $_conf;
if ($force_pc) {
$mobile = false;
} elseif ($_conf['iphone']) {
$mobile = false;
} elseif ($_conf['ktai']) {
$mobile = true;
} else {
$mobile = false;
}
if ($ls === null) {
$ls = $this->ls;
}
// 2ch系
if (P2Util::isHost2chs($this->host)) {
// PC
if (!$mobile) {
$motothre_url = "http://{$this->host}/test/read.cgi/{$this->bbs}/{$this->key}/{$ls}";
// 携帯
} else {
if (P2Util::isHostBbsPink($this->host)) {
//$motothre_url = "http://{$this->host}/test/r.i/{$this->bbs}/{$this->key}/{$ls}";
$motothre_url = "http://speedo.ula.cc/test/r.so/{$this->host}/{$this->bbs}/{$this->key}/{$ls}";
} else {
$mail = rawurlencode($_conf['my_mail']);
// c.2chはl指定に非対応なので、代わりにn
$ls = substr($ls, 0, 1) == 'l' ? 'n' : $ls;
$motothre_url = "http://c.2ch.net/test/--3!mail={$mail}/{$this->bbs}/{$this->key}/{$ls}";
}
}
// まちBBS
} elseif (P2Util::isHostMachiBbs($this->host)) {
if ($mobile) {
$motothre_url = "http://{$this->host}/bbs/read.pl?IMODE=TRUE&BBS={$this->bbs}&KEY={$this->key}";
} else {
$motothre_url = "http://{$this->host}/bbs/read.cgi/{$this->bbs}/{$this->key}/{$ls}";
}
// まちびねっと
} elseif (P2Util::isHostMachiBbsNet($this->host)) {
$motothre_url = "http://{$this->host}/test/read.cgi?bbs={$this->bbs}&key={$this->key}";
if ($mobile) {
$motothre_url .= '&imode=true';
}
// JBBSしたらば
} elseif (P2Util::isHostJbbsShitaraba($this->host)) {
list($host, $category) = explode('/', P2Util::adjustHostJbbs($this->host), 2);
$bbs_cgi = $mobile ? 'i.cgi' : 'read.cgi';
$motothre_url = "http://{$host}/bbs/{$bbs_cgi}/{$category}/{$this->bbs}/{$this->key}/{$ls}";
// その他
} else {
$motothre_url = "http://{$this->host}/test/read.cgi/{$this->bbs}/{$this->key}/{$ls}";
}
return $motothre_url;
}
示例7: 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;
}
示例8: loadSubjectLines
/**
* subject.txt を読み込み、セットし、調整する
* 成功すれば、$this->subject_lines がセットされる
*
* @access private
* @param string $lines eaccelerator, apc用
* @return boolean 実行成否
*/
function loadSubjectLines($lines = null)
{
if (!$lines) {
if ($this->storage == 'eaccelerator') {
$this->subject_lines = eaccelerator_get("{$this->host}/{$this->bbs}");
} elseif ($this->storage == 'apc') {
$this->subject_lines = apc_fetch("{$this->host}/{$this->bbs}");
} elseif ($this->storage == 'file') {
$this->subject_lines = file($this->subject_file);
} else {
return false;
}
} else {
$this->subject_lines = $lines;
}
// JBBS@したらばなら重複スレタイを削除する
if (P2Util::isHostJbbsShitaraba($this->host)) {
$this->subject_lines = array_unique($this->subject_lines);
}
return $this->subject_lines ? true : false;
}
示例9: isTrustedHost
/**
* host が 信頼できる掲示板サイトなら true を返す
*
* @access public
* @return boolean
*/
function isTrustedHost($host)
{
return P2Util::isHost2chs($host) || P2Util::isHostBbsPink($host) || P2Util::isHostMachiBbs($host) || P2Util::isHostJbbsShitaraba($host);
}
示例10: _postIt
/**
* レスを書き込む or 新規スレッドを立てる
* スレ立ての場合は、$key は空 '' でよい
*
* @return boolean|string 書き込み成功なら true、失敗なら false または失敗理由文字列
*/
function _postIt($host, $bbs, $key, $post, $bbs_cgi)
{
global $_conf, $popup, $rescount, $ttitle_en, $STYLE, $post_cache;
list($request, $send_host, $send_port) = _buildRequestForPost($host, $bbs, $key, $post, $bbs_cgi);
$maru_kakiko = empty($_POST['maru_kakiko']) ? 0 : 1;
P2Util::setConfUser('maru_kakiko', $maru_kakiko);
// 書き込みを一時的に保存
$failed_post_file = P2Util::getFailedPostFilePath($host, $bbs, $key);
$cont = serialize($post_cache);
if (!DataPhp::writeDataPhp($failed_post_file, $cont, $_conf['res_write_perm'])) {
p2die('ファイルの書き込みエラー');
}
// p2 sambaのチェック
if ($p2SambaErrorMsgHtml = _getP2SambaErrorMsgHtml($host, $bbs)) {
_showPostMsg(false, $p2SambaErrorMsgHtml, false);
return false;
}
// WEBサーバへ接続
$fp = fsockopen($send_host, $send_port, $errno, $errstr, $_conf['fsockopen_time_limit']);
if (!$fp) {
_showPostMsg(false, "サーバ接続エラー: {$errstr} ({$errno})<br>p2 Error: 板サーバへの接続に失敗しました", false);
return false;
}
// HTTPリクエスト送信
fwrite($fp, $request, strlen($request));
$post_seikou = false;
$p2cookies = _readCookieFile(_cachePathForCookieByHost($host));
// header
while (!feof($fp)) {
$l = fgets($fp, 8192);
// クッキーキタ
if (preg_match("/Set-Cookie: (.+?)\r\n/", $l, $matches)) {
$cgroups = explode(";", $matches[1]);
if ($cgroups) {
foreach ($cgroups as $v) {
if (preg_match("/(.+)=(.*)/", $v, $m)) {
$k = ltrim($m[1]);
if ($k != 'path') {
$p2cookies[$k] = $m[2];
}
}
}
}
// 転送は書き込み成功と判断
} elseif (preg_match("/^Location: /", $l, $matches)) {
$post_seikou = true;
}
if ($l == "\r\n") {
break;
}
}
// クッキーをファイルに保存する
_saveCookieFile($p2cookies, _cachePathForCookieByHost($host));
// body
$response = '';
while (!feof($fp)) {
$response .= fread($fp, 164000);
}
fclose($fp);
// be.2ch.net or JBBSしたらば 文字コード変換 EUC→SJIS
if (P2Util::isHostBe2chNet($host) || P2Util::isHostJbbsShitaraba($host)) {
$response = mb_convert_encoding($response, 'SJIS-win', 'eucJP-win');
//<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
$response = preg_replace("{(<head>.*<META http-equiv=\"Content-Type\" content=\"text/html; charset=)EUC-JP(\">.*</head>)}is", "\$1Shift_JIS\$2", $response);
}
$kakikonda_match = "/<title>.*(書きこみました|■ 書き込みました ■|書き込み終了 - SubAll BBS).*<\\/title>/is";
$cookie_kakunin_match = "/<!-- 2ch_X:cookie -->|<title>■ 書き込み確認 ■<\\/title>|>書き込み確認。</";
if (eregi("(<.+>)", $response, $matches)) {
$response = $matches[1];
}
// カキコミ成功
if (preg_match($kakikonda_match, $response, $matches) or $post_seikou) {
// クッキーの書き込み自動保存を消去する
if (isset($_COOKIE['post_msg'])) {
P2Util::unsetCookie('post_msg');
// ドメイン指定なしも入れておこ
setcookie('post_msg', '', time() - 3600);
}
$reload = empty($_POST['from_read_new']);
_showPostMsg(true, '書きこみが終わりました。', $reload);
// 投稿失敗記録があれば削除する
if (file_exists($failed_post_file)) {
unlink($failed_post_file);
}
return true;
//$response_ht = htmlspecialchars($response, ENT_QUOTES);
//echo "<pre>{$response_ht}</pre>";
// ■cookie確認表示(post再チャレンジしてね)
} elseif (preg_match($cookie_kakunin_match, $response, $matches)) {
$htm['more_hidden_post'] = '';
// p2用の追加キー
$more_hidden_keys = array('newthread', 'submit_beres', 'from_read_new', 'maru_kakiko', 'csrfid', 'k', UA::getQueryKey());
foreach ($more_hidden_keys as $hk) {
if (isset($_POST[$hk])) {
//.........这里部分代码省略.........
示例11: setSubjectLines
/**
* subject.txt を読み込む
*
* 成功すれば、$this->subject_lines がセットされる
*
* @param string $cont これは eashm 用に渡している。
* @return boolean 実行成否
*/
public function setSubjectLines($cont = '')
{
$this->subject_lines = FileCtl::file_read_lines($this->subject_file);
// JBBS@したらばなら重複スレタイを削除する
if (P2Util::isHostJbbsShitaraba($this->host)) {
$this->subject_lines = array_unique($this->subject_lines);
}
if ($this->subject_lines) {
return true;
} else {
return false;
}
}
示例12: postIt
/**
* レスを書き込む
*
* @return boolean 書き込み成功なら true、失敗なら false
*/
function postIt($host, $bbs, $key, $post)
{
global $_conf, $post_result, $post_error2ch, $p2cookies, $popup, $rescount, $ttitle_en;
global $bbs_cgi;
$method = 'POST';
$bbs_cgi_url = 'http://' . $host . $bbs_cgi;
$URL = parse_url($bbs_cgi_url);
// URL分解
if (isset($URL['query'])) {
// クエリー
$URL['query'] = '?' . $URL['query'];
} else {
$URL['query'] = '';
}
// プロキシ
if ($_conf['proxy_use']) {
$send_host = $_conf['proxy_host'];
$send_port = $_conf['proxy_port'];
$send_path = $bbs_cgi_url;
} else {
$send_host = $URL['host'];
$send_port = isset($URL['port']) ? $URL['port'] : 80;
$send_path = $URL['path'] . $URL['query'];
}
if (!$send_port) {
$send_port = 80;
}
// デフォルトを80
$request = "{$method} {$send_path} HTTP/1.0\r\n";
$request .= "Host: {$URL['host']}\r\n";
$request .= "User-Agent: Monazilla/1.00 ({$_conf['p2ua']})\r\n";
$request .= "Referer: http://{$URL['host']}/\r\n";
// クッキー
$cookies_to_send = '';
if ($p2cookies) {
foreach ($p2cookies as $cname => $cvalue) {
if ($cname != 'expires') {
$cookies_to_send .= " {$cname}={$cvalue};";
}
}
}
// be.2ch.net 認証クッキー
if (P2Util::isHostBe2chNet($host) || !empty($_REQUEST['beres'])) {
$cookies_to_send .= ' MDMD=' . $_conf['be_2ch_code'] . ';';
// be.2ch.netの認証コード(パスワードではない)
$cookies_to_send .= ' DMDM=' . $_conf['be_2ch_mail'] . ';';
// be.2ch.netの登録メールアドレス
}
if (!$cookies_to_send) {
$cookies_to_send = ' ;';
}
$request .= 'Cookie:' . $cookies_to_send . "\r\n";
//$request .= 'Cookie: PON='.$SPID.'; NAME='.$FROM.'; MAIL='.$mail."\r\n";
$request .= "Connection: Close\r\n";
// {{{ POSTの時はヘッダを追加して末尾にURLエンコードしたデータを添付
if (strcasecmp($method, 'POST') == 0) {
$post_enc = array();
while (list($name, $value) = each($post)) {
// したらば or be.2ch.netなら、EUCに変換
if (P2Util::isHostJbbsShitaraba($host) || P2Util::isHostBe2chNet($host)) {
$value = mb_convert_encoding($value, 'CP51932', 'CP932');
}
$post_enc[] = $name . '=' . rawurlencode($value);
}
$postdata = implode("&", $post_enc);
$request .= "Content-Type: application/x-www-form-urlencoded\r\n";
$request .= "Content-Length: " . strlen($postdata) . "\r\n";
$request .= "\r\n";
$request .= $postdata;
} else {
$request .= "\r\n";
}
// }}}
// WEBサーバへ接続
$fp = fsockopen($send_host, $send_port, $errno, $errstr, $_conf['http_conn_timeout']);
if (!$fp) {
$errstr = htmlspecialchars($errstr, ENT_QUOTES);
showPostMsg(false, "サーバ接続エラー: {$errstr} ({$errno})<br>p2 Error: 板サーバへの接続に失敗しました", false);
return false;
}
stream_set_timeout($fp, $_conf['http_read_timeout'], 0);
//echo '<h4>$request</h4><p>' . $request . "</p>"; //for debug
fputs($fp, $request);
$start_here = false;
$post_seikou = false;
while (!p2_stream_eof($fp, $timed_out)) {
if ($start_here) {
$wr = '';
while (!p2_stream_eof($fp, $timed_out)) {
$wr .= fread($fp, 164000);
}
$response = $wr;
break;
} else {
$l = fgets($fp, 164000);
//.........这里部分代码省略.........
示例13: postIt
/**
* レスを書き込む or 新規スレッドを立てる
* スレ立ての場合は、$key は空 '' でよい
*
* @return boolean 書き込み成功なら true、失敗なら false
*/
function postIt($host, $bbs, $key, $post)
{
global $_conf, $post_result, $post_error2ch, $popup, $rescount, $ttitle_en, $STYLE;
global $bbs_cgi, $post_cache;
$method = "POST";
$bbs_cgi_url = "http://" . $host . $bbs_cgi;
$purl = parse_url($bbs_cgi_url);
if (isset($purl['query'])) {
$purl['query'] = "?" . $purl['query'];
} else {
$purl['query'] = "";
}
// プロキシ
if ($_conf['proxy_use']) {
$send_host = $_conf['proxy_host'];
$send_port = $_conf['proxy_port'];
$send_path = $bbs_cgi_url;
} else {
$send_host = $purl['host'];
$send_port = $purl['port'];
$send_port = isset($purl['port']) ? $purl['port'] : null;
$send_path = $purl['path'] . $purl['query'];
}
!$send_port and $send_port = 80;
$request = $method . " " . $send_path . " HTTP/1.0" . "\r\n";
$request .= "Host: " . $purl['host'] . "\r\n";
$remote_host = P2Util::getRemoteHost($_SERVER['REMOTE_ADDR']);
$add_user_info = '';
//$add_user_info = "; p2-client-ip: {$_SERVER['REMOTE_ADDR']}";
//$add_user_info .= "; p2-client-host: {$remote_host}";
$request .= "User-Agent: Monazilla/1.00 (" . $_conf['p2name'] . "/" . $_conf['p2version'] . "{$add_user_info})" . "\r\n";
$request .= 'Referer: http://' . $purl['host'] . '/' . "\r\n";
// クライアントのIPを送信するp2独自のヘッダ
$request .= "X-P2-Client-IP: " . $_SERVER['REMOTE_ADDR'] . "\r\n";
$request .= "X-P2-Client-Host: " . $remote_host . "\r\n";
// クッキー
$cookies_to_send = "";
// クッキーの読み込み
$cookie_file = cachePathForCookie($host);
$p2cookies = readCookieFile($cookie_file);
if ($p2cookies) {
foreach ($p2cookies as $cname => $cvalue) {
if ($cname != 'expires') {
$cookies_to_send .= " {$cname}={$cvalue};";
}
}
}
// be.2ch 認証クッキー
// be板では自動Be書き込みを試みる
if (P2Util::isBbsBe2chNet($host, $bbs) || !empty($_REQUEST['submit_beres'])) {
$cookies_to_send .= ' MDMD=' . $_conf['be_2ch_code'] . ';';
// be.2ch.netの認証コード(パスワードではない)
$cookies_to_send .= ' DMDM=' . $_conf['be_2ch_mail'] . ';';
// be.2ch.netの登録メールアドレス
}
!$cookies_to_send and $cookies_to_send = ' ;';
$request .= 'Cookie:' . $cookies_to_send . "\r\n";
//$request .= 'Cookie: PON='.$SPID.'; NAME='.$FROM.'; MAIL='.$mail."\r\n";
$request .= "Connection: Close\r\n";
// {{{ POSTの時はヘッダを追加して末尾にURLエンコードしたデータを添付
if (strtoupper($method) == "POST") {
$post_enc = array();
while (list($name, $value) = each($post)) {
if (!isset($value)) {
continue;
}
// したらば or be.2ch.netなら、EUCに変換
if (P2Util::isHostJbbsShitaraba($host) || P2Util::isHostBe2chNet($host)) {
$value = mb_convert_encoding($value, 'eucJP-win', 'SJIS-win');
}
$post_enc[] = $name . "=" . urlencode($value);
}
$postdata = implode("&", $post_enc);
$request .= "Content-Type: application/x-www-form-urlencoded\r\n";
$request .= "Content-Length: " . strlen($postdata) . "\r\n";
$request .= "\r\n";
$request .= $postdata;
} else {
$request .= "\r\n";
}
// }}}
$maru_kakiko = empty($_POST['maru_kakiko']) ? 0 : 1;
setConfUser('maru_kakiko', $maru_kakiko);
// 書き込みを一時的に保存
$failed_post_file = P2Util::getFailedPostFilePath($host, $bbs, $key);
$cont = serialize($post_cache);
DataPhp::writeDataPhp($failed_post_file, $cont, $_conf['res_write_perm']);
// WEBサーバへ接続
$fp = fsockopen($send_host, $send_port, $errno, $errstr, $_conf['fsockopen_time_limit']);
if (!$fp) {
showPostMsg(false, "サーバ接続エラー: {$errstr} ({$errno})<br>p2 Error: 板サーバへの接続に失敗しました", false);
return false;
}
// HTTPリクエスト送信
//.........这里部分代码省略.........
示例14: downloadSettingTxt
/**
* SETTING.TXT をダウンロードして、パースして、キャッシュする
*
* @access public
* @return true|null|false 成功|更新なし(キャッシュ)|失敗
*/
function downloadSettingTxt()
{
global $_conf;
$perm = $_conf['dl_perm'] ? $_conf['dl_perm'] : 0606;
FileCtl::mkdirFor($this->setting_txt);
// 板ディレクトリが無ければ作る
$modified = null;
if (file_exists($this->setting_srd) && file_exists($this->setting_txt)) {
// 更新しない場合は、その場で抜けてしまう
if (!empty($_GET['norefresh']) || isset($_REQUEST['word'])) {
return null;
// キャッシュが新しい場合も抜ける
} elseif ($this->isSettingSrdCacheFresh()) {
return null;
}
$modified = gmdate('D, d M Y H:i:s', filemtime($this->setting_txt)) . ' GMT';
}
// DL
/*
// PHP5
if (!class_exists('HTTP_Request', false)) {
require 'HTTP/Request.php';
}
*/
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->url, $params);
$modified && $req->addHeader('If-Modified-Since', $modified);
$req->addHeader('User-Agent', 'Monazilla/1.00 (' . $_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) {
$aNewSettingTxt = new SettingTxt($new_host, $this->bbs);
return $aNewSettingTxt->downloadSettingTxt();
}
}
if (!($code == 200 || $code == 206 || $code == 304)) {
//var_dump($req->getResponseHeader());
$error_msg = $code;
}
}
// DLエラー
if (strlen($error_msg)) {
P2Util::pushInfoHtml(sprintf('<div>Error: %s<br>p2 info - %s に接続できませんでした。</div>', hs($error_msg), P2View::tagA(P2Util::throughIme($this->url), hs($this->url), array('target' => $_conf['ext_win_target']))));
touch($this->setting_txt);
// DL失敗した場合(404)も touch する
touch($this->setting_srd);
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, 'SJIS-win', 'eucJP-win');
}
if (false === FileCtl::filePutRename($this->setting_txt, $body)) {
die('Error: cannot write file');
}
chmod($this->setting_txt, $perm);
// パースして
if (!$this->setSettingArrayFromSettingTxt()) {
return false;
}
// srd保存する
if (!$this->saveSettingSrd($this->setting_array)) {
return false;
}
} else {
// touchすることで更新インターバルが効くので、しばらく再チェックされなくなる
touch($this->setting_txt);
// 同時にキャッシュもtouchしないと、setting_txtとsetting_srdで更新時間がずれて、
// 毎回ここまで処理が来る(サーバへのヘッダリクエストが飛ぶ)場合がある。
touch($this->setting_srd);
}
return true;
}
示例15: _detectHostType
/**
* ホストの種類を判定する
*
* @param string $host ホスト名
* @return string ホストの種類
*/
private static function _detectHostType($host)
{
if (P2Util::isHostBbsPink($host)) {
$type = 'bbspink';
} elseif (P2Util::isHost2chs($host)) {
$type = '2channel';
} elseif (P2Util::isHostMachiBbs($host)) {
$type = 'machibbs';
} elseif (P2Util::isHostJbbsShitaraba($host)) {
$type = 'jbbs';
} else {
$type = $host;
}
return $type;
}