探検


rep2 part73

1名無しさん@お腹いっぱい。
垢版 |
2026/07/22(水) 11:34:42.98ID:b9PL/+wk0
※■公式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/
43名無しさん@お腹いっぱい。
垢版 |
2026/08/18(火) 12:43:32.57ID:wzympKH00
>>41
ほとんどって誰のこと?
返すとそのIDはいなくなって別IDが一言ずつ出てくるけど
少なくともこの流れで「ほとんどの人」は無理がない?
2026/08/18(火) 13:02:28.82ID:xJfODT2z0
正確に伝わった人が一人もいない時点で・・・
2026/08/18(火) 13:03:03.77ID:l22IOVcn0
泥ならchmate一択だもんな
46名無しさん@お腹いっぱい。
垢版 |
2026/08/18(火) 13:05:18.71ID:wzympKH00
>>44
「ほとんど」の次は「一人もいない」か
単発で一言ずつ絡んでくるのまで人数に数えられてもね
まあ色々察するけど
2026/08/18(火) 13:12:00.30ID:B7yAhFwE0
単発にこだわるの意味わからん
気狂いに何度も触りたくないだけだよ
満足した?
48名無しさん@お腹いっぱい。
垢版 |
2026/08/18(火) 13:16:00.47ID:wzympKH00
>>47
そこ?
単発が本題じゃなくて
「ほとんどの人」って言う根拠を聞いてるんだけど
答えられずに気狂い呼ばわりで終わり?
2026/08/18(火) 13:23:30.13ID:O86TrN9T0
Androidで2ch/5chを見たことがない
私物のスマホはiPhoneしか持ったことがない
2026/08/18(火) 13:24:25.44ID:9hR3uhLR0
全員が君にレスしてると思わないほうがいいんじゃないの
俺は君に対してのレスのつもりはないし
51名無しさん@お腹いっぱい。
垢版 |
2026/08/18(火) 13:35:26.66ID:wzympKH00
>>50
>>39で「全員が自分と同じとはおもわないでネ」って
じゃあ誰に言ってたの?
俺が>>40で返した時には何も言わなかったのに今さらそれ?
2026/08/18(火) 13:51:03.36ID:9hR3uhLR0
俺は>>33に対して言ったつもり
33は「知っててあたりまえ」の態度だろ
あとずっと張り付いてここにいるわけじゃないんだから、即レス当たり前も思わないでね
君に対してのレスじゃないんだから、君に返事しないのも当たり前では?
機能追加がよいとかわるいとか一言もいってねえし、俺にかみつく必要ゼロなんじゃねーの、しらんけど
2026/08/18(火) 14:10:33.71ID:lltzMDp30
お前が知らないのは仕方がないが、知らないことを盾に噛みつきまくってるのがマジで怖い。
ワシも使ったことないけどどの板でも一度は目にする話題だろ。
rep2使うほど5chにどっぷりならなおさら。
自分が少数派だと自覚した方がいい。まちBBS専用で使ってるんか?
2026/08/18(火) 14:32:10.69ID:3qUWhh9Y0
名前は聞いたことあるしAndroidではこれ一択らしいってことも知ってるけど、
Android持ってないから使ったことないしどんな機能があるかなんて知らん
2026/08/18(火) 14:54:17.14ID:9hR3uhLR0
目にしたものは全部覚えないといけないの?大変そうだね
興味ないものをいちいち覚えようとか思わんのだが、君は違うんだね
いちいちかみつきたいわけでもないけど、君のいう当たり前は当たり前じゃないよとは言っておきたいよ、その前提で話進められたら困るし
56名無しさん@お腹いっぱい。
垢版 |
2026/08/18(火) 15:19:14.50ID:wzympKH00
NGあぼーん周りで再現性のあるバグを見つけたので共有。
ngaborn_auto有効時にIDのないレスがaborn_msgにヒットすると、NgAbornCtl::ngAbornAdd('aborn_auto', $id); に$id=NULLのまま渡って空文字がaborn_autoに追加される。
その後 strpos($date_id, '') !== false になるため、以降のレスまでaborn_auto扱いで消える。
自分の環境では、荒らしが多用する文言対策としてcryptocoin板に「ありません。」をNG登録していたところ、1002番「Over 1000 Thread」のUPLIFT案内にある「会員登録には個人情報は一切必要ありません。」がヒットして発生。
1002番はIDなしなので、自動NG ID登録で空IDがaborn_autoに追加されていた。
PC版では_makeQuotes()が表示範囲に関係なく全レスを走査するため、ls=9nでレス9だけ表示していても1002番まで処理されて発症。
同じPCでもb=iでは再現しなかった。
NgAbornCtl::ngAbornAdd()の先頭に if ($word === null || $word === '') { return false; } を追加し、既存の空aborn_autoを削除したところ正常化。
その後も空ルールの再生成なし。
_readNgAbornFromFile()側では元々空文字をcontinueしているので、追加側でもNULLや空文字を弾くのが妥当だと思う。
2026/08/18(火) 15:21:54.27ID:hKI+NLq+0
まあ日本語も分かりやすく書けない人が書いたプログラムはちょっと信用しづらいというのはあるな
なのでfukumen氏がpullしたらくらいでいいかな、forkしてまでは使おうと思わない
58名無しさん@お腹いっぱい。
垢版 |
2026/08/18(火) 15:22:17.37ID:wzympKH00
「目にしたもの全部覚えろ」なんて誰も言ってないな
知らないのは仕方ないって最初から言われてるのに
「自分が知らない=当たり前じゃない」にしたいから話を極端にしてる
似たような人が不思議とここには多いんだな
59名無しさん@お腹いっぱい。
垢版 |
2026/08/18(火) 15:30:21.25ID:wzympKH00
ここ1週間で見つけたrep2本体側の不具合メモ

