【問題】
http://chazuke.com/?page_id=126
Excel_Reviser(reviser.php)が64ビットOSで動かない。
32ビット版CentOSで動作していたPHPアプリケーションを丸ごとAmazonLinux(64bit)に持っていったら、Excel_Reviserがエラー。
※以下の様なエラーが出た
- ERROR file(エクセルファイル名) is broken (sStartBlk)
- ERROR file(エクセルファイル名) is broken (ExBlock)
■今回AWSへの移設だったのでこまった
# AmazonLinuxに32bit版は存在しない
# AWS MarkecplaceのCentOS6.9 32bitを使用することも検討したが、公式の32bit版が見当たらない。公式曰く
https://wiki.centos.org/Cloud/AWS#head-d569f212a6094ccba6bfada7bd573b9f7b27d4bb
> i386
> On advice from AWS, we no longer publish or maintain i386/i686 images;
とのことで断念した。一応古いものとして
> CentOS 6.4 (i386) - Release Media
は存在している
【やったこと】
!!以下バッドノウハウです。分かる人なおして!!
(って書いたら許されるかな。。。)
エラー処理を殺して無理やり動かした。
diff -u reviser.php_org reviser.php @@ -860,10 +860,10 @@ $len_ole = strlen($ole_data); if ($numDepots > ($len_ole / 65536 +1)) return $this->raiseError("ERROR file($Fname) is broken (numDepots)"); - if ($sStartBlk > ($len_ole / 512 +1)) - return $this->raiseError("ERROR file($Fname) is broken (sStartBlk)"); - if ($ExBlock > ($len_ole / 512 +1)) - return $this->raiseError("ERROR file($Fname) is broken (ExBlock)"); + //if ($sStartBlk > ($len_ole / 512 +1)) + // return $this->raiseError("ERROR file($Fname) is broken (sStartBlk)"); + //if ($ExBlock > ($len_ole / 512 +1)) + // return $this->raiseError("ERROR file($Fname) is broken (ExBlock)"); if ($numExBlks > ($len_ole / 512 +1)) (省略)
【調査メモ:2018年01月現在】
・本家(会員登録とログイン必用)
http://chazuke.com/forum/viewforum.php?f=2
で配布されているののは0.30beta。0.33betaというのまでは存在したようだが現在は入手不可能。
・0.30betaを使用した場合、64bit版では
- ERROR file(エクセルファイル名) is broken (sStartBlk)
- ERROR file(エクセルファイル名) is broken (ExBlock)
というようなエラーが出ることが報告されているが、対応はされていない模様。
・こちらのスレッド
http://chazuke.com/forum/viewtopic.php?f=3&t=113
や
こちらの記事
備忘録: Excel_Reviserでエクセルファイルが壊れていると出てきた場合
で、エラーチェックをコメントすれば動くよ、といったことが書かれている
【その他情報メモ】
Excel_Reviserを64bitマシンで動くようにしてみた
→具体的な改修後コードが無いので自分には高度過ぎた。
問題は認識されているが改修環境が無く実施できない模様
gitに新しいバージョン?