トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BBS-サポート掲示板/938

ページの作成や編集にはユーザ登録が必要です。

 エラー表示 - 名無しさん (2010年10月16日 15時26分27秒)

TOPページを開こうとすると、Software Error:Can't call method "editform" on an undefined value at lib/Wiki.pm line 216. と表示されてしまうのですが解決方法はありませんか?

パーミッション、CGIの記述ミスなど見てみましたが原因がわかりませんでした。

「lib」内の「Wiki.pm」をもう一度アップロードしてみましたが問題解決にはならず・・・

どうすればいいのかわからず困っています。

使用環境・・というのはどうかけばいいのかわからないので、レンタルサーバーの名前を書いておきます。「my-sv.net」というところです。http://www.my-sv.net/

よろしくお願いいたします。

  • FrontPageは表示されるのですが、編集、新規作成ができません。 - 名無しさん (2010年10月16日 17時30分23秒)
  • 状況がよくわからないので、いくつか教えてください。 - 菜梨 (2010年10月17日 08時02分39秒)
    1. 質問の最初には「TOPページを開こうとするとエラーが出る」とありますが、コメントには「FrontPageは表示されるのですが」と書かれています。TOP ページとは、すなわち FrontPage だと思うのですが、「『TOPページを開こうとするとエラーが出る』という現象が出ていたけど、今は解決した」という解釈でいいですか?
    2. また「編集、新規作成ができない」とき、どんな動作が起こりますか? 「何かエラーが出る」ということであれば、そのエラーメッセージをそのまま書き込んでもらえると原因を推定し易くなります。
    3. あと、今回の問題は「今まで動作していた FSWiki でエラーが出るようになった」ということでしょうか? それとも「今回新たに設置した FSWiki で最初から起きている問題」ということでしょうか?
  • お返事ありがとうございます。すみません、記述不足でした。
    1. 設置後にWikiにアクセスすると、まずFrontPageが表示されました。次に右上にあるメニューの「トップ」を押すと、エラーが表示されてしまいます。「/wiki.cgi」にアクセスしたときも同じです。
    2. 新規作成の時は、題名までは設定できるんですが、本文の作成フォームが表示されません。「Software Error〜」が表示されます。エラーメッセージはTOPが表示されない時と同じで「Software Error:Can't call method "editform" on an undefined value at lib/Wiki.pm line 216. 」です。
    3. 今回問題が起きているのは、2度目の設置のものです。1度目のものは成功したのですが、2度目の今回のものでエラーが表示されました。成功したものと見比べてみたのですが(パーミッションなど)、間違いがよくわかりませんでした。

