Tag: haik

HAIKのPHP8対応について

 現在(2025-01-24)は削除されてないが、2024年秋に一ヶ月程HAIKのPHP8対応版がGitHubで公開されていた。開発途中で確定していない状態だったが、PHP8.3上で概ね動作するようになっていた。多少動きがおかしな部分も残るようだ。有料サポートを受けていると思われる人の書き込みが、有志が管理しているBBSへ、「PHP8対応のアナウンスがあった」と書き込みがあったが、情報の出所の記載も無く、正式発表も無い(2025-01-24時点)。

 ここ数年、HAIKが公開され、ダウンロード出来ていたGitHubのサイトはアーカイブ化されて、更新の予定が無いように見える。

https://github.com/open-qhm/

 当方としては一時的に利用できるようになっていたPHP8対応版を使って試用している段階です。気になった点などを残しておきたいと思います。本サイトも試用しています。通常のHAIKと区別する為に、バージョン表記を7.6.41としています。

 PHP7.4などで動いているHAIKに今回新しくなったファイルのみを転送して上書きしようとすると、エラーになる事があるようです。これは、自分でプラグインを微調整したり、新たにプラグインをインストールしたような場合に起きやすいと思われます。


確認しているエラー

dllinkプラグイン

dllinkプラグインなど添付ファイルのダウンロードボタンやリンクのプラグインを使うと画面が白くなる。(2025-01-23 確認)

codeプラグイン

 PukiWikiのソースコードの色分け表示プラグインのcodeプラグインを使っている。私の設定が悪いのか、html、perlでエラーとなるようです。白い画面になる。(2025-01-23 確認)
 codeプラグインは、codeplugin_0.6.1.zip として配布されているのが良いようです。ただし、lib/func.phpで次のような関数を追加してください。後でcodeプラグインについて再度説明しています。

function htmlsc($string = '', $flags = ENT_COMPAT, $charset = CONTENT_CHARSET)
{
    return htmlspecialchars($string, $flags, $charset);    // htmlsc()
} 

さらに、plugin/code//codehighlight.php で以下のような変更をしないとPHPの色分け表示で改行がされなくなります。

  • 変更前
            $before = array('<font color="'      , 'font>', "\n", '&nbsp;', '<br /></span>', '<br />');
            $after  = array('<span style="color:', 'span>', ''  , ' '     , "</span>\n"    , "\n"    ); 
  • 変更後
            $before = array('<font color="'      , 'font>',  '&nbsp;', '<br /></span>', '<br />');
            $after  = array('<span style="color:', 'span>',  ' '     , "</span>\n"    , "\n"    ); 


searchプラグイン

検索ボタンを押すと画面が白くなるが、私の環境だけのようです。(2025-01-26)

Qdmail

オープンソースのライブラリQdmail が環境によってはエラーになるようです。
HAIKとともに配布されているのが「Qdmail ver 1.2.0b」の場合は、「Qdmail ver 1.2.6b」にするとエラーが解消するようです。ファイルはHAIK内で、lib/qdmail.php として配置されています。

Qdmail: https://hal456.net/qdmail/


参考

エラーになる場合

500エラーなどが表示され、画面がほぼ白になる場合で、HAIKのプログラムでエラーが発生しているのであれば、index.php に画面表示のオプションを追加します。

<?php
// PukiWiki - Yet another WikiWikiWeb clone.
// $Id: index.php,v 1.9 2006/05/13 07:39:49 henoheno Exp $
// Copyright (C) 2001-2006 PukiWiki Developers Team
// License: GPL v2 or (at your option) any later version
 
// Error reporting
//error_reporting(0); // Nothing
error_reporting(E_ERROR | E_PARSE); // Avoid E_WARNING, E_NOTICE, etc
//error_reporting(E_ALL); // Debug purpose
 
// エラーを画面表示する場合、以下の1行を追加
ini_set( 'display_errors', 1 );
 
// Special
//define('PKWK_READONLY',  1);
//define('PKWK_SAFE_MODE', 1);
//define('PKWK_OPTIMISE',  1);
//define('TDIARY_THEME',   'digital_gadgets');
 
// Directory definition
// (Ended with a slash like '../path/to/pkwk/', or '')
define('DATA_HOME',	'');
define('LIB_DIR',	'lib/');
 
require(LIB_DIR . 'pukiwiki.php');
?>


// エラーを画面表示する場合、以下の1行を追加
ini_set( 'display_errors', 1 );

の部分です。

この変更をしても白い画面の場合は、「notice」「warning」が多くて、処理が中断or省略or終了されている様です。

