zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

【PHP】Excel_Reviserが64bit版OSで動作しない件の暫定対応

【問題】

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に新しいバージョン?