ページ 11

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

Posted: 2017年2月25日(土) 13:51
by tambara
はじめまして、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

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

Posted: 2017年3月20日(月) 17:49
by soushi
soushiです。

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

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

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

また不具合として次以降のバージョンで修正します。

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

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

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

Posted: 2017年3月24日(金) 19:43
by tambara
返信ありがとうございます!

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

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

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