ini_set( 'display_errors', 1 );
error_reporting(E_ALL); // Debug purpose

と更に変更すると、エラー表示が省略されなくなるようです。この表示の中の「Fatal error」(致命的なエラー)を解消するように対策します。

Fatalエラーがなくなったら、

#ini_set( 'display_errors', 1 );
#error_reporting(E_ALL); // Debug purpose

とします。

→本サイトのここも参照してください


参考:PHPのエラーについて

https://irodori-design-web.com/blog/blog-1318/

codeプラグインについて

codeプラグインはPukiwiki用のものですが、HAIKでも使えます。ただし、PHP8になって注意しないと言語指定がtextでないと動かなかったらり、PHP8用のcodeプラグインを入れたら動作しなくなったりします。

今の所、以下のPHP対応版のcodeプラグインを利用するのと、HAIKの lib/func.php へのhtmlsc関数の追加が良いように思われます。

lib/func.php への追加ですが、

// Sugar with default settings
 
function htmlsc($string = '', $flags = ENT_COMPAT, $charset = CONTENT_CHARSET)
{
	return htmlspecialchars($string, $flags, $charset);	// htmlsc()
}
 
function is_interwiki($str)
{
	global $InterWikiName;
	return preg_match('/^' . $InterWikiName . '$/', $str);
}

となるように、htmlsc関数を追加して下さい。


その他pluginの変更メモ

diffコマンドでの差分を表示した時の結果を掲載します。

$ diff attach.inc.php attach.inc.php.org 
466,469d465
<       // 2025-02-10
<     //public static function datecomp($a, $b) {
<     //    // ...
<     //}
510c506
<       public static function datecomp($a, $b) {
---
>       function datecomp($a, $b) {
$ diff lsx.inc.php lsx.inc.php.org 
894c894
<         if ($name[0] == '/') {
---
>         if ($name{0} == '/') {
$ diff style.inc.php style.inc.php.org 
190c190
<         switch($tmpstr[0]){
---
>         switch($tmpstr{0}){
203c203
<         if($tmpstr[1]=='s'){
---
>         if($tmpstr{1}=='s'){
212c212
<         switch($tmpstr[2]){
---
>         switch($tmpstr{2}){
$ diff counter.inc.php counter.inc.php.org 
116,119c116
<               if (is_numeric($counters[$page]['total'])) {
<                       $counters[$page]['total']++;
<               } else
<                       $counters[$page]['total'] = 1;
---
>               $counters[$page]['total']++;


自作プラグインの文字化け

 自作の簡単な見積書作成のプラグインでFORMタグに入力した内容を保存する為に$_POST変数を利用して次の確認画面に情報を受け渡し・・・としている部分で文字化けが発生。UTF-8のHAIKのページから同様にHAIKのページへ画面遷移する場合は、POSTで渡させれる変数をHAIK側で文字コードを変更する必要は無いと思われます。
 これは、PHPのバージョンが8.2から8.3になる時に、mb・・・・関数の動きや環境の管理が代わったのが原因と思われます。
 以下の様に、lib/init.php での文字コードの変換をコメントにすると私の自作プラグイン出の文字化けは解消しています。もう少し動作確認し、問題が見つかったら報告します。(2025-02-22)

lib/init.php にて

// 文字コード変換 ($_POST)
// <form> で送信された文字 (ブラウザがエンコードしたデータ) のコードを変換
// POST method は常に form 経由なので、必ず変換する
//
/*
if (isset($_POST['encode_hint']) && $_POST['encode_hint'] != '') {
    // do_plugin_xxx() の中で、<form> に encode_hint を仕込んでいるので、
    // encode_hint を用いてコード検出する。
    // 全体を見てコード検出すると、機種依存文字や、妙なバイナリ
    // コードが混入した場合に、コード検出に失敗する恐れがある。
    $encode = mb_detect_encoding($_POST['encode_hint']);
    mb_convert_variables(SOURCE_ENCODING, $encode, $_POST);
 
} else if (isset($_POST['charset']) && $_POST['charset'] != '') {
    // TrackBack Ping で指定されていることがある
    // うまくいかない場合は自動検出に切り替え
    if (mb_convert_variables(SOURCE_ENCODING,
        $_POST['charset'], $_POST) !== $_POST['charset']) {
        mb_convert_variables(SOURCE_ENCODING, 'auto', $_POST);
    }
 
} else if (! empty($_POST)) {
    // 全部まとめて、自動検出/変換
    mb_convert_variables(SOURCE_ENCODING, 'auto', $_POST);
}
*/