新しいPHPにおけるKCfinder修正メモ

新しいPHP(2022年12月現在 バージョン8.2)におけるKCFinderの修正メモです。

修正箇所だけを簡潔に記載しております。

このページの内容はあくまでKCFinderを新しいPHPで動作させることを目的としております。 KCFinderは2014年7月からv3.12を最後に更新されていないようです。 セキュリティおよび脆弱性に関しては一切触れておりませんので、当該ソフトウェアの利用は自己責任でお願いいたします。

1. each関数を除外

each関数はPHP7.2以降で非推奨となり、PHP8.0では削除されました。

※詳細はこちら。

"kcfinder/lib/class_image.php" 119~120行目付近

list($key, $width) = each($image);
list($key, $height) = each($image);

each関数を使わないよう修正します。

$width = $image[0];
$height = $image[1];

2. strlen関数の第1引数にnullが入ることを防止

PHP8.1以降ではstrlen関数の第1引数にnullが入ることが非推奨となっています。

※詳細はこちら。

エラーメッセージは下記の通りです。

PHP Deprecated: strlen():
Passing null to parameter #1 ($string) of type string is deprecated in
/home/xxxxxx/yyy/zzzzz/kcfinder/lib/class_fastImage.php on line 211

"kcfinder/lib/class_fastImage.php"の19行目、fastImageクラスのメンバー変数$strの定義を確認します。

private $str;

メンバー変数$strを空の文字列で初期化するように変更します。

private $str = ''; 

3. imagepng関数の第3・第4引数にnullが入ることを防止

PHP8.1からimagepng関数の第3・第4引数にnullが入ることが非推奨となっています。

GDを使用してpng画像をアップロードした場合、下記のようなエラーメッセージが表示されます。

Deprecated: imagepng(): 
Passing null to parameter #3 ($quality) of type int is deprecated in 
/home/xxxxxx/yyy/zzzzz/kcfinder/lib/class_image_gd.php on line 268

Deprecated: imagepng(): 
Passing null to parameter #4 ($filters) of type int is deprecated in 
/home/xxxxxx/yyy/zzzzz/kcfinder/lib/class_image_gd.php on line 268

"kcfinder/lib/class_image_gd.php" 264~265行目を確認します。

$quality = isset($options['quality']) ? $options['quality'] : null;
$filters = isset($options['filters']) ? $options['filters'] : null;

nullではなく-1が入るように修正します。

$quality = isset($options['quality']) ? $options['quality'] : -1;
$filters = isset($options['filters']) ? $options['filters'] : -1;

4. 文字列への変数展開の記述ミス修正

PHP8.2では文字列への変数展開の記述が厳しくチェックされているようです。

エラーメッセージは下記の通りです。

Deprecated: Using ${var} in strings is deprecated, 
use {$var} instead in /home/xxxxxx/yyy/zzzzz/kcfinder/core/class/browser.php on line 160

"kcfinder/core/class/browser.php" 160行目を確認します。

$file = "{$this->thumbsTypeDir}/{$_GET['dir']}/${_GET['file']}";

末尾の変数展開の記述がおかしくなっているのを修正します。(とても分かりにくい、タイプミスでしょうか?)

$file = "{$this->thumbsTypeDir}/{$_GET['dir']}/{$_GET['file']}";

更新履歴

  • 2022/12/30 PHP8.2まで対応
スポンサードリンク