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] Perl版Chasen/KAKASIの利用法
表題の通り、私がPukiwikiを使ってるXREAではPerlでChasen/KAKASIが提供されているようです。
そこで、こいつを使いたいのですが単純にpukiwiki.ini.phpで利用するように設定してもNot Foundになってしまいます。
Perl版を使うには何か別の設定が必要なのでしょうか?
use Text::Kakasi; Text::Kakasi::getopt_argv('kakasi', '-kK', '-HK', '-JK'); print Text::Kakasi::do_kakasi('日本語の文章'); Text::Kakasi::close_kanwadict();
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";
safe_mode On safe_mode_exec_dir /usr/local/php/bin safe_mode_gid Offhttp://jp.php.net/manual/ja/features.safe-mode.functions.php
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':
unlink($tmpfname) or die_message("Temporary file can not be removed: $tmpfname");の部分を削除すればいいのでしょうか。 -- Lick 2004-10-17 (日) 17:27:20
fclose($fp); +chmod($tmpfname, 0666); virtual($pagereading_kakasi_path);