†PukiWikiプログラムのローカルファイルとCVSファイルとの差分をテーブルとして表示する。開発版のPukiWikiファイルのアップデートのチェックに便利。標準添付のファイルの表示、インストールした自作プラグインの表示を行う。キャッシュ機能で表示時間を短縮。†CVS側に存在するファイルに関して、ローカルファイル(cvscheckを実行したサイト側のファイル)と比較し、バージョンが違っていたり、バージョンが取得できなかったり、ファイルが存在しなかったりするとテーブルとして表示する。ローカルにしか存在しないファイルについては無視する。チェックするディレクトリは、"./"と"./plugin/"の2つのみ。チェックするファイルは、何らかの拡張子がついているファイル全ての内、バージョン表示のあるもの。localオプションの指定で、ローカルにだけ存在してバージョンが取得できるファイルを表示する。CVSページのHTMLの構造を正規表現で取得しているので、表示フォーマットが変わると取得できなくなる可能性がある。versionlist.inc.phpではバージョン表記として「\d+\.\d+」をチェックしていたが、cvscheck.inc.phpでは「[\d\.]+」。よって、例えばローカルファイルに独自の修正を加えた場合、「1.46.1」のような表記が可。ローカルファイル名の拡張子のチェックは「\.\w+$」。従って、ローカルファイルのバックアップをその場に置いて、かつcvscheckの対象にしたくない場合には、最後の拡張子にハイフンなどを含めればよい。ローカルファイルのファイル名はバージョン表記から取得する。pukiwiki.phpをindex.phpに変更してもバージョン表記がpukiwiki.phpのままなら比較できる。バックアップの場合は前述などのような対処が必要。localオプション指定時には「自作プラグイン」のチェックにプラグインls2を使用。pukiwiki.orgのls2の出力仕様が変更されると「自作プラグイン」のチェックに失敗する可能性がある。[local|cvs][,<interval>]前者は、ブラウザのWebアドレス入力にて使用する方法。後者は、リンクとしてPukiWikiページに貼りつける場合の方法。クリックすると実行する。&refer=<page>は省略可。付けると戻り先ページ名として表示される。&param=cvsは省略可。&param=localでローカルのみ存在するファイルの表示モード<interval>を付けると、その時間だけキャッシュにCVSのデータを保存して利用する。*.lngなどもチェック対象となる。ファイル内部にバージョンの記載が無いものはチェックできないので除外される。†ここに添付しました。pukiwiki1.4.4rc1対応版。みこさんの要望に対応。jjyunさんのパッチを適用。pukiwiki1.4.3以前に対応版。みこさんの要望(バージョン違い)に対応。Ratbetaさんの提案。Ratbetaさんの提案。8「いいえ」に投票した方に質問です。どのような修正を加えれば、よくなると思いますか?下記のコメントに記入して下さい。14:05:14面白そうなんでちょっと書き換えてみました。14:22:05す、すばやいっ!というわけで、早速cvscheck.inc.php.2で対応です。20:37:230.4入れてみました。ローカル(Apache1.3.28+php4.3.3)で動かないです。proxy.phpの86行目、タイムオーバーというエラーが出ています。解釈間違ってそう(汗)。06:22:30うーむ。?私のところではちゃんと動いていて症状が再現できません。http_request()をとても素直に使ってるんですが。「dev:PukiWiki/1.4/Proxy」を参照。11:05:38あ、今やって見たら動きました。127.0.0.1と127.0.0.0/8が被っていたのが原因みたいです(^^;)。21:35:20解決して良かったです。21:34:00話は変わりますが、http_request()はすばらしいです。自作プラグイン/msearch.inc.phpでも使っていますが、これが使えるようになってネットワーク経由で何かするプラグインが、proxyとか気にすることなく、とても簡単に書けるようになりました。00:27:50すばらしい。思って、cvscheckを社内PukiWikiに設置してみたのですが、動きませんでした。proxy自体がユーザ認証を必要としたため社外へアクセスできなかったようです&sad;。11:58:26SOCKS5に対応できていないと記述してるんですけど、もっと詳しく説明をして欲しいということですか?まぁ、あのページは、開発者を想定したものなので、逆にあのレベルとしてRFCなどへのリンクをはっているんですけどね。13:50:45社内でSOCKは運用してないので、その点は問題になっておりません。HTTP/1.1(rfc2616)のProxy-Authorization:に対応していれば社内でも大丈夫なのですが、ここまで勉強してからproxy.phpを見てみたのですが、どうやら対応してなさそうです。16:49:09内容は了解しました。エンコードして、これを、このヘッダーの内容にすれば良いはずです。さんならできると思いますよ。パッチでも提供してもらえれば、喜ぶ人も多いのではと思います。16:57:59よくみたら、ヘッダー名が違うものの、同じ対処してるので、そのコードがずばりですね。'.base64_encode($arr['user'].':'.$arr['pass'])."\r\n";てな感じですかね。20:47:03upkさん、ありがとうございます。上記のproxy認証に対応したパッチを紹介しておきました。興味ある方はご参照下さい。計上しておいて下さいよ。一応、別件もあってぱんださんにはお願いしておきましたけども。20:25:26ところで、この串って、どういうものなのでしょうか?Authorization:だって、フォームに自動的に入力を補う機能に過ぎないし、Proxy-Authorization:も同じく串にしかしない。いうものなんですよね。串対応では、そもそも無理なので、どうしたものぞ。そのヒントになればなぁ。23:02:42社内の串はSquidとかいうものでした。社外アクセスしようとするとダイヤログが出てID,PWの入力を促します。下記は気が向いたら勉強してみようかなと思っているページです。XXXX....Xとかでプロキシ認証を経て社外へアクセスできることを確認しました。PukiWiki1.4rc3環境でpreg_match_allが無限ループに陥っているかのような症状(まだ未確認)に悩まされています。プラットフォームで動作が違うのでPHPのバグっぽい動作です。現在仕事で大急ぎの締め切りを抱えているので、この調査を来週まで先送りします。PukiWiki1.4rc4でも同じでした。13:56:55来週へ先送りとか言ってる割に現実逃避(笑)。大丈夫な正規表現を発見。マッチングに時間がかかってタイムアウトスタックオーバーフロー?していたのかもしれません。そこで「一回だけ使用するサブパターン→(?>)」という技を使って高速化を図りました。これでうまく行きました。ダメだった例preg_match_all('/<tr[^>]*>((?:.(?!<\/tr>))+.)<\/tr>/is',$html,$matches)今回の対処の例。効果的だったのは2つ目の(?>)。側でなんかversion取得失敗してるみたい。04:33:36もしかして、newpage2.inc.phpのバージョン表記の部分のファイル名がnewpage.inc.phpになっていたりしませんか?誤記の場合もあるとすると今の仕様じゃ危険かな。versionlist.inc.phpのまねをしたんだけど。実際のファイル名を使うべきかな。11:21:35おおあたりでした。ファイル名でやっているのでそこで違いが出たみたいです。07:40:11そういえば、pukiwiki.phpをindex.phpにrenameして使っていたりするので、実際のファイル名よりはバージョン記述のファイル名で比較した方がありがたかったりするのです。他のファイルでそういう状況は無さそうですが。21:11:43あ、ほんとだ。11:15:22いやぁ、姑息な技で対応してしまいましたぁ。cvscheck.inc.php.9を御利用下さい。画像を表示したかったわけではないので、ファイル名の見かけは変わらなくとも拡張子で画像だと判断されないようにしてみました。21:27:39リンクの方の仕様だったんですね。cvscheck.inc.phpの方で設定しているものと思い込んでしまって...。21:56:51いろいろ修正してみました。個人の好みがあるので使用するのは適当にしてください。00:00:12上の差分を見た感想です。多機能になっていて、すばらしいです。いくつか難点があります。ローカルバージョンは設置者が修正して独自に振っている場合があることや、自作プラグインがpukiwiki.orgにあるとは限らない点です(現に私も独自の修正をしたり公開してないプラグインを設置したりしてますし、そもそも旧バージョンは設置済みなのだから取得する必要はないのでは?)。あと、できれば画像の判定はバージョン比較の本質じゃないのでなるべくしたくないものです。found'表示と、$curlはいいアイデアなので是非取り込みたいです。cvscheck.inc.php.10にて対応。14:50:28画像の判定はバージョンの比較に使用するものではありません。画像だけCVSの表示パスが変わるので...。ちなみにこの判定をしない場合、プレーンテキストとして表示してしまいます。PukiWiki.orgへのリンクを設定したのは、最新版がそこにある(可能性が高い)からです。正規表現でPukiWikiにページが存在するかどうかを見るのも良いかもしれません。CVSの独自修正版も同じく(正規表現とか私は得意じゃないので...)。15:16:33画像の判定がバージョン比較と関係ないので遠慮したかったのですよ。その点では、cvscheck.inc.php.10は画像判定してませんが、そこそこうまくいってるんじゃないかなと思います。それから、pukiwiki.orgへのリンクが存在する可能性が高いのは私も納得します。その機能が実装できれば便利ですしね。実際に存在しなかった場合に宛先のないリンクが出てしまうのが、公開プラグインとしてはとってもまずいです。クリックすると新規ページが作られてしまいます。それを避けるために事前に確認するとなると、該当ファイルごとにネットワークアクセスが発生して表示が著しく遅いものになってしまいます(本当に遅いです)。それもまた避けたいところです。そのあたりも考えてみますと、上のRatbetaさんの提案の中ではcvscheck.inc.php.10で取り込んだ部分までが現実的だと思います。15:28:12なるほど、独自修正版についてはそういう手もありますね。そもそも旧バージョンを取得しやすくするのは間違いのもとだと思いませんか?「入手したら同じものだった」というケアレスミスを誘発しやすくなります。そもそも押してはいけないボタンは付けないのがGUIとして親切だと言われています。旧バージョンが欲しい場合にはファイル名をクリックすれば行くことは出来ますので手段は用意されてますし。15:43:34表示してリンクだけ外してしまう、というのはどうでしょうか?これなら旧バージョンを入れる可能性も少なくて済むと思うのですが...。15:49:22うーむ。それはリンクされていないURLの表示を行うという意味でしょうか?もしそうだとすると、表示が長すぎますし(画像のURL表示でRatbetaさんも指摘してましたよね)。15:48:35同じく独自修正版ですが、SourceForge側で用意されている差分のURLを追加する、というのも効果的かもしれません。pukiwiki.ini.phpなどの設定ファイルなんかでも差分を使うと修正しやすいですし。15:52:40これについてもう少し説明してください。16:08:33説明不足でしたね。独自修正版の差分ではなくて、CVS版の旧バージョンと新バージョンの間の差分です。なくても有る方がいいかも知れません。CVSへのURLだけでいいと思います。私の場合、独自部分はパッチにしてあるので新バージョンに対してそれを当てるって感じで運営しています。どっちからやってもうまく当たらない可能性が高いかなぁなんて思ってます。16:18:43pukiwiki.orgの自作プラグインにページが存在するかどうかを、表示時間への影響を少なくチェックできる方法を思いつきました。Ratbetaさんの提案機能がうまく実装できるかも!今時間がないので後日。01:05:28遅くなりましたが、cvscheck.inc.php.11でRatbetaさんの提案の一部に対応してみました。localオプション指定時に自作プラグインにページがあればリンクを張ります。PHP4.3.3にて、cvscheck.inc.php.11のlocalオプションでpreg_match_allの正規表現に関して再び以前と同じ症状(ページが表示されない)が現れました。同じ対策をしても改善できません。PHPのバグなんだろうなぁ。22:48:32cvscheck.inc.php.12で多分対応できたかも。preg_match('/a(?:.)+z/',$str)のとき、aとzの間が約1KB程度あると無限ループになったり、エラー無しの異常終了をしたりするようです。/a(.)+z/や/a.+z/では、このような症状が起こりません。(?:.)+などの使用で起こりました。10:58:38いい感じですね~。使わせていただきました。URLのwwwは無い方が良いかなと思いますが、どうでしょうか?この辺は好き好きかもしれませんが...。22:36:54ありがとうございます。URLの件は、お好みで変えていただくということで。ちなみに、正規表現でのリビジョン取得はv0.1のときからやってたんですけどねん。22:17:16いやリビジョン取得ってのは自作プラグインのです。抹消線なわけで...。気にしないで下さい(汗)。versionsをキャッシュしました。これで、#cvscheckと#cvscheck(local)を同一ページに並べている場合に、2番目以降でCVSへのアクセスを省略するので少し早くなります。19:05:31PHP4.3.5に更新したところWindows2000、Apache2.0.49でApacheがお亡くなりになります。22:30:40ご報告ありがとうございます。Apacheが落ちるとは困ったものです。XPとの組み合わせのときに、preg_matchなどでまだ問題が残っていたのは把握しておりまして、PHPにバグレポートを出していたのですが、PCRE(正規表現ライブラリ)の制限だと言って、つまりPHPのバグではないと責任逃れ状態です。ちなみに、Apache-1ではうまく動作しているという報告もありまし、Linux等では問題なさそうです。バグ対応を待っていても直りそうもないので、バグを回避するアルゴリズムに変更するしかないのかもしれませんね。現在の記述がシンプルなだけに悔やまれますが。16:41:23PHPのバグレポートで見つけることができませんでした(^^;。PHP4のバージョンもいくつか上がりましたが、回避アルゴリズムにするしかないかもしれませんね。ほうのバージョンが表示されてしまいます。cvscheck.mod.patch2)に添付しておきます。02:52:23名無しさんへ。03:09:15みこさんへ。バージョン違いのファイルを同じフォルダに置いてはいけません。ファイルの拡張子はチェックせずに、ファイル内の$Id:行のファイル名とバージョンを読みとって比較しますので。voteとvote2の症状の原因はvote.inc.phpの1.14が同じディレクトリに置かれているからではないでしょうか?voteのバージョン比較にvote2.inc.phpは影響しません。仕様としては、まぁ、改善の余地がありますね。現在は複数ファイルがあれば、バージョン情報を上書きしていますが、数値的に最も大きいバージョンを採用するようにしてみましょうか?すると、同じフォルダにバージョン違いを置けるようにはなりますが。簡単にできるならば、お願いします。17:40:56jjyunさんのパッチと、みこさんの要望に対応しました。04:35:16v0.17を頂き、確認しました。私のパッチでは手を抜いていた、ローカルファイルの表示もばっちりスマートに決まってますね。10:14:48すみません、返事が遅れました。ありがとうございます。現在はcvsよりバージョンが下のものは赤文字で表示しています。}更新されているファイルを一括ダウンロード機能が欲しいかなと思いました。08:53:19ローカルとリモートのファイルの差分へのリンクも付けてほしいです。22:44:26リモートの更新日付も表示されるとありがたいです。21:02:47重宝しております。