PHPExcelで直接出力するとエラーがでます

質問全般・改善要望
tambara
メンバー
メンバー
記事: 2
登録日時: 2017年2月25日(土) 13:31

PHPExcelで直接出力するとエラーがでます

投稿記事by tambara » 2017年2月25日(土) 13:51

はじめまして、MODX使用させていただいています。

MODX(1.0.19J)からPHPExcel(1.8)を使用してエクセルファイルを出力($writer->save('php://output');)してダウンロードさせています。
サイズの小さな画像ファイルをエクセルに埋め込んで出力するとダウンロードできるのですが、
約2M程度の画像を埋め込んで出力すると以下のようなエラーがでます。

サーバー上にファイルを保存する形にするとエラーはでない状態です。

何か解決方法がありましたら、ご回答頂けると助かります。
拙い説明で申し訳ありませんが、よろしくお願いします。

--
« MODX Parse Error »

MODX encountered the following error while attempting to parse the requested resource:
« Execution of a query to the database failed - Got error 'brackets ([ ]) not balanced' from regexp »
SELECT id FROM `test_modx`.`modx_site_content` WHERE deleted=0 AND parent='0' AND alias REGEXP '^�������\n�r�3�뾉�����s������V�:US��fM\Z����(¦��gA�v�~t���j�\'Q\'\rq�u[��rroxD���V?�w%j�����V�����w�N��Q���Adj@�$'

Basic info
REQUEST_URI : /services/1.xls
Resource : [1047]ExcelダウンロードTEST
Referer :
User Agent : Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Benchmarks
MySQL : 0.0240 s (21 Requests)
PHP : 0.2567 s
Total : 0.2808 s
Memory : 16.15 MB

Backtrace

1 $modx->executeParser()
index.php on line 125
2 $modx->prepareResponse()
manager/includes/document.parser.class.inc.php on line 245
3 $modx->parseDocumentSource()
manager/includes/document.parser.class.inc.php on line 494
4 $modx->rewriteUrls()
manager/includes/document.parser.class.inc.php on line 2328
5 $modx->getIdFromAlias()
manager/includes/document.parser.class.inc.php on line 2768
6 DBAPI->select()
manager/includes/document.parser.class.inc.php on line 3623
7 DBAPI->query()
manager/includes/extenders/dbapi/mysqli.inc.php on line 252
soushi
管理人
記事: 223
登録日時: 2009年7月30日(木) 01:59

PHPExcelで直接出力するとエラーがでます

投稿記事by soushi » 2017年3月20日(月) 17:49

soushiです。

エイリアスにしていする文字列に"["もしくは"]"を利用していたりしますでしょうか。
もしくはエイリアスに日本語を入力した時、マルチバイトの後半が"["のコードと一致しているかもしれません。

最新版MODXで"["の記号をエイリアスに含めると同様の現象が確認できたので、回避策として次のどちらかを試してもらえますでしょうか。

・エイリアスに日本を利用しない
・エイリアスに"["や"]"の記号を利用しない

また不具合として次以降のバージョンで修正します。
アバター
yama
管理人
記事: 2848
登録日時: 2009年7月29日(水) 02:50

PHPExcelで直接出力するとエラーがでます

投稿記事by yama » 2017年3月21日(火) 10:13

こちらの件、今気が付きました。
エイリアスは日本語は問題なく使えるはず。使えるようにパーサ全体を調整したことがあるので。
「 [ 」などの文字が使えないというのはあり得るかもしれませんが、そのエラー内容を見たところREGEXPで問題が発生してるようなので、たぶん回避方法はあると思います。後ほど調べてみて、原因が分かれば修正しますね。
でもその話だと、エクセルに埋め込んだ画像のサイズに関係があるみたいで、それだとMODX自体には関係なくて、二次的に発生したエラーが画面に表示されている、ということのような気もしますが。文字化けした結果として「 [ 」がたまたま含まれているということのようですし。
tambara
メンバー
メンバー
記事: 2
登録日時: 2017年2月25日(土) 13:31

PHPExcelで直接出力するとエラーがでます

投稿記事by tambara » 2017年3月24日(金) 19:43

返信ありがとうございます!

エイリアスに日本語は使っていません。
どうやら、スニペットからバイナリデータをMODXに返して、それをMODXがパースしてしまうのが問題だったようです。
自前のPHPExcelを使ったスニペットの最後にexit;を付けて、自分でcontent-type等をつけれて出力すれば問題が解決してしまいました。

スニペット、例えば[[PHPExcel]]で帰ってきたデータをパースしない方法とかはあるのでしょうか?
自前でcontent-typeとexitを付けるのは、いまいちエレガントに思えず、パースしないオプションがあるとちょっと気持ちいいかなと言う気がしました。
現状で僕は特に困りはしないので、どちらでもいいのですが。

ともかく、解決してしまいました。
どうもお騒がせしてすみませんでした。
ありがとうございました。

“質問全般・改善要望” へ戻る