・複数タブで投稿フォームを開いた時のupload_token問題
post_form_options.inc.phpでupload_tokenの扱いがタブ間で不安定になり、複数タブを開いているとアップロードが失敗するケースがあった
セッション中は同じupload_tokenを使うようにして解消
複数タブで正常動作確認済み
2026/08/18(火) 15:47:16.06ID:9hR3uhLR0
>>58
お前に言ってんじゃねえっつってんだろwww
2026/08/18(火) 15:48:38.53ID:ShFNWum90
なんか荒れてるな

>>24
PRは基本ウェルカムだが、気になったこと

>LANに繋いだServerにスマホ繋いで書き込み専用回線(chmateのモバイル回線で書くみたいな機能)
前スレであったIF指定できるようにするようなやつかな
doc用意することと(ないと普通の人が使えると思えない)とdockerをどうするか次第かな

>UPLIFTのONOFF/OFFを書き込み画面に追加
README-login5ch.mdに書いたようにあえて用意していないんだけどchmateはやれるようになってるの?
今でも書き込みは偶にクッキー消さないと復帰できなくなるし、これやってもも大丈夫そう?
tora3を使えば従来どおり切り替えできるから、切り替えしたいならそちらでいいじゃんと思ってる

>アップロードした画像を確認して削除したりできる機能
catboxに対応したようだけど、これってcatboxにログインして消すのとどう違うの?
どういうUIなんだろう?
read.php側にUIを追加するのだろうか?

>キーワードと合致するスレを上に上げる機能
これは面白そうだと思った

あと今ってdocker-rep2とrep2-allinoneがrep2と別になってしまってるからフォークすると後が面倒だろうから
rep2に入れた方がいいんじゃないのとも思うんだがそれも面倒でそのままという
2026/08/18(火) 16:04:56.23ID:ShFNWum90
>>59
どこで $_SESSION['upload_token'] をセットするようにして確認したの?
今の場所で値が入ってたら入れないみたいな感じかな?
63名無しさん@お腹いっぱい。
垢版 |
2026/08/18(火) 17:52:17.26ID:wzympKH00
>>62
そう
今の場所で値がなければ生成して、入ってたらそのまま使うようにした
同じセッション中は毎回作り直さない感じ
64名無しさん@お腹いっぱい。
垢版 |
2026/08/18(火) 18:02:23.66ID:wzympKH00
>>61
スマホ回線のやつは正直docを書いても普通の人にはちょっと厳しいと思う
Every ProxyとADBまで触るので、今のところは分かる人向けかな
触れる人も限られるし、自分個人で使えてれば別にいいので
自分用としてはかなり便利だから作ってる感じ

逆に画像管理とかUPLIFTのON/OFFあたりは、他の人にも普通に使ってもらえたらいいなと思って付けてる
その辺はある程度まとまったらPRできる形に整理してみたい
65名無しさん@お腹いっぱい。
垢版 |
2026/08/18(火) 18:33:29.64ID:5lXSz9kp0
>>60
俺も安価なしで書いてみたけど普通に自分への言及だと分かったみたいだね
じゃあ>>39を俺がそう受け取ったのも別におかしくなかったってことでは
2026/08/18(火) 20:49:07.09ID:ShFNWum90
56と59の指摘は妥当そうなので修正した

>>64
LAN上に副回線がいてポリシーベースルーティング(PBR)を使うのを想定したけど違いそうだな

なんでADBが出てくるんだろうと思ったけど、
rep2が動いてるLinuxにUSBでAndroidを接続するみたいな感じなんだろうか
USBテザリングでもPBRで出来そうな気がするけどなんでADBが出てくるんだろう

何れにせよPRするなら内容毎に分けないと拒否する

書き込み出来ない系の訴えはいつも困っているので変な変更を入れたくない
UPLIFTのON/OFFに問題がない根拠を出せないなら拒否するだろうけど、
そのまま放置しとけばgh prですぐ使える改造集みたいになるしそれでいいかなとも思った

