*[PLUGIN] dumpプラグイン (バックアップ&リストア機能) の作成 [#ee8ddb55]

-ページ: BugTrack
-投稿者: [[henoheno]]
-優先順位: 重要
-優先順位: タイムリー
-状態: 着手
-カテゴリー: 本体新機能
-投稿日: 2004-09-26 (日) 19:44:01
-バージョン: 

--------------------------
#contents
--------------------------
**メッセージ [#b646c117]

[[teanan]]さん作成のバックアップ/リストアプラグイン([[org:自作プラグイン/tarfile.inc.php]])を PukiWiki に追加します。このプラグインはネットワーク越しにPukiWikiのバックアップ(*.tar/*.tar.gz)とリストアを可能にします。GPLとして配布はOKとの事です。ありがとうございます。これで助かる人は結構多いでしょう。

- 特徴:
-- phpファイル単独で動作する (tarやgzipやzipのようなシステムコマンドを呼んでいないし、その設定も不要)
-- リストアまで実現している 
-- エンコードされている生のページ名を、ディレクトリ階層つきのファイル名にデコードする機能(オプション)がある

---------------------------------------
** ちょっと確認: tar の構造 [#vae7feed]

- tar の構造
-- http://www.redout.net/data/tar.html


---------------------------------------
** ちょっと確認: Zlibモジュール [#v5b3bc70]

- PHP マニュアル: zlib圧縮関数
-- http://jp2.php.net/manual/ja/ref.zlib.php
-- "PHP 4.3.0 以降、zlib モジュールは php バイナリにビルトイン"

- backupプラグインは以下の様にして zlib モジュールおよび関連関数の有無を判定している
    if (function_exists('gzfile'))

---------------------------------------
** ちょっと確認: デコード機能: ファイルシステムに使うべきでない文字 [#vcc87a8a]

- Windowsなら「\/:*?"<>|」が危ない文字

---------------------------------------
** これまでの経過 [#v8828a90]

- [[開発日記/2004-09-23]] [[teanan]]さん作成のバックアップ/リストアプラグイン([[org:自作プラグイン/tarfile.inc.php]]) をCVSに追加

- [[開発日記/2004-09-25]]
-- PukiWikiのデータが今後もファイルシステムベースだと仮定する必要はないので、名称をdumpとさせていただきました。
-- ライブラリ部分とそうでない部分を極力分離 (まだ一部混ざっている)
-- アップロード時はファイルの拡張子を自動で識別する (チェックボックスも除去)
-- アップロードしたファイルのサイズ上限をチェックする (実は未チェックだった (^^; )
-- パスワードの認証にpkwk_login() を使用する
-- その他、冗長な部分の削除、コメント追加&英語化、コメントの修正、$varsの使用など

- [[9/26までのコメントは別ページに移動>./過去のコメント#f29ea054]]
- [[開発日記/2004-09-26]] [#vf73bd68]
-- [[cvs:plugin/dump.inc.php]] (v1.4:1.23)
-- この日の(r1.23までの)修正の大雑把なまとめ:
--- r1.4のバグ修正
--- リストア時: ページ書き込みに flock() を用いる
--- gzopen() で取得したポインタには (fwrite()ではなく) gzwrite() で書きこむ
--- ライブラリとのインターフェースに外部の定数を用いない (隠蔽)
--- 関数/クラスメンバの引数名の整理
--- E_ALL でチェックした結果を反映
--- スタイルの修正
--- クラスメンバの定義順の整理 (使用する順に)
--- クラス内でしか用いない(プライベートな)クラスメンバ名の先頭に '_' を付加
-- などなど

--------------------------------------------
*** コメント [#v389cbe4]
-唐突ですね (^^; メッセージが親切な分、lngへの分離が大変そうです… -- [[にぶんのに]] &new{2004-09-26 (日) 08:43:26};
-はい、tarfile.inc.php v1.0 の発表と teananさんとのやりとりを受け、唐突に決めました (^^; このタイミングで受け取って、(CVSの上で、修正点を明確にしながら) PukiWiki本体に組み込むための作業やバランス調整を行うと、さらに早く進化するだろうと思ったのでした。 -- [[henoheno]] &new{2004-09-26 (日) 13:02:54};
-今はlng分離の前に、さらなる機能の検証と修練や、記録媒体に応じたダンプ動作の自動化(例えば、処理時間と転送量を考えると wiki/ ディレクトリはテキストファイルしか入っていないので絶対に圧縮すべきだが、backup/ ディレクトリは圧縮されているファイルしか入っていないので圧縮すべきでない。もし記録媒体がMySQLならやるべき事は''テーブル名の特定''とmysqldump + gzip。もし複数の記録媒体で実現されたものであるならばまとめて保存。等々)ができる様な内部構成の変更とPukiWiki本体の修正、tarライブラリの完全分離 (lib/ へ)、アップロードの部分の安全性の確認などをもう少し行いたいと考えています。説明やUIもそれを受けて変わるでしょう。 -- [[henoheno]] &new{2004-09-26 (日) 13:24:52};
-あと、しばらくしたらリストアの部分はデフォルトではoffにしなければならないと思っています。管理者には便利ですが、結構危ないので (^^; -- [[henoheno]] &new{2004-09-26 (日) 13:45:13};
-なるほど。修正前提のCVS投入とするとBugTrack(とマニュアル)への追加は待った方が良いですかね?例えばPukiWikiはzlib前提にはしていない筈なのでbackupファイルが*.txtとなる可能性がある、tar.gz形式を選択すると flockでWarning((flock(): cannot represent a stream of type ZLIB as a File Descriptor)) が出る(環境依存?)、何故かtar(GNU tar 1.12, TAR32.dll)で復元できなかった(私だけ?)、など幾つか見つかったのですが。 -- [[にぶんのに]] &new{2004-09-26 (日) 14:24:51};
-v1.11はデグレが発生してます。TAR_DATA_CHKBLANKSが定義されていないみたいです。 -- [[teanan]] &new{2004-09-26 (日) 19:13:24};
-ありがとうございます。専用のBugTrackを%%作りましょうか%% 作りました :) -- [[henoheno]] &new{2004-09-26 (日) 19:37:33};
-[[teanan]]さん、ありがとうございます。デグレードの場所としては r1.4 でした。使われていない変数などを整理する途中でこれを削除してしまった様です (^^; -- [[henoheno]] &new{2004-09-26 (日) 20:33:55};
-- [[cvs:plugin/dump.inc.php]] (v1.4:1.12)
-[[にぶんのに]]さん、マニュアルは急ぐ必要はありません。今後はどのリビジョンでお試しになったかをお教えください(恐らく上記defineが抜けている%%バージョン%%リビジョンではないかと思います (^^; )。「backupファイルが*.txtとなる可能性がある」というのはどうやってそうなるのでしょうか? -- [[henoheno]] &new{2004-09-26 (日) 20:37:17};
-[[teanan]]さん、TARLIB_HDR_TYPE_OFFSET がコメントアウトされている理由を知りたいのですが、どのへんの資料を当たると良いでしょうか? -- [[henoheno]] &new{2004-09-26 (日) 21:00:29};
-typeflagは通常のファイルの場合'0'または'\0'が許容範囲なのですが、'=0'で判定できなかったため、とりあえずコメントアウトしていました。 -- [[teanan]] &new{2004-09-26 (日) 21:03:54};
-tarのフォーマットについては、http://www.redout.net/data/tar.html で大体はわかります。他は見当たらないので、Tarのソースと他のtar.gzデータをみながら、推測して作りました (^^; -- [[teanan]] &new{2004-09-26 (日) 21:05:33};
-む、そういえばE_ALLで試していな・・・・ ((flock(): cannot represent a stream of type ZLIB as a File Descriptor)) -- [[henoheno]] &new{2004-09-26 (日) 21:05:57};
-・・・flockは gzopen() が返すポインタには対応していない様なので、とりあえずflock()を取り除きました。 -- [[henoheno]] &new{2004-09-26 (日) 21:33:01};
-いいかげんな作りで申し訳ないす :( -- [[teanan]] &new{2004-09-26 (日) 22:25:31};
-いえいえ :) -- [[henoheno]] &new{2004-09-26 (日) 23:41:35};
*** コメント [#n8b5c0f0]

-Rev1.23 でtarが展開できました。素敵~ :D -- [[にぶんのに]] &new{2004-09-27 (月) 02:36:16};
--で、懸案事項などを追加です。
--buckupの*txt云々は単にlib/backup.phpにそれらしき(=zlibがdisableだと圧縮しない)コードが書いてあるだけで動作確認を取ったわけではありません。PHP 4.3.0 以降zlibがビルトインされたようですが、[[org:PukiWiki/インストール]]を見ると現状はPHP4.1.0以降なら多分オッケー、と言っているので、一応想定してあげる必要もあるのかな~と。
--問題提起なのですが、ページ名の変換における、危ない文字はどのOSに対してでしょうか?~
デコードは凄~く嬉しい機能なのですが、危ない文字((Unicodeのファイル名を許すかどうかもかな?))はOSによって変わってくるので、マジメに考え出すと対応方法が悩ましい所だと思います。~
現状はMacOS対応のロジック?でしょうか。もしWindowsなら「\/:*?"<>|」が危ない文字です。%%あと予約されたDOSデバイス名((con,aux,nul,prn,lpt1~9,com1~9,CLOCK$,XMSXXXX0…))というのもありますが、関係あるかな?%%関係なしでした。 Unixでも類似の制約があるはずですが、私は詳細を知らないです。
--機能的な問題があるわけではなく、素朴な疑問なのですが、plugin_dump_disp_form()でpluginでなくcmdでdumpを呼び出しているのは何か理由があるのでしょうか。何か使い分けの基準があるとか?
-わたしも、試してみました。いいですね (^^) ということで、わたしもコメント -- [[みこ]] &new{2004-09-27 (月) 23:41:55};
--デコードは問題が多そうなのでいらないから、その代わりといっては何ですけど一覧リストのテキストがほしいです。(よくあるエディタのF10などで開ければ尚 Good (^-^ )
 例:xxx.tar.gz[/ls-lR.txt]
 ./wiki/:
 ./wiki/50756B6957696B69.txt(1): PukiWiki
 ./wiki/53616E64426F78.txt(1): SandBox
--(↑とってもエディタ使いな発想ですけどね (..;)
--というわけで、こんなのどうでしょ? [[teanan_自作プラグイン/pagefile.inc.php>http://teanan.homeip.net/pukiwiki/index.php?%BC%AB%BA%EE%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3%2Fpagefile.inc.php]]~
dumpとは関係ないですね、すみません XD -- [[teanan]] &new{2004-09-28 (火) 00:51:01};
---うーん(^^; dumpのパッケージ(.tarもしくは.tar.gz)の中にほしい=展開したときにエディタで探しやすくの意味なのでちょっと違うかな (^^; -- [[みこ]] &new{2004-09-28 (火) 01:04:03};


#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.040 sec.

SourceForge