お手数をおかけしてすみません。アドバイスいただけると幸いです。 - 名無しさん (2010年10月17日 20時24分33秒)

  • なるほど。ではまず、エラー「Software Error:Can't call method "editform" on an undefined value at lib/Wiki.pm line 216. 」から対処してゆくことにしましょう。 - 菜梨 (2010年10月18日 01時49分53秒)
  • このエラーは、「editform というメソッドを呼ぶことができなかった」ということですが、この位置での発生は、「エディットフォームプラグイン(Wiki ページ編集画面でページ入力フォームの下に、各種入力フォームを表示するプラグイン)を実行しようとしてプラグインファイル(./plugin/*/*.pm)を読み込もうとしたが、読み込み時にエラーが発生して読み込めず、それによりプラグインを実行できなかった」ということを表しています。読み込み時のエラーとしては、「あるべきプラグインファイルが存在しない/存在するが、(誤った改造などにより)文法エラーが含まれていて実行できない/その他の原因によりファイルが壊れている」などが考えられます。FSWiki 標準添付のエディットフォームプラグインのプラグインファイルとしては、
    • ./plugin/admin/PermissionForm.pm (ページ参照権限設定フォーム表示)
    • ./plugin/attach/AttachForm.pm (ファイル添付フォーム表示)
    • ./plugin/core/EditHelper.pm (編集ヘルプ表示)
    • ./plugin/core/Template.pm (Wiki ページテンプレート選択フォーム表示)
    • ./plugin/rename/RenameForm.pm (Wiki ページ名変更フォーム表示)

の 5 つがありますので、これらのファイルについて、

    1. もしサーバ上に存在しないものがあればアップロードし、エラーが出なくなるか確認する。
    2. まだエラーが出るようなら、元から存在していたファイルについても再アップロードし、エラーが出なくなるか確認する。
    3. 再アップロードしてもダメであれば、次の手を考えますので、その場合には FSWiki のバージョンをお知らせください。
  • 詳しいお返事ありがとうございます。今ファイルを確認してみると、「./plugin/attach/AttachForm.pm」がアップロードされていませんでした…。アップロードしてwikiを確認してみると、編集ページが表示されました。エラー解決です!本当にありがとうございました…。菜梨さんのお返事がなければ、ファイルの存在の確認ができずに未だエラーが解決できないままだったと思います^^;本当にありがとうございました。感謝しています。 - 名無しさん (2010年10月18日 17時04分43秒)
  • 解決して良かったです。しかし本来なら、このような質問をユーザがしなくて済むように、今回の件であれば「plugin/attach/AttachForm.pm を読み込もうとしましたが失敗しました」みたいに、根本原因に直接辿り着き易いエラーメッセージが表示されるべきだと思います。FSWiki は、そのあたりのエラーメッセージが貧弱なのが玉に瑕ですね。 - 菜梨 (2010年10月18日 21時36分31秒)
  • 使っているサーバーは、xrea.comなのですが、同じエラーが起こったのですが、自分で修正できないのでご教授頂けませんでしょか

エラーが起き始めたのは下記の案内にある9月26日のメンテナンスが終わってからです。

上記によればperlのバージョンが5.16系から5.26系に上がったようで、

を参照しても修正箇所が分かりませんでした。

■最初のエラー1

Can't locate CGI2.pm in @INC (you may need to install the CGI2 module) (@INC contains: ./lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at wiki.cgi line 27.
BEGIN failed--compilation aborted at wiki.cgi line 27.

となり、wiki.cgi内のlibの読込PATHを

use lib './lib';
# ModPerl::Registry(Prefork)では@INCが初期化されている場合がある
unshift @INC, './lib' if(exists $ENV{MOD_PERL});

↓下記のように絶対PATHに変更。

use lib qw(/virtual/UserID/lib);
# ModPerl::Registry(Prefork)では@INCが初期化されている場合がある
unshift @INC, '/virtual/UserID/lib' if(exists $ENV{MOD_PERL});

すると、下記のエラー

■エラー2

Software Error:
Can't call method "editform" on an undefined value at /virtual/UserID/lib/Wiki.pm line 217.

ページの表示は出来ますが編集の際に上記のエラー2になるようです。Wiki.pm内の該当箇所を下記のように変更

#=============================================
sub get_editform_plugin {
	my $self = shift;
	my $buf = "";
	foreach my $plugin (sort { $b->{weight}<=>$a->{weight} } @{$self->{"editform"}}){
		my $obj = $self->get_plugin_instance($plugin->{class});
		$buf .= $obj->editform($self)."\n";
        open(F,">> ./z-get_plugin_instance.txt") ;	# 保存するファイルを開く
        print F "\$class=$obj->editform($self)\n";
        close F;
	}
	return $buf;
}

結果

$class=plugin::admin::PermissionForm=HASH(0x561bc8c74c28)->editform(Wiki=HASH(0x561bc6fa73e8))
$class=plugin::core::Template=HASH(0x561bc8c76c68)->editform(Wiki=HASH(0x561bc6fa73e8))
$class=plugin::attach::AttachForm=HASH(0x561bc8c767e8)->editform(Wiki=HASH(0x561bc6fa73e8))
$class=plugin::image::ImageForm=HASH(0x561bc8f0f230)->editform(Wiki=HASH(0x561bc6fa73e8))
$class=plugin::layout::EditHelper=HASH(0x561bc8ef3380)->editform(Wiki=HASH(0x561bc6fa73e8))
$class=plugin::rename::RenameForm=HASH(0x561bc8f9ec98)->editform(Wiki=HASH(0x561bc6fa73e8))

不要なのを省いて

  • admin::PermissionForm
  • core::Template

上記のみにしました。

その結果

$class=plugin::admin::PermissionForm=HASH(0x5649ec6d1378)->editform(Wiki=HASH(0x5649eaabb3e8))
$class=plugin::core::Template=HASH(0x5649ec6d4198)->editform(Wiki=HASH(0x5649eaabb3e8))

ですが、再度ページを編集しても同様でしたので、上記の2つ

  • admin::PermissionForm
  • core::Template

を新規にDLした状態のに差し替えても同様に【エラー2】が起こるようです。

どうすれば良いかご教授頂けませんでしょうか、よろしくお願いします。 - tatta (2022年10月02日 11時11分08秒)

  • 使われている FSWiki のバージョン(またはリビジョン)は何でしょうか? - Perl (2022年10月04日 01時30分12秒)
  • バージョン忘れてました、すみません。3.6.5です。 - tatta (2022年10月04日 08時35分48秒)
  • ./plugin/*/*.pm のパーミッションには問題はなかったでしょうか? - Perl (2022年10月04日 10時33分46秒)
  • 以前より、./plugin/*/*.pmのパーミッションは、644で正常に動作していました。今、上記のadmin,coreのファイルを755に変更してみましたが、編集ではエラーになることに変わりはありません。うーん・・・・ - tatta (2022年10月04日 11時30分12秒)
  • それらのファイルに至るまでのパスのパーミッションの方はどうでしょうか? - Perl (2022年10月04日 22時39分15秒)
  • xrea フリードメインを取得してFSWiki3.6.5をカスタマイズなしでアップロードして検証しましたが特に問題なく動作しています。なので、何らかの追加プラグインやカスタマイズが影響していると思われます。まず、追加プラグインを外してみてはどうでしょうか? - KG (2022年10月08日 01時30分43秒)

おかげさまで無事原因を特定できました。呼び出しプラグインに表示されていないプラグインを外すことでページを編集できるようになりました。ありがとうございます。下記は解決までの流れ当初Wiki.pm内の下記「get_plugin_instance」箇所に呼び出しプラグインを確認するための記述を追加してsub get_plugin_instance {

my $self  = shift;
my $class = shift;
#■追加
open(F,">> ./z-get_plugin_instance.txt") ;	# 保存するファイルを開く
print F "\$class=$class\n";
close F;
#ここまで
if($class eq ""){
	return undef;
}

if(!defined($self->{instance}->{$class})){
	eval {
		require &Util::get_module_file($class);
	};
	return undef if $@;
	my $obj = $class->new();
	$self->{instance}->{$class} = $obj;
	
	return $obj;
} else {
	return $self->{instance}->{$class};
}

}

で呼び出しプラグインをみたところ、

$class=plugin::cardform::CardFormHook
$class=plugin::attach::AttachInitializer
$class=plugin::choosetheme::ChooseTheme
$class=plugin::dimg::Install
$class=plugin::image::ImageHandler
$class=plugin::jq::jQHeader
$class=plugin::jq::jQaccordion
$class=plugin::layout::LayoutAlias
$class=plugin::pankudu::Initialize
$class=plugin::pankudub::Initialize
$class=plugin::rss::RSSMaker10
$class=plugin::sitestyle::AutoSiteStyleHandler
$class=plugin::sitestyle::SiteStyleHandler
$class=plugin::core::EditPage
$class=plugin::admin::PermissionForm
$class=plugin::core::Template
$class=plugin::attach::AttachForm
$class=plugin::dimg::Files
$class=plugin::attach::Attach
$class=plugin::image::ImageForm
$class=plugin::image::ImageFiles
$class=plugin::layout::EditHelper
$class=plugin::rename::RenameForm
$class=plugin::farmlink::FarmLink
$class=plugin::cardform::CardFormHook
$class=plugin::attach::AttachInitializer
$class=plugin::choosetheme::ChooseTheme
$class=plugin::dimg::Install
$class=plugin::image::ImageHandler
$class=plugin::jq::jQHeader
$class=plugin::jq::jQaccordion
$class=plugin::layout::LayoutAlias
$class=plugin::pankudu::Initialize
$class=plugin::pankudub::Initialize
$class=plugin::rss::RSSMaker10
$class=plugin::sitestyle::AutoSiteStyleHandler
$class=plugin::sitestyle::SiteStyleHandler
$class=plugin::wiki_list_symlink::WikiListSymlink

となっていたので

sub get_editform_plugin {
...
}

に同様の記述を追加して、対象を絞って確認していたのですが、KGさんのアドバイス通り、余計なプラグインを一個ずつ外していったら結局、下記にある

上記の「CategoryHelper」を「install.pm」から外すことで動くようになりました。呼び出しプラグインに

*pulugin::category::...

が表示されていなくてハマってしまっていました

手元にあるWinsows10のローカル環境では

  • perl5.32.1
  • EUC-JP版

が正常に動いていたので、xreaにあるutf8版に新規にDLしたCategoryHelperをutf8に変更後にUPしても同様のエラーになり、その先は原因を特定できない状況です。でもこのプラグインを外せば動くことが分かったので、とりあえず良しとします。ありがとうございます。

ちなみに、Perlさんのアドバイスを参考にパーミッション確認していた際、

も参考にしていたのですが、plugin/format/FormatBase.pm内の修正で下記の箇所

36	-			if($line eq "}}"){
36	+			if($line eq "\}\}"){

ここに載っている修正内容は、Perl 5.26に対応させるということだと思うのですが、eq演算子で""内を評価する際にも\でエスケープするよう修正されていますが、これは必要ですか?もし必要ということであれば、他の方の作ったプラグインが入っている状態のpluginやlib内を下記のような形で検索すると、

/^{{
/{{
}}/
}}$
"{{
"::{{

いくつかヒットするのですが、標準で搭載されているプラグイン以外でヒットする箇所があれば、それらも同様にエスケープして修正した方が良いということになるのですか?

  • 確かに eqで評価する所は要らなかったですねぇ(^^; - KG (2022年10月09日 14時23分03秒)
  • あ、やっぱりeqの場合は必要なかったんですね。

その他の場合で上記にあげたもので正規表現による評価をしている、各プラグインを使っていないと機能しているかわからないところですが、検索でいくつか修正しておいたほうがよい箇所がヒットするので、それらはどうしたもんかと悩ましい所です。 - tatta (2022年10月11日 09時54分21秒)

  • fswiki3.6.5にCategoryHelperをそのままプラグイン化してXREAに実装してみましたが、正常に動作しています。もしかしてFSWikiをUTF-8化しているんでしょうか? - KG (2022年10月12日 01時29分28秒)
  • はい。UTF8化してます。 - tatta (2022年10月12日 22時33分23秒)

理由は

  • 当時の発表でgoogleがutf8以外は非対応となった。だったような・・・
  • 時代の流れ的にutf8かな・・・という誤解
  • 検索文字列やURL箇所に日本語が使える。という憧れ
  • SEO的に有利。という希望
  • 「静的URLでアクセス可能にしよう」とした際に「.htaccessでやる方法」と「HTMLファイルとして保存(日本語ファイル.html)した場合にサーバー上に「日本語名.html」でアクセスする方法」とで、静的ファイルにアクセスする場合はutf8じゃないと正常にアクセスできない(と思う。で、fswikiにアクセスした際に全部静的htmlで保存するチャレンジ&スクリプトでPAGELISTにあがる全ページを静的ファイル化などの試みも含めて.htaccessでの静的アクセスではなく、htmlファイルとして保存してそれにアクセスする取り組み)
  • 当時、他のプログラムをEUC-JP→UTF8に修正していたこともあって、ついでにやってみるかな・・という思いもあった

などの理由から、utf8化に取り組んでみました。弊害としては、なぜか

  • PDF機能が動かない
  • search機能が使えない

などありますが、その当時は今後の課題って事で考えていましたが、現在はそのまま放置wという状況です^^;

  • UTF8化しているで気が付きましたが、たったさんでしたか。アルファベットになっていたので気づきませんでした(^^; - KG (2022年10月13日 00時11分02秒)
  • UTF8化はBugTrack-plugin/425がベースですか? - KG (2022年10月13日 00時13分04秒)
  • KGさん、お返事遅くなっていてすみません。ひらがなの「たった」で投稿してました。気が付けばローマ字になってましたねw

私が参考にしたのはperlで基本的な事を検索で調べてから下記の2つを参考にしてutf8化にしました。

私がした手順を簡単ですが下記に記しておきます。

1. 全ファイルをEUC-JPからUTF-8に変更するための手順
●まず、やった事
utf8に対応させるため、全ファイルを
$ nkf -g ./*
で調べ、
●サブディレクトリも一気に変換
※拡張子.png/.jpg/.gifの画像ファイルは除く(画像はBINARY扱いの為、UTF-8 (LF)してしまわないように)
$ find . -type f -not -name '*.png' -a -not -name '*.jpg' -a -not -name '*.gif' -a -not -path './lib/Jcode/*' | xargs nkf -Luw --overwrite
●nkfコマンドで文字コードと改行コードの確認
$ find . -type f |xargs  nkf --guess | sort
./config/config.dat: ASCII (LF)
...
※改行コードがCR(Mac用)のが存在する為、
 上記のでも改行コードがLFにならない場合は、日本語箇所を全部削除し新たに#日本語を追加して保存した
確認
$ nkf -g ./*
●ファイルの数を調べる
$ find . -type f|sort|wc
    362     362    9161
2. wiki.cgi,docs/,tmpl/以下のcharsetをUTF-8に変更
●EUC-JPで検索
$ grep -r 'EUC-JP' ./
./lib/Jcode.pm:EUC-JP strings.  On perl 5.8.1 or better, $from and $to can 
...
●wiki.cgiを変換
$ find ./*.cgi -type f| xargs grep 'EUC-JP'
		print "Content-Type: text/html;charset=EUC-JP\n";
●sedで変換結果をそのままファイルに保存
$ find ./*.cgi -type f | xargs sed -i 's/EUC-JP/UTF-8/g'
●確認
$ find ./*.cgi -type f| xargs grep 'UTF-8' 
		print "Content-Type: text/html;charset=UTF-8\n";
$ find ./*.cgi -type f| xargs sed -i 's/EUC-JP/UTF-8/g'
●./plugin/core内を変換
$ cd ./plugin/core/
$ find . -type f| xargs grep 'EUC-JP'
./Source.pm:		print "Content-Type: text/plain;charset=EUC-JP\n";
●sedで変換結果をそのままファイルに保存
$ find . -type f| xargs sed -i 's/EUC-JP/UTF-8/g'
●確認
$ find . -type f| xargs grep 'UTF-8' 
./Source.pm:		print "Content-Type: text/plain;charset=UTF-8\n";
●./plugin/google内を変換
$ cd ../google/
$ find . -type f| xargs grep 'EUC-JP'
●sedで変換結果をそのままファイルに保存
$ find . -type f| xargs sed -i 's/EUC-JP/UTF-8/g'
●確認
$ find . -type f| xargs grep 'UTF-8' 
●./plugin/rss内を変換
-----------------------
※$ grep -r 'open' ./で調べ、下記のを追加
.plugin/rss/RSS.pm
.plugin/rss/RSSMaker.pm
.plugin/rss/RSSMaker10.pm
use utf8;
use open ":utf8";
use open ":std";
-----------------------
●RSS.pmをwiki3_6_5/plugin/rss/RSS_moto.pmとしてバックアップ。その後、wiki3_6_4_utf82/plugin/rss_●rssに子ウィキの更新情報も反映を適用版/RSS.pmのに差し替え
$ diff wiki3_6_5/plugin/rss/RSS_moto.pm wiki3_6_5/plugin/rss/RSS.pm
●RSS2.pm
	$buf .= "<script type=\"text/javascript\" src=\"http://rss-jp.net/x/read_rss.cgi?url=$url&style=js&encode=euc&num=$count\"></script>";
↓
	$buf .= "<script type=\"text/javascript\" src=\"http://rss-jp.net/x/read_rss.cgi?url=$url&style=js&encode=utf8&num=$count\"></script>";
に変更
●RSSMaker.pmをwiki3_6_5/plugin/rss/RSSMaker.pm.motoとしてバックアップし、wiki3_6_4_utf82/plugin/rss_●rssに子ウィキの更新情報も反映を適用版/RSSMaker.pmのに差し替え
$ diff -r wiki3_6_5/plugin/rss/RSSMaker.pm.moto wiki3_6_5/plugin/rss/RSSMaker.pm
●RSSMaker10.pmをwiki3_6_5/plugin/rss/RSSMaker10.pm.motoとしてバックアップし、wiki3_6_4_utf82/plugin/rss_●rssに子ウィキの更新情報も反映を適用版/RSSMaker10.pm
のに差し替え
$ diff -r wiki3_6_5/plugin/rss/RSSMaker10.pm.moto wiki3_6_5/plugin/rss/RSSMaker10.pm
●docsディレクトリ内を変換
$ cd docs
●検索結果一覧の中からgrepでEUC-JPにマッチするファイルを検索
$ find . -type f | xargs grep 'EUC-JP' 
./readme.html:  <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
...
●sedで変換結果をそのままファイルに保存
$ find . -type f | xargs sed -i 's/EUC-JP/UTF-8/g'
●確認
$ find . -type f | xargs grep 'UTF-8'
./readme.html:  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...
●tmplディレクトリ内を変換
$ cd ../tmpl
$ find . -type f | xargs grep 'EUC-JP' 
$ find . -type f | xargs sed -i 's/EUC-JP/UTF-8/g'
$ find . -type f | xargs grep 'UTF-8'
3. wiki.cgiにuse utf8;を追加とPATHの変更
use lib './lib';
# ModPerl::Registry(Prefork)では@INCが初期化されている場合がある
unshift @INC, './lib' if(exists $ENV{MOD_PERL});
↓
use lib qw(/var/www/lib/wiki/lib);
# ModPerl::Registry(Prefork)では@INCが初期化されている場合がある
unshift @INC, '/var/www/lib/wiki/lib' if(exists $ENV{MOD_PERL});
に変更
4.lib,plugin,tmpを比較し、カスタマイズした差分を適用
●wiki3_6_5/lib/以下をwiki3_6_4_utf82/libと比較してwiki3_6_5/に反映
にコピー
■lib
●lib/Algorithm
$ diff -qsr wiki3_6_5/lib/Algorithm/ wiki3_6_4_utf82/lib/Algorithm/
●lib/Bundle
$ diff -qsr wiki3_6_5/lib/Bundle/ wiki3_6_4_utf82/lib/Bundle/
●lib/CGI
$ diff -qsr wiki3_6_5/lib/CGI wiki3_6_4_utf82/lib/CGI
●lib/Digest
$ diff -sqr wiki3_6_5/lib/Digest/ wiki3_6_4_utf82/lib/Digest/
●lib/File
$ diff -sqr wiki3_6_5/lib/File/ wiki3_6_4_utf82/lib/File/
●lib/HTML
$ diff -sqr wiki3_6_5/lib/HTML/ wiki3_6_4_utf82/lib/HTML/
●lib/HTTP
$ diff -sqr wiki3_6_5/lib/HTTP/ wiki3_6_4_utf82/lib/HTTP/
●lib/Image
$ diff -sqr wiki3_6_5/lib/Image/ wiki3_6_4_utf82/lib/Image/
●lib/Jcode
$ diff -sqr wiki3_6_5/lib/Jcode wiki3_6_4_utf82/lib/Jcode
●lib/LWP
$ diff -sqr wiki3_6_5/lib/LWP wiki3_6_4_utf82/lib/LWP
●lib/MIME
$ diff -sqr wiki3_6_5/lib/MIME/ wiki3_6_4_utf82/lib/MIME/
●lib/Net
$ diff -sqr wiki3_6_5/lib/Net/ wiki3_6_4_utf82/lib/Net/
●lib/PDFJ
$ diff -sqr wiki3_6_5/lib/PDFJ wiki3_6_4_utf82/lib/PDFJ
●lib/Regexp
$ diff -sqr wiki3_6_5/lib/Regexp/ wiki3_6_4_utf82/lib/Regexp/
●lib/TeX
$ diff -sqr wiki3_6_5/lib/TeX/ wiki3_6_4_utf82/lib/TeX/
●lib/URI
$ diff -sqr wiki3_6_5/lib/URI wiki3_6_4_utf82/lib/URI
●lib/WWW
$ diff -sqr wiki3_6_5/lib/WWW/ wiki3_6_4_utf82/lib/WWW/
●lib/Wiki
$ diff -sqr wiki3_6_5/lib/Wiki wiki3_6_4_utf82/lib/Wiki
■違う箇所だけピックアップ
●lib/LWP
$ diff -qr wiki3_6_5/lib/LWP/ wiki3_6_4_utf82/lib/LWP/
●lib/Net
$ diff -qr wiki3_6_5/lib/Net/ wiki3_6_4_utf82/lib/Net/
●lib/PDFJ
$ diff -qr wiki3_6_5/lib/PDFJ wiki3_6_4_utf82/lib/PDFJ
●lib/TeX
$ diff -qr wiki3_6_5/lib/TeX/ wiki3_6_4_utf82/lib/TeX/
●lib/Wiki
$ diff -sqr wiki3_6_5/lib/Wiki/ wiki3_6_4_utf82/lib/Wiki/
┗上で「■違う箇所だけピックアップ」したものの中で
■lib/Wiki/以下で違うファイル箇所のdiff内容を個別にピックアップ
▼ファイルwiki3_6_5/lib/Wiki/DefaultStorage.pmとwiki3_6_4_utf82/lib/Wiki/DefaultStorage.pmは違います
$ diff wiki3_6_5/lib/Wiki/DefaultStorage.pm wiki3_6_4_utf82/lib/Wiki/DefaultStorage.pm 
▼ファイルwiki3_6_5/lib/Wiki/HTMLParser.pmとwiki3_6_4_utf82/lib/Wiki/HTMLParser.pmは違います
$ diff wiki3_6_5/lib/Wiki/HTMLParser.pm wiki3_6_4_utf82/lib/Wiki/HTMLParser.pm
▼ファイルwiki3_6_5/lib/Wiki/InterWiki.pmとwiki3_6_4_utf82/lib/Wiki/InterWiki.pmは違います
$ diff wiki3_6_5/lib/Wiki/InterWiki.pm wiki3_6_4_utf82/lib/Wiki/InterWiki.pm
■lib/以下のファイル
$ diff -sq wiki3_6_5/lib/ wiki3_6_4_utf82/lib/
▼ファイルwiki3_6_5/lib/Util.pmとwiki3_6_4_utf82/lib/Util.pmは違います
$ diff wiki3_6_5/lib/Util.pm wiki3_6_4_utf82/lib/Util.pm 
▼ファイルwiki3_6_5/lib/Wiki.pmとwiki3_6_4_utf82/lib/Wiki.pmは違います
$ diff wiki3_6_5/lib/Wiki.pm wiki3_6_4_utf82/lib/Wiki.pm
▼ファイルwiki3_6_5/lib/Wiki.pmとwiki3_6_4_utf82/lib/Wiki.pmは違います
$ diff wiki3_6_5/lib/Wiki.pm wiki3_6_4_utf82/lib/Wiki.pm
■plugin/wiki3_6_5/plugin/とwiki3_6_4_utf82/plugin/の比較
$ diff -sqr wiki3_6_5/plugin/ wiki3_6_4_utf82/plugin/
■./plugin
wiki_3_6_5/plugin/とwiki3_6_4_utf82/plugin/の比較
$ diff -sqr wiki3_6_5/plugin/ wiki3_6_4_utf82/plugin/
「は違います。」のは比較して検討し、必要なら3_6_4から3_6_5にコピー
Jcode::convertで調べ、euc->utf8に変更したファイル
./lib/CGI2.pm
./plugin/attach/AttachHandler.pm
./plugin/attach/AttachHandler.pm
./plugin/attach/RefText.pm
$ grep -r 'EUC' ./ で調べてUTF-8に変換
$ grep -r './lib' ./ で調べて絶対PATHに変更
●その他(setup.dat内を適切に変更)
config/*.datを*.cgiに拡張子変更
[tatta@ta wiki3_6_3_1]$ grep -r 'EUC' ./
./wiki.cgi
...
$ grep -r 'euc' ./
■setup.dat→setup.cgiに修正か.htaccessで対応
$ grep -r "検索文字列" ./:,'setup.dat'

上記のように3.6.4と3.6.5のバージョンアップに関して新規に追加されたファイルと変更のあったファイルの差分をdiffコマンドで取得してcgiファイルにはuse utf8;をつけて、openを使っているファイルには追加で「use open ":utf8";use open ":std";」を追加するなどして反映させたような形のカスタマイズをしました。もし既に稼働させている3.6.4のECU-JP版をを3.6.5にUPしてutf8化するには、結局、EUCでエンコードされた./data/以下にある「%から始まる文字列.wiki」のファイルにも対応しなければいけなくなるので、ちょっとメンドクサイ形になってしまいますよね。なので、その場合は、中身はutf8だけど保存ファイル名はEUCの状態。という形でうまく中身を取り出すようにするなど少し処理を考えないといけなくなるのかな・・・と思いますがKGさんの方が専門ですので私があれこれ言う事でもないですね^^;あとプラグイン説明箇所やリンクが文字化けしたりなどあちこちで修正箇所が必要になったのでその都度文字化けしている箇所を特定してUTF8化に修正していく流れでした。 - tatta (2022年10月15日 12時59分24秒)

お名前: コメント:

最終更新時間:2022年10月15日 14時30分23秒