zanteilog
  あやしいわーるど＠暫定 過去ログ ミラー・検索スクリプト
  Version 2026-07-14


◇概要
  https://museum.heyuri.net/zantei/ に保管されている「あやしいわーるど＠暫定」の、
  現存し公開されている過去ログのミラー・全文検索スクリプトです。


◇製作方針
  速く、軽く、確実に。


◇動作環境【重要】
  動作要件　　：PHP 7.4 以上（追加拡張は不要。mbstringも不要）
  動作確認済み：PHP 8.4（qptns.com 本番環境）
              　PHP 8.3.6（開発時のローカル環境）


◇注意
  本スクリプトはzantei*.htmlファイル（元のログファイル）を一切改変しません。
  検索・表示はすべて元ファイルを読み込んで都度処理する方式です
  （「アーカイブは弄らない」の原則）。


◇ログデータの出自
  同梱のzantei*.htmlは https://museum.heyuri.net/zantei/ のミラーです。
  museum.heyuri.net/zantei/ 自体は、zantei.php.xdomain.jp/old/log/ の
  Wayback Machineスナップショット（2024/08/04）を元に、Cloudflareの
  リバースプロキシ経由での配信に対応するためUTF-8へ変換したものです
  （出典：Heyuri管理者kaguya氏、2026/7/13 devchatでの発言）。


◇使用方法

 (1)アーカイブに含まれているファイルを確認します。
    ファイルリストは次の通りです。
      zanteilog/
          index.php
      css/
          sw.css
      readme.txt
    実際の運用には、これらのファイルの他に zantei*.html（過去ログ本体、
    20020104.html 形式のファイル名）と heyuri-zantei-checksums.html が
    index.php と同じディレクトリに必要です。運用時の全体構成は次の通り
    になります。
      z/
          zanteilog/
              index.php
              20020104.html
              20020105.html
              ...
              heyuri-zantei-checksums.html
          css/
              sw.css

 (2)ファイルをアップロードします。
    zanteilog/ ディレクトリと css/ ディレクトリを、同じ階層に配置してくだ
    さい（index.php は ../css/sw.css を相対パスで参照します）。

 (3)動作確認を行います。
    一覧表示・検索・トピック一覧・ページ送りが正常に行われていることを確認
    します。


◇機能

  ・全文検索（AND/OR、投稿者名のみ、大文字小文字区別なし）
  ・ファイル単位でのチェックボックス絞り込み（未選択時は全件が対象）
  ・トピック一覧（各ログファイルの投稿タイトル・冒頭文の一覧表示）
  ・ページング（前へ/次へ、現在ページ±2、先頭/末尾）
  ・検索結果ハイライト表示


