*XREAでkakasiを使う [#q834ff2b] **Perl版Chasen/KAKASIの利用法 [#i6b6ae8c] ~kakasi.cgi #!/usr/local/bin/perl use Text::Kakasi; Text::Kakasi::getopt_argv('kakasi', '-kK', '-HK', '-JK'); @kata = (); # PageReadingファイルパス指定 $fname = '/virtual/ACCOUNT ID/public_html/pukiwiki/cache/PageReading'; open(IN, $fname); while (<IN>) { push(@kata, Text::Kakasi::do_kakasi($_)); } close(IN); Text::Kakasi::close_kanwadict(); open(OUT, "> $fname"); foreach $i (@kata) { print OUT "$i"; } close(OUT); print "Content-Type: text/html\n\n"; exit; ~pukiwiki.ini.php $pagereading_kakasi_path = '/cgi-bin/kakasi.cgid'; // URLを相対パスで ~file.phpの604行目case 'kakashi'からcase 'none'までの間を次のように変更。 case 'kakashi': $tmpfname = CACHE_DIR . 'PageReading'; // PageReadingに固定 $fp = fopen($tmpfname, "w") or die_message("Cannot write temporary file '$tmpfname'.\n"); foreach ($readings as $page => $reading) { if($reading == '') { fputs($fp, mb_convert_encoding("$page\n", $pagereading_kanji2kana_encoding, SOURCE_ENCODING)); } } fclose($fp); chmod($tmpfname, 0666); virtual($pagereading_kakasi_path); $fp = fopen($tmpfname, "r"); foreach ($readings as $page => $reading) { if($reading == '') { $line = fgets($fp); $line = mb_convert_encoding($line, SOURCE_ENCODING, $pagereading_kanji2kana_encoding); $line = chop($line); $readings[$page] = $line; } } fclose($fp); unlink($tmpfname) or die_message("Temporary file can not be removed: $tmpfname"); break; case 'none': -XREAでChasenが使えるらしいのですが、うちで試してみてもNotFoundになります。どなたか使えているという方はいませんか? -- &new{2004-10-03 (日) 18:58:43}; --XREAでは、perlのモジュールで呼び出さないと行けないので一工夫が必要のようです。(やろうやろうと思っていてできてないことの一つですが) -- [[merlin]] &new{2004-10-05 (火) 19:52:45}; -[[PukiWiki/Namazu]]に書いてあるようなことはできませんか? -- &new{2004-10-28 (木) 17:03:57}; -http://sb.xrea.com/showthread.php?t=8557を見ると、/usr/local/php/bin/chasenか/usr/local/php/bin/kakasiでchasenとkakasiが使えるみたい。 -- &new{2005-02-04 (金) 00:31:22}; --どうも無理みたい。cgiからでないと読みが正しく出てこない・・・ -- &new{2005-04-23 (土) 23:07:27}; **質問箱から移動したもの [#uddffc45] [XREA] Perl版Chasen/KAKASIの利用法 ***質問 [#w3bc2456] 表題の通り、私がPukiwikiを使ってるXREAではPerlでChasen/KAKASIが提供されているようです。~ そこで、こいつを使いたいのですが単純にpukiwiki.ini.phpで利用するように設定してもNot Foundになってしまいます。~ Perl版を使うには何か別の設定が必要なのでしょうか? ***回答 [#q08bab9e] -Perlスクリプトが必要かと。次のようなスクリプトがシェルで動くのでしょうか?試してみてください。ニホンゴノブンショウ と出ればいいのですが。 -- [[さばぞう]] &new{2004-10-05 (火) 20:50:32}; use Text::Kakasi; Text::Kakasi::getopt_argv('kakasi', '-kK', '-HK', '-JK'); print Text::Kakasi::do_kakasi('日本語の文章'); Text::Kakasi::close_kanwadict(); -実行方法も書いたほうがよかったですね。上記を例えばkatest.plというファイル名で保存して、XREAへアップし、シェル上でperl katest.pl。 -- [[さばぞう]] &new{2004-10-05 (火) 21:46:21}; -残念ながらシェル上でのperlの実行が制限されているようです(cdすらも・・・) -- [[Lick]] &new{2004-10-06 (水) 16:09:02}; -では名前をkatest.cgiとし、ファイル先頭に#!/usr/local/bin/perl(XREAのPerlのパスに合わせる)を追加し、実行属性にするとどうなるでしょう。 -- [[さばぞう]] &new{2004-10-06 (水) 21:21:26}; -その通りやってみると、きちんと「ニホンゴノブンショウ」と表示されました。 -- [[Lick]] &new{2004-10-06 (水) 22:45:02}; -おぉ。では次のようにすれば動くのかな。 -- [[さばぞう]] &new{2004-10-07 (木) 00:52:58}; ~kakasi.cgi #!/usr/local/bin/perl use Text::Kakasi; Text::Kakasi::getopt_argv('kakasi', '-kK', '-HK', '-JK'); while (<>) { print Text::Kakasi::do_kakasi($_); } Text::Kakasi::close_kanwadict(); ~pukiwiki.ini.php $pagereading_enable = 1; $pagereading_kanji2kana_converter = 'kakasi'; $pagereading_kakasi_path = 'kakasi.cgi'; // 絶対パスがいいかも ~lib/file.php 402行あたり $kakasi = "$pagereading_kakasi_path < $tmpfname"; -動い・・・たようなんですが、肝心の漢字が全て「記号」として扱われてます。 -- [[Lick]] &new{2004-10-07 (木) 01:19:12}; -- それは 単にエラーになっておらず、ブランクが帰って来ているだけです。-- [[merlin]] &new{2004-10-07 (木) 16:20:03}; -それでは 動きません。XREAのPHPは、SAFE MODEですので、popenが使えないんです。 -- [[merlin]] &new{2004-10-07 (木) 07:46:08}; safe_mode On safe_mode_exec_dir /usr/local/php/bin safe_mode_gid Off http://jp.php.net/manual/ja/features.safe-mode.functions.php //http://php.s3.to/man/features.safe-mode.functions.html --virtual で perl script 動かして POST/GET でやり取りするしか無いのかな? -- [[merlin]] &new{2004-10-07 (木) 08:00:37}; -CGI版でインストールすると言う手を使うのがいいのかな? -- [[merlin]] &new{2004-10-07 (木) 16:20:03}; -むぅ残念。結構な改造が必要そうですね。 -- [[さばぞう]] &new{2004-10-08 (金) 08:44:45}; -やはり簡単にはいきませんですか。 -- [[Lick]] &new{2004-10-08 (金) 10:42:52}; -cgi としてInstall すれば safe mode でないので使えますね -- [[merlin]] &new{2004-10-08 (金) 11:03:02}; -一応、virtual版も作ってみました。ローカルマシンのWindows環境でしか試していませんが、なんとか動いているようです。ファイルの受け渡しがわからなかったので、キャッシュディレクトリにPageReadingというテンポラリファイルを作るようにしてます。 (^^; -- [[さばぞう]] &new{2004-10-11 (月) 00:51:49}; ~kakasi.cgi #!/usr/local/bin/perl use Text::Kakasi; Text::Kakasi::getopt_argv('kakasi', '-kK', '-HK', '-JK'); @kata = (); # PageReadingファイルパス指定 $fname = '../htdocs/pukiwiki/cache/PageReading'; # XREAのパスに要修正 open(IN, $fname); while (<IN>) { push(@kata, Text::Kakasi::do_kakasi($_)); } close(IN); Text::Kakasi::close_kanwadict(); open(OUT, "> $fname"); foreach $i (@kata) { print OUT "$i"; } close(OUT); print "Content-Type: text/html\n\n"; exit; ~pukiwiki.ini.php $pagereading_kakasi_path = '/cgi-bin/kakasi.cgi'; // URLを相対パスで ~file.phpの388行目case 'kakashi'からcase 'none'までの間を次のように変更。 case 'kakashi': $tmpfname = CACHE_DIR . 'PageReading'; // PageReadingに固定 $fp = fopen($tmpfname, "w") or die_message("Cannot write temporary file '$tmpfname'.\n"); foreach ($readings as $page => $reading) { if($reading == '') { fputs($fp, mb_convert_encoding("$page\n", $pagereading_kanji2kana_encoding, SOURCE_ENCODING)); } } fclose($fp); virtual($pagereading_kakasi_path); $fp = fopen($tmpfname, "r"); foreach ($readings as $page => $reading) { if($reading == '') { $line = fgets($fp); $line = mb_convert_encoding($line, SOURCE_ENCODING, $pagereading_kanji2kana_encoding); $line = chop($line); $readings[$page] = $line; } } fclose($fp); unlink($tmpfname) or die_message("Temporary file can not be removed: $tmpfname"); break; case 'none': --%%をぉ、試してみたら動作しました(cgiからcgidに変更はしましたが)。ありがとうございました。 -- [[Lick]] &new{2004-10-12 (火) 22:03:22};%% -そっかぁ tempファイル作ってやりとり. あと PageReadingファイルパス指定は絶対パスで指定した方が良さそうですぅ -- [[merlin]] &new{2004-10-12 (火) 22:18:52}; -順調に稼働しているように見えましたが、ページが追加されるとそのページの読みが取得されず、そのままPageReadingに追加されてしまいます。また、その時kakasi.cgiの実行結果が一覧ページの上に表示されてしまいます(1度表示されるだけで2度目以降は表示されない)。これは何故でしょうか。 -- [[Lick]] &new{2004-10-16 (土) 08:12:46}; -いろいろと試してみた結果、どうやらPageReadingを作成する際、644で作成されることに問題があるようです。予め同名ファイルを666で作成しておくと問題なく読みが取得されました。~ ので、file.phpの~ unlink($tmpfname) or die_message("Temporary file can not be removed: $tmpfname"); の部分を削除すればいいのでしょうか。 -- [[Lick]] &new{2004-10-17 (日) 17:27:20}; --それだとキャッシュがクリアされないからどんどんファイルサイズがでかくなってしまう罠。素直に作成時に666で作るようにする方がよいかと。 -- &new{2004-10-18 (月) 11:08:36}; -file.phpの最初のfcloseの後ろに次を追加してください。 -- [[さばぞう]] &new{2004-10-18 (月) 15:46:47}; fclose($fp); +chmod($tmpfname, 0666); virtual($pagereading_kakasi_path); -http://melfina.org/archives/2004/11/04_1256.html に書かれているように、Chasen/KAKASIのあるパスの記述を書き換えるだけで良いのかな。。 -- [[たれ込み]] &new{2004-11-16 (火) 11:08:04}; - Cheap drugs at Online drugstore http://www.drugs-for-you.stimulhosting.comCialis,lipitor,diflucan,viagra,fosamax, etc.No recipe!!!Lowest Prices on the Internet!!!Check prices now here -->> www.drugs-for-you.stimulhosting.com -- [[buy cheap cialis online]] &new{2008-06-24 (火) 07:00:16}; - Cheap drugs at Online drugstore http://www.drugs-for-you.stimulhosting.comCialis,lipitor,diflucan,viagra,fosamax, etc.No recipe!!!Lowest Prices on the Internet!!!Check prices now here -->> www.drugs-for-you.stimulhosting.com -- [[buy cheap cialis online]] &new{2008-06-24 (火) 07:35:29}; #comment //#comment