• R/O
  • SSH
  • HTTPS

p2-php: コミット


コミットメタ情報

リビジョン980 (tree)
日時2015-01-17 12:57:30
作者akid

ログメッセージ

p2/ for version 1.8.104

変更サマリ

差分

--- p2/trunk/read.php (revision 979)
+++ p2/trunk/read.php (revision 980)
@@ -644,7 +644,7 @@
644644 if (!$lar[1] || !strlen($lar[11])) { // 不正データを削除
645645 continue;
646646 }
647- if ($lar[1] == $key && $lar[11] == $bbs) { // key, bbsで重複回避
647+ if ($lar[1] == $key && $lar[11] == $bbs && $lar[10] == $host) { // key, bbs, hostで重複回避
648648 continue;
649649 }
650650 $newlines[] = $line;
--- p2/trunk/conf/conf_user_def.inc.php (revision 979)
+++ p2/trunk/conf/conf_user_def.inc.php (revision 980)
@@ -319,7 +319,7 @@
319319 // {{{ ■ETC
320320
321321 // 板メニュー(フレーム左)menu の表示幅
322-$conf_user_def['frame_menu_width'] = "164"; // ("164")
322+$conf_user_def['frame_menu_width'] = "166"; // ("166")
323323
324324 // スレ一覧(フレーム右上)subject の表示幅
325325 $conf_user_def['frame_subject_width'] = "40%"; // ("40%")
--- p2/trunk/conf/conf_system.inc.php (revision 979)
+++ p2/trunk/conf/conf_system.inc.php (revision 980)
@@ -3,7 +3,7 @@
33 // このファイルは、特に理由の無い限り変更しないで下さい。
44 // include from conf.inc.php
55
6-$_conf['p2version'] = '1.8.103'; // rep2のバージョン
6+$_conf['p2version'] = '1.8.104'; // rep2のバージョン
77
88 $_conf['p2name'] = 'rep2'; // rep2の名前。
99
--- p2/trunk/edit_aborn_word.php (revision 979)
+++ p2/trunk/edit_aborn_word.php (revision 980)
@@ -102,59 +102,10 @@
102102 }
103103
104104 // }}}
105-// {{{ リスト読み込み
106105
107-$formdata = array();
108-if (file_exists($path)) {
109- $lines = file($path);
110- $i = 0;
111- foreach ($lines as $line) {
112- $lar = explode("\t", rtrim($line, "\r\n"));
113- if (strlen($lar[0]) == 0) {
114- continue;
115- }
116- $ar = array(
117- 'cond' => $lar[0], // 検索条件
118- 'word' => $lar[0], // 対象文字列
119- 'ht' => geti($lar[1]), // 最後にHITした時間
120- 'hn' => geti($lar[2], 0), // HIT回数
121- 're' => '', // 正規表現
122- 'ic' => '', // 大文字小文字を無視
123- 'bbs' => '', // 板
124- 'tt' => '', // タイトル
125- );
126- // 板縛り
127- if (preg_match('!<bbs>(.+?)</bbs>!', $ar['word'], $matches)) {
128- $ar['bbs'] = $matches[1];
129- }
130- $ar['word'] = preg_replace('!<bbs>(.*)</bbs>!', '', $ar['word']);
131- // タイトル縛り
132- if (preg_match('!<title>(.+?)</title>!', $ar['word'], $matches)) {
133- $ar['tt'] = $matches[1];
134- }
135- $ar['word'] = preg_replace('!<title>(.*)</title>!', '', $ar['word']);
136- // 正規表現
137- if (preg_match('/^<(mb_ereg|preg_match|regex)(:[imsxeADSUXu]+)?>(.*)$/', $ar['word'], $m)) {
138- $ar['word'] = $m[3];
139- $ar['re'] = ' checked';
140- // 大文字小文字を無視
141- if ($m[2] && false !== strpos($m[2], 'i')) {
142- $ar['ic'] = ' checked';
143- }
144- // 大文字小文字を無視
145- } elseif (preg_match('/^<i>(.*)$/', $ar['word'], $m)) {
146- $ar['word'] = $m[1];
147- $ar['ic'] = ' checked';
148- }
149- if (strlen($ar['word']) == 0) {
150- continue;
151- }
152- $formdata[$i++] = $ar;
153- }
154-}
106+// NGあぼーんリスト読み込み
107+$formdata = _loadNgAbornDataForEdit($path);
155108
156-// }}}
157-
158109 //=====================================================================
159110 // プリント設定
160111 //=====================================================================
@@ -305,7 +256,7 @@
305256 echo $htm['form_submit'];
306257 ?><br><?php
307258
308-if (!empty($formdata)) {
259+if ($formdata) {
309260 foreach ($formdata as $k => $v) {
310261 printf($row_format,
311262 $k,
@@ -347,6 +298,70 @@
347298 </body></html>
348299 <?php
349300
301+// このファイル内の処理はここまで
302+
303+//=================================================================================
304+// 関数
305+//=================================================================================
306+/**
307+ * NGあぼーんリストを読み込む
308+ *
309+ * @return array
310+ */
311+function _loadNgAbornDataForEdit($path)
312+{
313+ $formdata = array();
314+ if (!file_exists($path)) {
315+ return $formdata;
316+ }
317+ $lines = file($path);
318+ $i = 0;
319+ foreach ($lines as $line) {
320+ $lar = explode("\t", rtrim($line, "\r\n"));
321+ if (strlen($lar[0]) == 0) {
322+ continue;
323+ }
324+ $ar = array(
325+ 'cond' => $lar[0], // 検索条件
326+ 'word' => $lar[0], // 対象文字列
327+ 'ht' => geti($lar[1]), // 最後にHITした時間
328+ 'hn' => geti($lar[2], 0), // HIT回数
329+ 're' => '', // 正規表現
330+ 'ic' => '', // 大文字小文字を無視
331+ 'bbs' => '', // 板
332+ 'tt' => '', // タイトル
333+ );
334+ // 板縛り
335+ if (preg_match('!<bbs>(.+?)</bbs>!', $ar['word'], $matches)) {
336+ $ar['bbs'] = $matches[1];
337+ }
338+ $ar['word'] = preg_replace('!<bbs>(.*)</bbs>!', '', $ar['word']);
339+ // タイトル縛り
340+ if (preg_match('!<title>(.+?)</title>!', $ar['word'], $matches)) {
341+ $ar['tt'] = $matches[1];
342+ }
343+ $ar['word'] = preg_replace('!<title>(.*)</title>!', '', $ar['word']);
344+ // 正規表現
345+ if (preg_match('/^<(mb_ereg|preg_match|regex)(:[imsxeADSUXu]+)?>(.*)$/', $ar['word'], $m)) {
346+ $ar['word'] = $m[3];
347+ $ar['re'] = ' checked';
348+ // 大文字小文字を無視
349+ if ($m[2] && false !== strpos($m[2], 'i')) {
350+ $ar['ic'] = ' checked';
351+ }
352+ // 大文字小文字を無視
353+ } elseif (preg_match('/^<i>(.*)$/', $ar['word'], $m)) {
354+ $ar['word'] = $m[1];
355+ $ar['ic'] = ' checked';
356+ }
357+ if (strlen($ar['word']) == 0) {
358+ continue;
359+ }
360+ $formdata[$i++] = $ar;
361+ }
362+ return $formdata;
363+}
364+
350365 /*
351366 * Local Variables:
352367 * mode: php
--- p2/trunk/doc/ChangeLog.txt (revision 979)
+++ p2/trunk/doc/ChangeLog.txt (revision 980)
@@ -1,3 +1,12 @@
1+2015/01/17
2+ * rep2 version 1.8.104
3+
4+ [更新] Willcom(Y!mobile)とauのIPアドレス帯域を更新した。
5+ [更新] iOSのUA判定を更新した。
6+ [更新] 最近読んだスレで、keyとbbsが同じ場合でもhostが異なれば別のスレとして扱うようにした。
7+ [更新] NGあぼーんの設定で板の指定の大文字と小文字を区別しないようにした。
8+ [更新] ファイル処理をより丁重にした。updateArraySrdFile()
9+
110 2014/05/15
211 * rep2 version 1.8.103
312
--- p2/trunk/lib/SubjectTxt.php (revision 979)
+++ p2/trunk/lib/SubjectTxt.php (revision 980)
@@ -22,8 +22,23 @@
2222 /**
2323 * @constructor
2424 */
25- function SubjectTxt($host, $bbs)
25+ function SubjectTxt(&$host, $bbs)
2626 {
27+ $this->initProperties($host, $bbs);
28+
29+ // subject.txtをダウンロード&セットする
30+ $this->dlAndSetSubject();
31+
32+ // downloadSubject()内のホスト移転検知時に書き換えられた新しいhost情報を反映する
33+ $host = $this->host;
34+ }
35+
36+ /**
37+ * @access private
38+ * @return void
39+ */
40+ function initProperties($host, $bbs)
41+ {
2742 $this->host = $host;
2843 $this->bbs = $bbs;
2944
@@ -38,9 +53,6 @@
3853
3954 $this->subject_file = $this->getSubjectFile($this->host, $this->bbs);
4055 $this->subject_url = $this->getSubjectUrl($this->host, $this->bbs);
41-
42- // subject.txtをダウンロード&セットする
43- $this->dlAndSetSubject();
4456 }
4557
4658 /**
@@ -171,33 +183,38 @@
171183 } else {
172184 $code = $req->getResponseCode();
173185 // 302 Found (Redirection 転送)
174- if ($code == 302) {
186+ // 2010/08/05 「もうずっと人大杉 」でも302を返すことに注意(Location: http://www2.2ch.net/live.html)
187+ // 301 Moved Permanently
188+ if (P2Util::isHost2chs($this->host) and in_array($code, array(302, 301))) { // sc非対応のため2chに絞る
175189 // ホストの移転を追跡
176190 require_once P2_LIB_DIR . '/BbsMap.php';
177- $new_host = BbsMap::getCurrentHost($this->host, $this->bbs);
178191 require_once P2_LIB_DIR . '/SettingTxt.php';
192+ $new_host = null;
193+ if ($location = $req->getResponseHeader('Location')) {
194+ if (preg_match('{https?://(.+?)/[^/]+/subject\\.txt$}', $location, $m)) {
195+ $new_host = $m[1];
196+ }
197+ }
198+ if (!$new_host) {
199+ $new_host = BbsMap::getCurrentHost($this->host, $this->bbs);
200+ }
179201 if (
180202 $new_host != $this->host
181203 // SETTING.TXTの有無で板移転を確認
182- // 2010/08/05 「もうずっと人大杉 」でも302を返す
183- and !in_array(
184- SettingTxt::get2chSettingTxtResponseCode($this->host, $this->bbs),
185- array(200, null), true
186- )
187- and 200 === SettingTxt::get2chSettingTxtResponseCode($new_host, $this->bbs)
204+ and SettingTxt::check2chHostMovedBySettingTxt($new_host, $this->host, $this->bbs)
188205 ) {
189- BbsMap::getCurrentHost($this->host, $this->bbs, true); // autosync
190- $aNewSubjectTxt = new SubjectTxt($new_host, $this->bbs);
191- return $aNewSubjectTxt->downloadSubject();
206+ BbsMap::syncHost($new_host, $this->bbs, $this->host);
207+ $this->initProperties($new_host, $this->bbs);
208+ return $this->downloadSubject();
192209 }
193210 }
194- if (!($code == 200 || $code == 206 || $code == 304)) {
211+ if (!in_array($code, array(200, 206, 304))) {
195212 //var_dump($req->getResponseHeader());
196213 $error_msg = $code;
197214 }
198215 }
199216
200- if (!is_null($error_msg) && strlen($error_msg) > 0) {
217+ if (!is_null($error_msg) && strlen($error_msg)) {
201218 $attrs = array();
202219 if ($_conf['ext_win_target']) {
203220 $attrs['target'] = $_conf['ext_win_target'];
--- p2/trunk/lib/HostCheck.php (revision 979)
+++ p2/trunk/lib/HostCheck.php (revision 980)
@@ -483,7 +483,7 @@
483483 //$regHost = '/^wb\d+proxy\d\d\.ezweb\.ne\.jp$/';
484484 $regHost = '/\.ezweb\.ne\.jp$/';
485485
486- // @updated 2013/12/01
486+ // @updated 2015/01/17
487487 $bands = array(
488488 // EZ兼PCSV。統一されたってことはPCSVもHTTP_X_UP_SUBNOを送信するんだろうか?
489489 '111.107.116.64/26',
@@ -498,9 +498,23 @@
498498 '61.117.2.40/29',
499499 '219.108.158.40/29',
500500 '111.86.142.0/26',
501- '111.86.141.64/26',
502- '111.86.141.128/26',
503501 '111.86.141.192/26',
502+ '27.90.136.0/27',
503+ '27.90.136.32/27',
504+ '27.90.136.64/27',
505+ '27.90.136.96/27',
506+ '27.90.136.128/27',
507+ '27.90.136.160/27',
508+ '27.90.136.192/27',
509+ '27.90.137.192/27',
510+ '27.90.137.224/27',
511+ '27.90.136.224/27',
512+ '27.90.137.0/27',
513+ '27.90.137.32/27',
514+ '27.90.137.64/27',
515+ '27.90.137.96/27',
516+ '27.90.137.128/27',
517+ '27.90.137.160/27',
504518 '111.86.143.192/27',
505519 '111.86.143.224/27',
506520 '111.86.147.0/27',
@@ -517,7 +531,7 @@
517531 '111.86.147.160/27',
518532 '111.86.147.192/27',
519533 '111.86.147.224/27'
520-
534+
521535 // PCSVは含めず
522536 );
523537 return HostCheck::isAddrInBand($addr, $bands, $regHost);
@@ -635,9 +649,9 @@
635649 }
636650
637651 /**
638- * IPは WILLCOM?
652+ * IPは WILLCOM? (Y!mobile)
639653 *
640- * @link http://www.willcom-inc.com/ja/service/contents_service/club_air_edge/for_phone/ip/index.html
654+ * @link http://www.ymobile.jp/service/contents_service/create/center_info/index.html
641655 * @return boolean
642656 * @access public
643657 * @static
@@ -650,7 +664,7 @@
650664
651665 $regHost = '/^[Pp]\d{12}\.ppp\.prin\.ne\.jp$/';
652666
653- // @updated 2013/12/01
667+ // @updated 2015/01/17
654668 $bands = array(
655669 '114.20.49.0/24',
656670 '114.20.50.0/24',
@@ -671,6 +685,7 @@
671685 '114.20.65.0/24',
672686 '114.20.66.0/24',
673687 '114.20.67.0/24',
688+ '114.20.71.0/24',
674689 '114.20.128.0/17',
675690 '114.21.128.0/24',
676691 '114.21.129.0/24',
@@ -694,6 +709,7 @@
694709 '114.21.147.0/24',
695710 '114.21.148.0/24',
696711 '114.21.149.0/24',
712+ '114.21.151.0/24',
697713 '221.109.128.0/18'
698714 );
699715 return HostCheck::isAddrInBand($addr, $bands, $regHost);
--- p2/trunk/lib/BbsMap.php (revision 979)
+++ p2/trunk/lib/BbsMap.php (revision 980)
@@ -37,11 +37,7 @@
3737 $new_host = $map[$type][$bbs]['host'];
3838 if ($host != $new_host && $autosync && !$synced) {
3939 // 移転を検出したらお気に板、お気にスレ、最近読んだスレを自動で同期
40- $msg_fmt = '<p>p2 info: ホストの移転を検出しました。(%s/%s → %s/%s)<br>';
41- $msg_fmt .= 'お気に板、お気にスレ、最近読んだスレを自動で同期します。</p>';
42- $msg = sprintf($msg_fmt, $host, $bbs, $new_host, $bbs);
43- P2Util::pushInfoHtml($msg);
44- BbsMap::syncFav();
40+ BbsMap::syncHost($new_host, $bbs, $host);
4541 $synced = true;
4642 }
4743 $host = $new_host;
@@ -49,9 +45,24 @@
4945
5046 return $host;
5147 }
52-
48+
49+ /**
50+ * @static
51+ * @access public
52+ * @return void
53+ */
54+ function syncHost($new_host, $bbs, $old_host)
55+ {
56+ $msg_fmt = '<p>p2 info: ホストの移転を検出しました。(%s/%s → %s/%s)<br>';
57+ $msg_fmt .= 'お気に板、お気にスレ、最近読んだスレを自動で同期します。</p>';
58+ $msg = sprintf($msg_fmt, $old_host, $bbs, $new_host, $bbs);
59+ P2Util::pushInfoHtml($msg);
60+
61+ BbsMap::syncFavs($new_host, $bbs, $old_host);
62+ }
63+
5364 // }}}
54-
65+
5566 /**
5667 * 2chの板名からホスト名を取得する
5768 *
@@ -116,7 +127,7 @@
116127 * @param boolean $noMsg 結果メッセージのpushを抑制するならtrue
117128 * @return void
118129 */
119- function syncBrd($brd_path, $noMsg = false)
130+ function syncBrd($brd_path, $noMsg = false, $sethost = null, $setbbs = null, $old_host = null)
120131 {
121132 global $_conf;
122133 static $done = array();
@@ -126,14 +137,17 @@
126137 if (array_key_exists($brd_path, $done)) {
127138 return;
128139 }
129- $lines = BbsMap::_readData($brd_path);
130- if (!$lines) {
140+
141+ if (!$lines = BbsMap::_readData($brd_path)) {
131142 return;
132143 }
133- $map = BbsMap::_getMapping();
134- if (!$map) {
144+
145+ if ($sethost && $setbbs && $old_host) {
146+ $settype = BbsMap::_detectHostType($old_host);
147+ } elseif (!$map = BbsMap::_getMapping()) {
135148 return;
136149 }
150+
137151 $neolines = array();
138152 $updated = false;
139153
@@ -149,7 +163,13 @@
149163 $itaj = $data[3];
150164 $type = BbsMap::_detectHostType($host);
151165
152- if (isset($map[$type]) && isset($map[$type][$bbs])) {
166+ $newhost = $host;
167+
168+ if ($settype) {
169+ if ($type == $settype && $bbs == $setbbs) {
170+ $newhost = $sethost;
171+ }
172+ } elseif (isset($map[$type]) && isset($map[$type][$bbs])) {
153173 $newhost = $map[$type][$bbs]['host'];
154174 if ($itaj === '') {
155175 $itaj = $map[$type][$bbs]['itaj'];
@@ -159,8 +179,6 @@
159179 $itaj = '';
160180 }
161181 }
162- } else {
163- $newhost = $host;
164182 }
165183
166184 if ($host != $newhost || $setitaj) {
@@ -199,7 +217,7 @@
199217 * @param boolean $noMsg 結果メッセージのpushを抑制するならtrue
200218 * @return void
201219 */
202- function syncIdx($idx_path, $noMsg = false)
220+ function syncIdx($idx_path, $noMsg = false, $sethost = null, $setbbs = null, $old_host = null)
203221 {
204222 global $_conf;
205223 static $done = array();
@@ -209,14 +227,17 @@
209227 if (isset($done[$idx_path])) {
210228 return;
211229 }
212- $lines = BbsMap::_readData($idx_path);
213- if (!$lines) {
230+
231+ if (!$lines = BbsMap::_readData($idx_path)) {
214232 return;
215233 }
216- $map = BbsMap::_getMapping();
217- if (!$map) {
234+
235+ if ($sethost && $setbbs && $old_host) {
236+ $settype = BbsMap::_detectHostType($old_host);
237+ } elseif (!$map = BbsMap::_getMapping()) {
218238 return;
219239 }
240+
220241 $neolines = array();
221242 $updated = false;
222243
@@ -229,10 +250,14 @@
229250 $bbs = $data[11];
230251 $type = BbsMap::_detectHostType($host);
231252
232- if (isset($map[$type]) && isset($map[$type][$bbs])) {
253+ $newhost = $host;
254+
255+ if ($settype) {
256+ if ($type == $settype && $bbs == $setbbs) {
257+ $newhost = $sethost;
258+ }
259+ } elseif (isset($map[$type]) && isset($map[$type][$bbs])) {
233260 $newhost = $map[$type][$bbs]['host'];
234- } else {
235- $newhost = $host;
236261 }
237262
238263 if ($host != $newhost) {
@@ -267,18 +292,18 @@
267292 * お気に板、お気にスレ、最近読んだスレを同期する
268293 *
269294 * @return void
270- * @access public
295+ * @access private
271296 * @static
272297 */
273- function syncFav()
298+ function syncFavs($new_host, $bbs, $old_host)
274299 {
275300 global $_conf;
276301
277302 $noMsg = UA::isK() ? true : false;
278303
279- BbsMap::syncBrd($_conf['favita_path'], $noMsg);
280- BbsMap::syncIdx($_conf['favlist_file'], $noMsg);
281- BbsMap::syncIdx($_conf['recent_file'], $noMsg);
304+ BbsMap::syncBrd($_conf['favita_path'], $noMsg, $new_host, $bbs, $old_host);
305+ BbsMap::syncIdx($_conf['favlist_file'], $noMsg, $new_host, $bbs, $old_host);
306+ BbsMap::syncIdx($_conf['recent_file'], $noMsg, $new_host, $bbs, $old_host);
282307 }
283308
284309 // }}}
--- p2/trunk/lib/FileCtl.php (revision 979)
+++ p2/trunk/lib/FileCtl.php (revision 980)
@@ -232,6 +232,33 @@
232232 }
233233
234234 /**
235+ * 共有ロックをかけて、ファイル内容を読み込む
236+ *
237+ * @static
238+ * @access public
239+ * @return string|false
240+ */
241+ function fileGetContents($file)
242+ {
243+ if (!$fp = fopen($file, 'rb')) {
244+ return false;
245+ }
246+ $bytes = 12000;
247+ $cont = '';
248+ flock($fp, LOCK_SH);
249+ while (!feof($fp)) {
250+ $line = fgets($fp, $bytes);
251+ if (strlen($line)) {
252+ $cont .= $line;
253+ }
254+ }
255+ flock($fp, LOCK_UN);
256+ fclose($fp);
257+
258+ return $cont;
259+ }
260+
261+ /**
235262 * Windowsでは上書きの rename() でエラーが出るようなので、そのエラーを回避したrename()
236263 * ※ただし、unlink() と rename() の間で一瞬の間が空くので完全ではない。
237264 * 参考 http://ns1.php.gr.jp/pipermail/php-users/2005-October/027827.html
--- p2/trunk/lib/ThreadRead.php (revision 979)
+++ p2/trunk/lib/ThreadRead.php (revision 980)
@@ -313,14 +313,10 @@
313313 if (
314314 $new_host != $this->host
315315 // SETTING.TXTの有無で板移転を確認
316- and !in_array(
317- SettingTxt::get2chSettingTxtResponseCode($this->host, $this->bbs),
318- array(200, null), true
319- )
320- and 200 === SettingTxt::get2chSettingTxtResponseCode($new_host, $this->bbs)
316+ and SettingTxt::check2chHostMovedBySettingTxt($new_host, $this->host, $this->bbs)
321317 ) {
322318 fclose($fp);
323- BbsMap::getCurrentHost($this->host, $this->bbs, true); // autosync
319+ BbsMap::syncHost($new_host, $this->bbs, $this->host);
324320 $this->old_host = $this->host;
325321 $this->host = $new_host;
326322 return $this->downloadDat2ch($from_bytes);
--- p2/trunk/lib/P2Util.php (revision 979)
+++ p2/trunk/lib/P2Util.php (revision 980)
@@ -1618,6 +1618,17 @@
16181618 }
16191619
16201620 /**
1621+ * host が 2ch.sc なら true を返す
1622+ *
1623+ * @access public
1624+ * @return boolean
1625+ */
1626+ function isHost2chSc($host)
1627+ {
1628+ return (bool)preg_match('/\\.(2ch\\.sc)$/', $host);
1629+ }
1630+
1631+ /**
16211632 * host が find.2ch.net(こっそりアンケート) なら true を返す
16221633 *
16231634 * @access public
@@ -2306,13 +2317,21 @@
23062317 */
23072318 function updateArraySrdFile($data, $file)
23082319 {
2309- // 既存のデータをマージ取得
2320+ // 既存のデータ(配列)を取得してマージ
23102321 if (file_exists($file)) {
2311- if ($cont = file_get_contents($file)) {
2312- $array = unserialize($cont);
2313- if (is_array($array)) {
2314- $data = array_merge($array, $data);
2322+ if (false === $cont = FileCtl::fileGetContents($file)) {
2323+ return false;
2324+ }
2325+ if (strlen($cont)) {
2326+ if (false === $array = unserialize($cont)) {
2327+ trigger_error('false === unserialize(), file: ' . hs($file) , E_USER_WARNING);
2328+ return false;
23152329 }
2330+ if (!is_array($array)) {
2331+ trigger_error('not array, file: ' . hs($file) , E_USER_WARNING);
2332+ return false;
2333+ }
2334+ $data = array_merge($array, $data);
23162335 }
23172336 }
23182337
--- p2/trunk/lib/UA.php (revision 979)
+++ p2/trunk/lib/UA.php (revision 980)
@@ -176,12 +176,12 @@
176176
177177 // iPod touch
178178 // Mozilla/5.0 (iPod; U; CPU like Mac OS X; ja-jp) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A110a Safari/419.3
179- if (preg_match('/(iPhone|iPod);/', $ua)) {// || UA::isAndroidWebKit($ua)) { // androidを含めていないのはなんでだっけ?
179+ if (preg_match('/(iPhone|iPod)(?:;| )/', $ua)) {// || UA::isAndroidWebKit($ua)) { // androidを含めていないのはなんでだっけ?
180180 $isiPhoneGroup = true;
181181
182182 // iPad 2010/5/29
183183 // Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; ja-jp) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10
184- } elseif (preg_match('/iPad;/', $ua)) {
184+ } elseif (preg_match('/iPad(?:;| )/', $ua)) {
185185 $isiPhoneGroup = true;
186186 }
187187
--- p2/trunk/lib/SettingTxt.php (revision 979)
+++ p2/trunk/lib/SettingTxt.php (revision 980)
@@ -298,7 +298,8 @@
298298 {
299299 global $_conf;
300300
301- if (!P2Util::isHost2chs($host)) {
301+ // SETTING.TXT対応サイト以外はnullを返す
302+ if (!P2Util::isHost2chs($host) && !P2Util::isHost2chSc($host)) {
302303 return null;
303304 }
304305
@@ -315,7 +316,24 @@
315316 $hr->sendRequest();
316317 return $hr->getResponseCode();
317318 }
318-
319+
320+ /**
321+ * 2chのSETTING.TXTの有無でホストの移転を確認する
322+ *
323+ * @return boolean
324+ */
325+ function check2chHostMovedBySettingTxt($new_host, $old_host, $bbs)
326+ {
327+ if (!in_array(
328+ SettingTxt::get2chSettingTxtResponseCode($old_host, $bbs),
329+ array(200, null), true
330+ )
331+ and 200 === SettingTxt::get2chSettingTxtResponseCode($new_host, $bbs)
332+ ) {
333+ return true;
334+ }
335+ return false;
336+ }
319337 }
320338
321339 // }}}
--- p2/trunk/lib/NgAbornCtl.php (revision 979)
+++ p2/trunk/lib/NgAbornCtl.php (revision 980)
@@ -178,8 +178,17 @@
178178 }
179179
180180 // 板チェック
181- if (strlen($bbs) and isset($v['bbs']) && in_array($bbs, $v['bbs']) == false) {
182- continue;
181+ if (strlen($bbs) and isset($v['bbs'])) {
182+ $bbsmatch = false;
183+ foreach ($v['bbs'] as $b) {
184+ if (strtolower($b) == strtolower($bbs)) {
185+ $bbsmatch = true;
186+ continue;
187+ }
188+ }
189+ if (!$bbsmatch) {
190+ continue;
191+ }
183192 }
184193
185194 // タイトルチェック
--- p2/trunk/iphone/sb_header_k.inc.php (revision 979)
+++ p2/trunk/iphone/sb_header_k.inc.php (revision 980)
@@ -56,7 +56,7 @@
5656 // }}}
5757 // {{{ ページタイトル部分HTML設定
5858
59-$ptitle_hs = hs($aThreadList->ptitle);
59+$ptitle = $aThreadList->ptitle;
6060
6161 if ($aThreadList->spmode == 'taborn') {
6262 $ptitle_ht = <<<EOP
@@ -67,9 +67,9 @@
6767 <a href="{$ptitle_url}"><b>{$aThreadList->itaj_hs}</b></a>(dat倉庫)
6868 EOP;
6969 } elseif (!empty($ptitle_url)) {
70- $ptitle_ht = sprintf('<a href="%s"><b>%s</b></a>', $ptitle_url, $ptitle_hs);
70+ $ptitle_ht = sprintf('<a href="%s"><b>%s</b></a>', $ptitle_url, hs($ptitle));
7171 } else {
72- $ptitle_ht = "<b>{$ptitle_hs}</b>";
72+ $ptitle_ht = sprintf('<b>%s</b>', hs($ptitle));
7373 }
7474
7575 // }}}
@@ -149,7 +149,7 @@
149149 }
150150 // -->
151151 </script>
152-<title><?php eh($aThreadList->ptitle) ?></title>
152+<title><?php eh($ptitle) ?></title>
153153 </head>
154154 <body id="subject">
155155
@@ -156,7 +156,7 @@
156156 <?php $index_uri = UriUtil::buildQueryUri('index.php', array(UA::getQueryKey() => UA::getQueryValue())); ?>
157157 <p><a id="backButton" class="tbutton" href="<?php eh($index_uri); ?>">TOP</a></p>
158158
159-<div class="toolbar"><h1 class="pageTitle"><?php eh($aThreadList->ptitle) ?></h1></div>
159+<div class="toolbar"><h1 class="pageTitle"><?php eh($ptitle) ?></h1></div>
160160 <?php
161161
162162 P2Util::printInfoHtml();
旧リポジトリブラウザで表示