PHP:Excel_Reviserが動作しない

とあるシステムの新インフラ化作業を行っているが、Excel_Reviserなるライブラリが新環境で動作しない。


Excel_Reviser
PHPを用いたEXCELファイル編集用ライブラリーらしいが開発休止中

環境

旧環境:PHP 5.2.8 / Windows 32bit / SJIS
新環境:PHP 7.4.6 / Windows 64bit / UTF-8 (XAMPPで構築)
reviserのバージョン:0.24 beta 2008/01/13

現象(1)

reviser.phpのincludeでエラーとなる。
Deprecated: Array and string offset access syntax with curly braces is deprecated

■原因
asc2utf関数内で配列要素を { } で指定していた。

■対応
[ ] に変更する。

変更前:
$utfname.=$ascii{$i}."\x00";

変更後:
$utfname.=$ascii[$i]."\x00";


現象(2)

includeで別のエラー
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Excel_Reviser has a deprecated constructor

■原因
クラス名とコンストラクタ名が同じ "Excel_Reviser" のため。

■対応
コンストラクタ名を "__construct" へ変更する。

変更前:
function Excel_Reviser(){

変更後:
function Excel_Reviser__construct(){


現象(3)

get_magic_quotes_runtime関数でエラー
Deprecated: Function get_magic_quotes_runtime() is deprecated

■原因
「この関数は PHP 7.4.0 で 非推奨になります。この関数に頼らないことを強く推奨します。」とのこと。

■対応
とりあえず 関数削除し false をセットするように修正。

変更前:
$this->Flag_Magic_Quotes = get_magic_quotes_runtime();

変更後:
$this->Flag_Magic_Quotes = false;


現象(4)

Excelのオープン処理でエラー
ERROR file(~) is broken (ExBlock)

■原因
不明
Excelファイルヘッダのチェックでもやっているんだろうか?

■対応
よくわからないので全てコメントアウト

現象(5)

__to_utf16関数の呼び出しでエラー
Notice: Only variables should be passed by reference

■対応
__to_utf16関数の第1引数 &%str の "&" を除去する。

変更前:
function __to_utf16(&$str,$opt=0)

変更後:
function __to_utf16($str,$opt=0)


上記1~5の対応で何となく動いたので良しとする


技術メモ, PHP, reviser

2 件のコメント:

Unknown さんのコメント...

Good Job! ちなみに現象(4)は、OLEコンテナというバイナリデータ保管形式の整合チェックする際にPHPの整数バイト長を4バイト決め打ちで作ってしまったからです。破損ファイルでなければコメントアウトで問題無しです。

masa さんのコメント...

Unknown さん、ありがとう。

その他の記事