※■公式p2はこのスレでは扱っていません■※
ブラウザから 2ちゃんねる、まちBBS、JBBS@したらばBBS 等の
掲示板を快適に閲覧するためのPHPスクリプトです。
Mac OS X、UNIX、Linux、Windows などで動くマルチプラットフォーム設計。
ソースは公開されています。
※このスクリプトを動作させるためには、サーバを動かしてPHPを走らせる必要があります。
※荒れる元なのでレンタル鯖やVPSにp2を設置する話題はしない&スルーしてください。
※不具合は怒らず煽らず落ち着いて報告しましょう。
■公式ページ
rep2 expack 全部入り for PHP 8.x by (´・ω・) ス
https://github.com/mikoim/p2-php/
rep2 expack 全部入り by open774
https://github.com/open774/p2-php
p2 - PHPでつくった2ch Viewer
http://akid.s17.xrea.com/
p2Wiki
http://akid.s17.xrea.com/p2puki/
■前スレ
rep2 part72
https://egg.5ch.io/test/read.cgi/software/1740874866/
rep2 part73
1名無しさん@お腹いっぱい。
2026/07/22(水) 11:34:42.98ID:b9PL/+wk02026/08/18(火) 22:00:41.14ID:ShFNWum90
>>67
その構成でなんでrep2に変更がいるんだっけ?
rep2のproxyをlocalhost:11080に向けるだけじゃないの?
proxy ON/OFFのチェックボックスは今でもあるからそれ使えばよいし
その構成でなんでrep2に変更がいるんだっけ?
rep2のproxyをlocalhost:11080に向けるだけじゃないの?
proxy ON/OFFのチェックボックスは今でもあるからそれ使えばよいし
71名無しさん@お腹いっぱい。
2026/08/18(火) 22:42:25.22ID:wzympKH00 >>70
そう
rep2側はlocalhost:11080指定+既存のproxy ON/OFFだけで足りる
rep2本体側で追加したのは書き込み画面のUPLIFTくらい
今弄ってるのはADB forwardとEvery Proxyの自動復旧側で
その辺も含めた追加機能は今のところ仮で別画面にまとめてる
https://i.imgur.com/5MplkPz.png
https://i.imgur.com/JojHI5R.png
そう
rep2側はlocalhost:11080指定+既存のproxy ON/OFFだけで足りる
rep2本体側で追加したのは書き込み画面のUPLIFTくらい
今弄ってるのはADB forwardとEvery Proxyの自動復旧側で
その辺も含めた追加機能は今のところ仮で別画面にまとめてる
https://i.imgur.com/5MplkPz.png
https://i.imgur.com/JojHI5R.png
2026/08/18(火) 22:50:12.66ID:O86TrN9T0
次のphpは8.6か
まだ9系にはならんらしい
まだ9系にはならんらしい
2026/08/18(火) 23:21:23.59ID:ShFNWum90
74名無しさん@お腹いっぱい。
2026/08/20(木) 14:26:14.94ID:uo86Xslg0 5chへの書き込みで
「ERROR: ただ今あなたの投稿を拒否しております。」
が出たので追ってみた。
8/20は
12:09:23 1回目のPOST → 投稿成功
12:50:05 2回目のPOST → 上のエラー
という流れ。
Caddyのログでも
2026-08-20T12:09:23.230425+09:00
POST /post.php
duration=2.519
size=1385
status=200
2026-08-20T12:50:05.504801+09:00
POST /post.php
duration=1.891
size=2021
status=200
の2回を確認してる。
Cookie DBの最終更新時刻も12:50:05と一致してる。
「ERROR: ただ今あなたの投稿を拒否しております。」
が出たので追ってみた。
8/20は
12:09:23 1回目のPOST → 投稿成功
12:50:05 2回目のPOST → 上のエラー
という流れ。
Caddyのログでも
2026-08-20T12:09:23.230425+09:00
POST /post.php
duration=2.519
size=1385
status=200
2026-08-20T12:50:05.504801+09:00
POST /post.php
duration=1.891
size=2021
status=200
の2回を確認してる。
Cookie DBの最終更新時刻も12:50:05と一致してる。
75名無しさん@お腹いっぱい。
2026/08/20(木) 14:26:43.31ID:uo86Xslg0 Cookie DBを8/20 06:15のバックアップと比較したところ、
問題発生前
acorn len=393
MonaTicket len=25
BAN なし
問題発生後
acorn len=393 → 同一
MonaTicket len=25 → 同一
BAN len=12 → 新規追加
実際の比較結果は
acorn backup_len=393 current_len=393 same=YES
MonaTicket backup_len=25 current_len=25 same=YES
BAN backup_len=NONE current_len=12 same=NO
だった。
MonaTicketはバックアップを遡ると、少なくとも8/14 20:56から現在まで全部同一。
その間のバックアップにはBANは一度も入ってなかった。
問題発生前
acorn len=393
MonaTicket len=25
BAN なし
問題発生後
acorn len=393 → 同一
MonaTicket len=25 → 同一
BAN len=12 → 新規追加
実際の比較結果は
acorn backup_len=393 current_len=393 same=YES
MonaTicket backup_len=25 current_len=25 same=YES
BAN backup_len=NONE current_len=12 same=NO
だった。
MonaTicketはバックアップを遡ると、少なくとも8/14 20:56から現在まで全部同一。
その間のバックアップにはBANは一度も入ってなかった。
76名無しさん@お腹いっぱい。
2026/08/20(木) 14:30:49.90ID:uo86Xslg0 ソースで気になったのがCookieの保存処理。
post.phpでは5chから返ってきたCookieを
$cookies = $response->getCookies();
if ($cookies) {
foreach ($cookies as $cookie) {
if (!$p2cookies) {
$p2cookies = array();
}
$p2cookies[$cookie['name']] = $cookie['value'];
}
}
としてる。
post.phpでは5chから返ってきたCookieを
$cookies = $response->getCookies();
if ($cookies) {
foreach ($cookies as $cookie) {
if (!$p2cookies) {
$p2cookies = array();
}
$p2cookies[$cookie['name']] = $cookie['value'];
}
}
としてる。
77名無しさん@お腹いっぱい。
2026/08/20(木) 14:32:11.86ID:uo86Xslg0 P2CurlRequest側ではSet-Cookieから
name
value
domain
path
expires
secure
httponly
まで解析してるのに、ここでnameとvalueだけにしてるので、
expires/domain/path等が保存時に落ちてるように見える。
一方、読み込み側には
if (array_key_exists('expires', $p2cookies)) {
if (time() > strtotime($p2cookies['expires'])) {
CookieDataStore::delete($cookie_key);
$p2cookies = null;
}
}
という期限チェックがある。
今の保存形式だとMonaTicket個別のexpiresは管理できてないように見える。
name
value
domain
path
expires
secure
httponly
まで解析してるのに、ここでnameとvalueだけにしてるので、
expires/domain/path等が保存時に落ちてるように見える。
一方、読み込み側には
if (array_key_exists('expires', $p2cookies)) {
if (time() > strtotime($p2cookies['expires'])) {
CookieDataStore::delete($cookie_key);
$p2cookies = null;
}
}
という期限チェックがある。
今の保存形式だとMonaTicket個別のexpiresは管理できてないように見える。
78名無しさん@お腹いっぱい。
2026/08/20(木) 14:34:26.47ID:uo86Xslg0 送信時のurlencodeも疑ったけど、今のMonaTicketでは
raw_len=25
urlencode_len=25
changed=NO
だったので今回はそこではなさそう。
現時点では
古いMonaTicketを保持
↓
5chへ送信
↓
何らかの判定でBANが付く
↓
次の投稿で「ただ今あなたの投稿を拒否しております」
みたいな流れを疑ってる。
ただ、BANが付いた直接原因がMonaTicketなのか、IP/回線側なのかまでは断定できてない。
MonaTicketのexpires管理、更新・削除のSet-Cookie処理、
確認ページ処理が今の5ch仕様に合ってるか、
この辺見てほしい。
raw_len=25
urlencode_len=25
changed=NO
だったので今回はそこではなさそう。
現時点では
古いMonaTicketを保持
↓
5chへ送信
↓
何らかの判定でBANが付く
↓
次の投稿で「ただ今あなたの投稿を拒否しております」
みたいな流れを疑ってる。
ただ、BANが付いた直接原因がMonaTicketなのか、IP/回線側なのかまでは断定できてない。
MonaTicketのexpires管理、更新・削除のSet-Cookie処理、
確認ページ処理が今の5ch仕様に合ってるか、
この辺見てほしい。
79名無しさん@お腹いっぱい。
2026/08/20(木) 14:34:40.41ID:uo86Xslg0 追記。
さっきもう一度書き込もうとしたら同じエラーになったけど、
rep2側のCookieとキーを削除してから書き込んだら正常に投稿できた。
なのでIP/回線だけの固定規制というより、
rep2が保持してるCookieかキーの状態が関係してる可能性が高そう。
ただ今回はCookieとキーを同時に消したので、
どっちが原因だったかまでは切り分けできてない。
さっきもう一度書き込もうとしたら同じエラーになったけど、
rep2側のCookieとキーを削除してから書き込んだら正常に投稿できた。
なのでIP/回線だけの固定規制というより、
rep2が保持してるCookieかキーの状態が関係してる可能性が高そう。
ただ今回はCookieとキーを同時に消したので、
どっちが原因だったかまでは切り分けできてない。
80名無しさん@お腹いっぱい。
2026/08/20(木) 14:41:17.01ID:uo86Xslg0 あと5ch側の情報も調べた。
5ch公式は2025/3/24に専ブラ開発者向けとして、
・yuki=akariを廃止してMonaTicketを使用
・一部専ブラでCookie処理が適切でないケースがある
・新しいCookie取得時は書き込み確認ページを改変せず、確認処理を厳密に行う
と案内してる。
実際の5ch上の報告では、
X-Chx-Error: 0000 Confirmation[Broken MonaTicket]
Set-Cookie: MonaTicket=; expires=...; path=/; domain=.5ch.io
という応答で、壊れたMonaTicketを削除させる挙動も確認されてる。
運用系では、期限切れMonaTicketで
「ERROR: ただ今あなたの投稿を拒否しております。」
になるという報告や、
BAN Cookieが付いた状態だと投稿拒否になり、BANを消すとBBxed表示になるという報告もある。
5ch公式は2025/3/24に専ブラ開発者向けとして、
・yuki=akariを廃止してMonaTicketを使用
・一部専ブラでCookie処理が適切でないケースがある
・新しいCookie取得時は書き込み確認ページを改変せず、確認処理を厳密に行う
と案内してる。
実際の5ch上の報告では、
X-Chx-Error: 0000 Confirmation[Broken MonaTicket]
Set-Cookie: MonaTicket=; expires=...; path=/; domain=.5ch.io
という応答で、壊れたMonaTicketを削除させる挙動も確認されてる。
運用系では、期限切れMonaTicketで
「ERROR: ただ今あなたの投稿を拒否しております。」
になるという報告や、
BAN Cookieが付いた状態だと投稿拒否になり、BANを消すとBBxed表示になるという報告もある。
81名無しさん@お腹いっぱい。
2026/08/20(木) 14:41:32.68ID:uo86Xslg0 それと、さっきもう一度書き込もうとしたら同じエラーだったけど、
rep2側のCookieとキーを削除してから書き込んだら正常に投稿できた。
なのでIP/回線だけの固定規制というより、
rep2側で保持してるCookieかキーの状態が関係してる可能性は高そう。
今回はCookieとキーを同時に消したので、
どっちが原因だったかまでは切り分けできてない。
MonaTicketのexpires管理、更新・削除のSet-Cookie処理、
確認ページ処理が今の5ch仕様に合ってるか、
この辺見てほしい。
rep2側のCookieとキーを削除してから書き込んだら正常に投稿できた。
なのでIP/回線だけの固定規制というより、
rep2側で保持してるCookieかキーの状態が関係してる可能性は高そう。
今回はCookieとキーを同時に消したので、
どっちが原因だったかまでは切り分けできてない。
MonaTicketのexpires管理、更新・削除のSet-Cookie処理、
確認ページ処理が今の5ch仕様に合ってるか、
この辺見てほしい。
2026/08/20(木) 15:43:54.68ID:8WXZCmmf0
去年の夏ぐらいからMonaTicketはexpires通りに失効させないとBBx送りされる
自分は動けばいいからpost.phpにてきとー修正したけど
自分が使ってるのはopen774がフォークするより前の古のものがベースだから正確じゃないかもだけど
https://github.com/open774/p2-php/commit/e7023ce6d3dae54fa1a8d4944eb4f1669904c640
これでexpiresとかは捨てるようになったっぽいな
これ以前は捨てずにストアするけど同じドメインの複数のcookieにexpiresが設定されることを想定されてない実装だった
自分は動けばいいからpost.phpにてきとー修正したけど
自分が使ってるのはopen774がフォークするより前の古のものがベースだから正確じゃないかもだけど
https://github.com/open774/p2-php/commit/e7023ce6d3dae54fa1a8d4944eb4f1669904c640
これでexpiresとかは捨てるようになったっぽいな
これ以前は捨てずにストアするけど同じドメインの複数のcookieにexpiresが設定されることを想定されてない実装だった
2026/08/20(木) 21:05:44.26ID:tFesyUim0
情報助かるわー
なんでexpiredの処理ってこれで大丈夫なん?って不思議に思ってたけど、
やっぱ駄目だって話か
今ってexpiredを覚えてないからまともに対応するならDB変更ですな
外部でも同じようなことは起こってもおかしくないし、
なるべく本物ぽい動きになるように修正しますわ
rep2-allinoneの話を片付けてからになりそうだけど
なんでexpiredの処理ってこれで大丈夫なん?って不思議に思ってたけど、
やっぱ駄目だって話か
今ってexpiredを覚えてないからまともに対応するならDB変更ですな
外部でも同じようなことは起こってもおかしくないし、
なるべく本物ぽい動きになるように修正しますわ
rep2-allinoneの話を片付けてからになりそうだけど
84名無しさん@お腹いっぱい。
2026/08/20(木) 21:20:35.75ID:uo86Xslg0 ImageCache2について調査したところ、
i.imgur.com取得時に稀にDNSタイムアウト(x02)が発生する場合がある。
原因は5秒のconnect_timeoutで、DNSやCDN側の一時的な遅延でもエラーDB(ic2_errors)に保存され、そのURLは通常再取得されない仕様。
設定を5秒→10秒に変更すると緩和できるが、根本的には一時的なx02と404などの恒久エラーを分けて扱えると良いのかも。
i.imgur.com取得時に稀にDNSタイムアウト(x02)が発生する場合がある。
原因は5秒のconnect_timeoutで、DNSやCDN側の一時的な遅延でもエラーDB(ic2_errors)に保存され、そのURLは通常再取得されない仕様。
設定を5秒→10秒に変更すると緩和できるが、根本的には一時的なx02と404などの恒久エラーを分けて扱えると良いのかも。
2026/08/21(金) 01:48:47.51ID:2sbsw28H0
>>84
異常系ってめんどくさい。
直感的には指摘通りちょっと変だなとは思うけど、実装を見た感じそこまでおかしいとは思えなかった。
getter_conn_timeoutだけじゃなくてgetter_read_timeoutもx02にしてるようだ。
getter_conn_timeoutで弾くのは相手がDROPしてたらそこを延々と叩くのはどうなのって話でそのためにある設定だと思えばあっているように思える。
x02に落とす条件は他にもあるけど他も含めて網羅的に検証して提案してくれるなら検討の余地は十分あるけど、
これ以上は自主的にやろうとは思えなかった。
異常系ってめんどくさい。
直感的には指摘通りちょっと変だなとは思うけど、実装を見た感じそこまでおかしいとは思えなかった。
getter_conn_timeoutだけじゃなくてgetter_read_timeoutもx02にしてるようだ。
getter_conn_timeoutで弾くのは相手がDROPしてたらそこを延々と叩くのはどうなのって話でそのためにある設定だと思えばあっているように思える。
x02に落とす条件は他にもあるけど他も含めて網羅的に検証して提案してくれるなら検討の余地は十分あるけど、
これ以上は自主的にやろうとは思えなかった。
2026/08/25(火) 19:09:17.97ID:hqLPkwXX0
スレのURL(例えば>>1の前スレのURL)を普通に開くと問題ないですが、[p]でポップアップで開くと以下のエラーがでます
PHP Warning: Trying to access array offset on null in/lib/ShowThreadPc.php on line 138
PHP Warning: Undefined variable $res1 in /lib/read_footer.inc.php on line 83
PHP Warning: Trying to access array offset on null in /lib/read_footer.inc.php on line 83
PHP Warning: Trying to access array offset on null in/lib/ShowThreadPc.php on line 138
PHP Warning: Undefined variable $res1 in /lib/read_footer.inc.php on line 83
PHP Warning: Trying to access array offset on null in /lib/read_footer.inc.php on line 83
87名無しさん@お腹いっぱい。
2026/08/26(水) 12:02:52.23ID:KcPOxBA502026/08/27(木) 01:51:41.25ID:96b1QJhR0
talkスレでfooterの元スレリンクのポップアップで>>1とか1-10とか1-100とかあるんだけど、
スラッシュが抜けてるんでリンク先が404になります
スラッシュが抜けてるんでリンク先が404になります
2026/08/27(木) 19:14:33.83ID:OXP5HGFj0
80,82の指摘を修正した
更新後はデータ構造変更により古いクッキーは捨てるのでどんぐり基地へ再ログインすること
警備員○はどうしようもないので作り直し
86と88はまだ未調査
更新後はデータ構造変更により古いクッキーは捨てるのでどんぐり基地へ再ログインすること
警備員○はどうしようもないので作り直し
86と88はまだ未調査
90名無しさん@お腹いっぱい。
2026/08/28(金) 04:55:09.73ID:jk0zA8ah0 >>89
ありがとうございました
ありがとうございました
2026/08/28(金) 21:10:17.98ID:Wj3QyCn70
2026/08/28(金) 21:26:25.75ID:Wj3QyCn70
クッキーの期限対応の後、動きを見た感じ以下のようになってそう。
どんぐり基地からは acorn が無期限が送られてくる。
post.phpすると acorn は4日後のAM9時、MonaTicket は14日後のAM9時、が送られてきて更新。
その後はpost.phpでは期限の更新はされないみたい。
acorn はpost.php側にどんぐり基地からの自動取得が入れてあるのでそれで救う想定。
MonaTicket の方は切れたら確認画面挟んで更新するみたいな動きになりそう。
どんぐり基地側に専ブラのどうのって設定があるから、
もしかするとその設定によっては特殊なヘッダーでなんか来てたりするのだろうか(未調査)
どんぐり基地からは acorn が無期限が送られてくる。
post.phpすると acorn は4日後のAM9時、MonaTicket は14日後のAM9時、が送られてきて更新。
その後はpost.phpでは期限の更新はされないみたい。
acorn はpost.php側にどんぐり基地からの自動取得が入れてあるのでそれで救う想定。
MonaTicket の方は切れたら確認画面挟んで更新するみたいな動きになりそう。
どんぐり基地側に専ブラのどうのって設定があるから、
もしかするとその設定によっては特殊なヘッダーでなんか来てたりするのだろうか(未調査)
2026/09/03(木) 19:33:53.94ID:a5cI1mIc0
fukumenです
docker-rep2とrep2-allinoneをp2-phpのdeployの下へ移動してp2-phpへ統合する計画をしています
統合が完了次第、docker-rep2とrep2-allinoneはアーカイブ化して以降はp2-php側のみメンテします
また、p2-phpデフォルトブランチをphp8-merge-mbstringからmainに変更します
プランは大体まとまったので来週末あたりまでにまとめて実施してpushする予定ですが、
考慮漏れはありそうなので五月雨式の変更が入るかも
ユースケース別の変化点
↓
https://i.ibb.co/5hgCDjCP/9d973aafdcdb.png
docker-rep2とrep2-allinoneをp2-phpのdeployの下へ移動してp2-phpへ統合する計画をしています
統合が完了次第、docker-rep2とrep2-allinoneはアーカイブ化して以降はp2-php側のみメンテします
また、p2-phpデフォルトブランチをphp8-merge-mbstringからmainに変更します
プランは大体まとまったので来週末あたりまでにまとめて実施してpushする予定ですが、
考慮漏れはありそうなので五月雨式の変更が入るかも
ユースケース別の変化点
↓
https://i.ibb.co/5hgCDjCP/9d973aafdcdb.png
2026/09/16(水) 12:35:54.18ID:GhwanBXv0
Macをアップグレードしたら書き込みウィンドウが最大化で表示されるようになった
Safari 27なんだけど26のときは問題なかったから、Safariの仕様が変わったのかな
Safari 27なんだけど26のときは問題なかったから、Safariの仕様が変わったのかな
レスを投稿する
ニュース
- 【実況】ショートスリーパー堀大輔、7日間LIVE完走★39 [爆笑ゴリラ★]
- トランプ氏、イランとの戦闘終結時に「米国を助けなかった世界各国が、米国が負担した分の費用を支払うべき」 [Hitzeschleier★]
- 「こんなのは知事選挙じゃない」「政策で選べよ」「人物で選べよ」 玉城デニー氏、 「誹謗中傷」に怒りにじませる [Hitzeschleier★]
- 【MLB】村上宗隆を「ベンチに下げるべき」 消えた打棒に米国人辛辣「彼以外なら誰でもいい」 8月以降は153打数で打率.131、三振率41.8% [ちょこ★]
- 「セックスしたことある?」に「いい歳をして恥ずかしくないんですか」50~60代の薄毛眼鏡の男の声かけに、女子高生が一喝 [Hitzeschleier★]
- ラーメンの適正価格はいくら?ラーメン評論家が感じる「違和感」 [muffin★]
- 【実況】博衣こよりのえちえちホロ甲2026_2年目夏🧪 ☆3
- 【悲報】習近平、逝きそう [199590541]
- サウジアラビア「助けて!東、南、北の3方向から攻撃受けてるの!」トランプ「そう・・・(無関心)」 [303493227]
- ダブちゃんきたよぉ👊😅👊🏡
- 【朗報】高市早苗「革命的な人事になる」→小野田大臣(35)続投か [834922174]
- インフレ負けしたガスト、炎上… [667744927]