tora3の切り替えが残してあるのは過去実績が一応あるから

rep2-allinoneは↓の問題でビルド出来ない
https://github.com/fukumen/rep2-allinone/issues/1
どうしようかなあ
67名無しさん@お腹いっぱい。
垢版 |
2026/08/18(火) 21:05:47.60ID:wzympKH00
>>66
56と59修正ありがとう

スマホ回線の方はだいたいそんな感じだけど、USBテザリングをNICとして使ってPBRしてるわけじゃないかな

今は楽天HandでEvery ProxyのSOCKSを動かして
Linux側のlocalhost:11080→adb forward→スマホの1080→Every Proxy→モバイル回線
って流れ

ADB使ってるのはforwardだけじゃなくて、Every Proxyが落ちた時の起動や接続復旧もLinux側から自動化してるから
あとブラウザからスマホの機内モードをON/OFFして回線をつなぎ直すこともできるようにしてる

なのでこれはかなり自分の環境特化
楽天Hand+Every Proxy+ADBまで含めると一般向け機能としてPRするようなものではないと思う

自分は固定回線から居住地域が分かるのが嫌で、書き込みはずっとモバイル回線使ってる
同じように投稿用の回線を分けたい人には便利かもしれないけど、かなり用途は限られるとは思う
68名無しさん@お腹いっぱい。
垢版 |
2026/08/18(火) 21:12:35.65ID:wzympKH00
>>66
PRはもちろん機能ごとに分けるつもり

UPLIFTのON/OFFは今のところ自分の環境では問題出てないけど
書き込み周りだし、これだけで問題ない根拠にはならないと思う
もう少し使って確認して、出せそうなら単独でPRする感じかな

拒否になってもgh prですぐ使える改造として残せるなら誰かの役に立てそう

rep2-allinoneはそんな問題あったのか
自分はallinone使ってるので、そこ直るとありがたい
2026/08/18(火) 21:36:12.17ID:LoKYdP1U0
先日マカーってバカにされたのが悔しかったのか
2026/08/18(火) 22:00:41.14ID:ShFNWum90
>>67
その構成でなんで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
2026/08/18(火) 22:50:12.66ID:O86TrN9T0
次のphpは8.6か
まだ9系にはならんらしい
2026/08/18(火) 23:21:23.59ID:ShFNWum90
前スレの↓かと思ってた
https://egg.5ch.io/test/read.cgi/software/1740874866/789

全然違う話だった
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と一致してる。
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は一度も入ってなかった。
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'];
}
}

としてる。
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は管理できてないように見える。
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仕様に合ってるか、
この辺見てほしい。
79名無しさん@お腹いっぱい。
垢版 |
2026/08/20(木) 14:34:40.41ID:uo86Xslg0
追記。

さっきもう一度書き込もうとしたら同じエラーになったけど、
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表示になるという報告もある。
81名無しさん@お腹いっぱい。
垢版 |
2026/08/20(木) 14:41:32.68ID:uo86Xslg0
それと、さっきもう一度書き込もうとしたら同じエラーだったけど、
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が設定されることを想定されてない実装だった
2026/08/20(木) 21:05:44.26ID:tFesyUim0
情報助かるわー
なんで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などの恒久エラーを分けて扱えると良いのかも。
2026/08/21(金) 01:48:47.51ID:2sbsw28H0
>>84
異常系ってめんどくさい。

直感的には指摘通りちょっと変だなとは思うけど、実装を見た感じそこまでおかしいとは思えなかった。
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
87名無しさん@お腹いっぱい。
垢版 |
2026/08/26(水) 12:02:52.23ID:KcPOxBA50
rep2をサーバーにして
chmate繋げられた
読み込みと書き込みはオッケー
完成までにはまだかかりそうだけど
https://i.imgur.com/pUu2I61.png
2026/08/27(木) 01:51:41.25ID:96b1QJhR0
talkスレでfooterの元スレリンクのポップアップで>>1とか1-10とか1-100とかあるんだけど、
スラッシュが抜けてるんでリンク先が404になります
2026/08/27(木) 19:14:33.83ID:OXP5HGFj0
80,82の指摘を修正した
更新後はデータ構造変更により古いクッキーは捨てるのでどんぐり基地へ再ログインすること
警備員○はどうしようもないので作り直し

86と88はまだ未調査
90名無しさん@お腹いっぱい。
垢版 |
2026/08/28(金) 04:55:09.73ID:jk0zA8ah0
>>89
ありがとうございました
2026/08/28(金) 21:10:17.98ID:Wj3QyCn70
>>86
>>88
修正しました

86の方は実害がある警告でした
2026/08/28(金) 21:26:25.75ID:Wj3QyCn70
クッキーの期限対応の後、動きを見た感じ以下のようになってそう。

どんぐり基地からは 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
レスを投稿する


ニューススポーツなんでも実況