◇変更点

  2026-07-12 22:23
  ［変更箇所］
    ・index.php 初版。検索アルゴリズムをHeyuri/ksphp-plusのbbslog.php
      （Getlogクラス）から移植（バッファ分割・ハイライト用正規表現・
      「はN件見つかりました」の文言など）。

  2026-07-12 22:49
  ［変更箇所］
    ・各投稿の後ろに区切り線<hr>を追加。

  2026-07-12 23:37
  ［変更箇所］
    ・ファイル見出し直後にも<hr>を追加（template.htmlの構成に準拠）。

  2026-07-12 23:43
  ［変更箇所］
    ・motoikenkichi.com側の共通処理（アクセスログ・Last-Modifiedヘッダ・
      タイムゾーン設定）をindex.php先頭に統合。

  2026-07-13 00:24
  ［修正箇所］
    ・sitemap_autobuild.phpのrequireが原因のHTTP 500エラーを修正
      （qptns.com側には存在しないファイルだったため、該当処理を削除）。

  2026-07-13 00:43
  ［変更箇所］
    ・「最終更新」表示（JST/ISO 8601）と、それをJSで同期する処理を追加。

  2026-07-13 01:13
  ［変更箇所］
    ・検索結果の件数上限を撤廃し、300件区切りのページング機能を実装
      （初期版：usamin式「現在・次・省略記号・末尾2ページ」表示）。

  2026-07-13 05:42
  ［変更箇所］
    ・ページ上下移動用の▲▼スキップリンクを追加。

  2026-07-13 09:25
  ［修正箇所］
    ・mbstring依存（mb_strtolower）を除去し、stripos/strposベースに統一。
  ［変更箇所］
    ・チャンク単位の事前ふるい分けを追加し、検索処理を約2倍高速化。

  2026-07-13 09:27
  ［修正箇所］
    ・高頻度検索語（顔文字など、10万件超ヒットするケース）でHTTP 500に
      なる不具合を修正。全件走査時は生HTMLチャンクを保持せず軽量な参照
      のみ保持し、表示する300件分だけ後から取得する方式に変更
      （最悪ケースで実行時間16.3秒→1.8秒、メモリ184MB→79MBに改善）。

  2026-07-13 09:48
  ［変更箇所］
    ・一覧表示に月単位の<hr>区切りを追加（当初は年単位だったものを変更）。
    ・ファイル単位のチェックボックス絞り込み（f[]、全選択／解除、
      ページャーへの選択状態引き継ぎ）を実装。

  2026-07-13 10:32
  ［変更箇所］
    ・トピック一覧機能を実装（投稿タイトル欄の抽出、空タイトル時は
      本文抜粋にフォールバック）。
  ［修正箇所］
    ・トピック一覧で各行の改行が出力されない不具合を修正
      （PHPの「?>直後の改行を1つ飲み込む」仕様が原因）。
    ・「＞投稿者名」のみのタイトル（実質ノイズ）を空扱いにして
      本文抜粋へフォールバックするよう修正。
    ・引用行除去処理（bbstree.phpのgentree()を移植）をフォールバック時の
      本文抜粋に適用。
    ・上記の引用除去が、アーカイブの年代によって改行コード（\r\n / \n）
      や引用の囲み方（<FONT color="#ffffff">でまとめる形式）が異なる
      ケースに対応できていなかった不具合を修正。

  2026-07-13 10:37
  ［変更箇所］
    ・ファイル冒頭にライセンス表記（Copyright (c) 2026 MOTOI Kenkichi,
      MIT License）を追加。

  2026-07-13 10:48
  ［変更箇所］
    ・ページャーを新仕様に全面書き換え（前へ/次へ＋現在ページ±2の近傍窓
      ＋先頭/末尾ページ単独表示、ページ番号は1始まりで表示）。
    ・末尾に実行時間表示（実行時間 : X.XXXX秒）を追加。

  2026-07-13 10:52
  ［修正箇所］
    ・ファイル選択の件数カウンタが、チェック操作（個別／全選択）に
      連動して更新されない不具合を修正。


  2026-07-13 11:23
  ［変更箇所］
    ・「最終更新」表示を、スクリプト自体の更新日時とログデータの最終更新
      日時の2行に分割。
    ・readme.txtに動作要件（PHP 7.4以上）と動作確認済みバージョン
      （PHP 8.3.6）を追記。
  ［修正箇所］
    ・set_time_limit()が共有ホスティングで無効化される場合がある旨の
      コメントを追加。


  2026-07-13 11:37
  ［変更箇所］
    ・動作確認済みPHPバージョンに、qptns.com本番環境のPHP 8.4を追記
      （開発時のローカル確認は8.3.6）。


  2026-07-13 11:55
  ［修正箇所］
    ・ファイル冒頭コメントのPHP対応バージョン表記（7.4〜8.3）を、READMEの
      動作確認範囲（7.4〜8.4）と一致するよう修正。
  ［変更箇所］
    ・readme.txtにバージョン表記、ディレクトリ構成のツリー表示、必須拡張
      なし（mbstring不要）の明記、ライセンス一行要約、謝辞（Heyuri/
      ksphp-plusへのクレジット）、既知の制限を追加。


  2026-07-13 12:59
  ［修正箇所］
    ・readme.txt内のURL表記を https:// 付きのフルURLに統一
      （museum.heyuri.net/zantei/ → https://museum.heyuri.net/zantei/ 、
      http://qptns.com → https://qptns.com/ ）。


  2026-07-13 21:23
  ［変更箇所］
    ・概要の期間表記を固定範囲から「現存し公開されている過去ログ」に変更。
    ・ログデータの出自（museum.heyuri.net/zantei/ はzantei.php.xdomain.jp/
      old/log/ のWayback Machineスナップショットのミラー）を追記。


  2026-07-13 21:33
  ［変更箇所］
    ・検索語の半角カナ⇔全角カナを暗黙的にOR検索する機能を実装
      （strtr()ベース、mbstring非依存。検索・ハイライトの両方に対応）。


  2026-07-13 21:46
  ［変更箇所］
    ・検索結果の表示順（昇順/降順）を実装（oパラメータ、既定は昇順）。
      ファイルの先頭/末尾フラグは、並び替え確定後に再計算する方式に変更。


  2026-07-13 21:55
  ［変更箇所］
    ・検索結果ページの冒頭に「← 一覧に戻る」リンクを追加
      （0件の場合も含む。トピック一覧側は既に対応済み）。


  2026-07-13 22:02
  ［変更箇所］
    ・半角/全角カナ相互マッチをチェックボックスで切り替え可能にした
      （既定はON。フォーム未送信時はON表示、送信時は実際のチェック状態
      に従う）。


  2026-07-13 22:06
  ［変更箇所］
    ・検索対象に「本文のみ」を追加（本文＋投稿者／本文のみ／投稿者のみ
      の3択に）。


  2026-07-14T08:15:00+09:00
  ［変更箇所］
    ・検索処理のプロファイリング機能を追加（一覧取得／検索／整形／出力の
      内訳を実行時間表示に併記）。
    ・ファイル冒頭とreadme.txt先頭にバージョン表記（2026-07-14）を追加し、
      実行時間表示にも併記。
  ［修正箇所］
    ・検索フィルタリング専用の軽量抽出関数extractForMatch()を追加し、
      全件走査時の正規表現呼び出しを5回→最大2回に削減（表示用の再取得
      パスは従来のextractOldFormatMessage()のまま、出力内容への影響なし）。
      実測：検索処理時間を約42%短縮（2.556秒→1.483秒。環境・クエリに
      より変動あり）。


◇改造版の運用

  本スクリプトの一部若しくは全部を改造して運用される場合は、改造版である旨
  をバージョン表記の部分に追加してください。


◇既知の制限

  ・検索対象はHTML形式の過去ログです。
  ・CGIとして動作中の掲示板を直接検索するものではありません
    （あやしいわーるど＠暫定はCGI時代の掲示板ですが、ここで扱うのは
    そのCGIが出力・保存したHTML形式の過去ログです）。
  ・ログファイルは読み取り専用で処理し、内容は変更しません。


◇謝辞

  検索アルゴリズム（バッファ分割・ハイライト用正規表現・結果文言など）は
  Heyuri/ksphp-plus の sub/bbslog.php（Getlogクラス）を参考・移植して
  います。


◇ライセンス

  改造・再配布可（MIT License）

  Copyright (c) 2026 MOTOI Kenkichi
  本スクリプトはMITライセンスのもとで公開されています。
  詳細：https://opensource.org/licenses/MIT

  https://qptns.com/
