サーバエラー(500)が出ます

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
RiU
アクティブユーザー
記事: 21
登録日時: 2007年2月23日(金) 15:48

サーバエラー(500)が出ます

投稿記事 by RiU » 2007年3月14日(水) 15:30

お世話になります。

textareaに、一定量以上の文字数を入れて保存すると内部サーバエラー(500エラー)になります。また、保存できた場合も表示の際に500内部サーバエラーとなります。

内部サーバエラーなので、ここに質問するのは場違いかもしれませんが、何かアドバイスでもあればよろしくお願いします。

項目は
 text 2つ
 menu 2つ
 textarea 1つ
で、textareaに入力した文字数は約25,000文字です。

元来、これだけの文字数の登録自体が使い方として間違っているのか、単にサーバが弱いだけなのか、判断に迷っております。
(マニュアルに文字の数が無制限と記載があったので、処理負荷まで考えが及びませんでした)

何かご助言いただけると幸いです。
よろしくお願いいたします。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: サーバエラー(500)が出ます

投稿記事 by webmaster » 2007年3月14日(水) 18:26

 RiUさん、ご質問ありがとうございます。

 弊社でも早速25000文字のテストを行ってみました。
 "aaaaaaa....."という文字が50000文字連続する文字列を作り、これを
コンテンツ管理画面より投稿してみたところ、問題なく投稿と表示が行われ
ました。

 "aaaaaaa....."という文字列は、テキストエディタ等でまずaが100個連続で
入力し、それをコピー&ペーストを9回行うと1000個ができます。それを再度
コピーしてペーストを9回行うと10000個ができます。それを再度4回ペースト
すれば50000個ができあがります。

 可能性としていくつか考えられるかと思います。

(1)php.iniの post_max_size の設定上限を超えた。
(2)php.iniの max_execution_time、又は max_input_time の処理時間上限を超えた。
(3)ご利用のサーバにインストールされているXSLTエンジンの制限。
(4)入力された25000文字の中に、エラーの原因となる文字が含まれていた。

 (1)(2)の場合、サーバが設定変更を許可していれば、サーバの管理画面や
.htaccessの指定で変更することができます。
 (3)の場合、別のXSLTエンジンに切り替えることで対処可能な場合が
あるかもしれません。この方法はリファレンスマニュアル7章をご覧下さい。
 (4)の場合、まず"aaaaaaa...."の文字列でお試し下さい。aaaの場合にエラーが出ないのなら、これが原因ですので、その25000文字をテキストファイルに保存してメールでお送り下さい。

 以上、お手数ですがお試し頂ければ幸いです。

RiU
アクティブユーザー
記事: 21
登録日時: 2007年2月23日(金) 15:48

Re: サーバエラー(500)が出ます

投稿記事 by RiU » 2007年3月15日(木) 09:42

webmaster様
いつも大変お世話になっております。

お教えいただいたテストを行ってみました。
1バイト文字(aaaaaaa.....)だと問題なく登録されました。
ただ、2バイト文字(あああああ.....)でテストしたところ、サーバーエラーと
なってしまいました。
(1)php.iniの post_max_size の設定上限を超えた。
(2)php.iniの max_execution_time、又は max_input_time の処理時間上限を超えた。

(1)に関しては100Mと設定されておりました。(妥当なのでしょうか・・・??)
(2)に関しては挙動的に保存ボタン押下後、すぐにエラーとなるので、timeOutではないような気がします。
・・・いづれにしても、iniファイルの変更はNGとの事でした・・・

(3)はこれから試してみます。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: サーバエラー(500)が出ます

投稿記事 by webmaster » 2007年3月16日(金) 15:30

 RiUさん、何度もすいません。

 こちらでも2バイト文字(ああああ...)でエラーが発生することを確認致しました。
 エラーというか、PHPの処理が中段されて、エラーではなく何も返って
こない、という症状です。

 この状態でもエントリデータ上は正しく入力内容が保存されているようなのですが、
それを表示する際に何らかの障害が起きているようです。

 また、1バイト文字でも、43600文字程度を入力すると同じ障害が発生しました。
 特に1バイト/2バイトに関係なく、文字数によって発生するようです。
 弊社環境だけかもしれませんが、43599文字だと発生しませんでした。

 弊社サーバのpost_max_sizeやmemory_limitについても確認してみたのですが、
40kバイト程度のデータの処理に影響するような設定にはなっておらず、関係なさそう
です。

 試しに、項目を1つ増やし、そこにも同じ値を設定してみたところ、今度は
43600文字まで設定可能で、43601文字目で障害発生しました。
 ちなみに以前の項目には43599文字のデータが設定されたままになっており、
これはもう、post_max_sizeやmemory_limitの問題ではなく、XML上の1項目
に対する上限値と考えたほうが良さそうです。

 前回の項目と今回の項目の違いは、要素名(項目名)の長さが最初のものは
description2、次のものはdescription、となっていたぐらいです。

 推測ですが、XSLTエンジン、又はDOMエンジンの仕様で、一つの要素中に
存在するデータの大きさと、その要素名を足した長さについて、何らかの制限が
かかっているのかもしれません(おそらくそれは仕様というよりbugだと思います
が・・・)。

 この件について英語文献も含めて調べてみたのですが、該当するものを見つけられ
ませんでした。

 現状では、text/textarea項目の maxlength として40000 程度を指定して
頂くことでしか、解決できないかと思います。エラーが出ない上限値については
環境によって異なるかもしれませんので、一度ご確認下さい。

 ご不便をおかけしますが、よろしくお願い致します。
 この件について追加情報などありましたら、ご教授頂ければ幸いです。

RiU
アクティブユーザー
記事: 21
登録日時: 2007年2月23日(金) 15:48

Re: サーバエラー(500)が出ます

投稿記事 by RiU » 2007年3月16日(金) 15:34

RiU さんが書きました:(3)はこれから試してみます。
xslt-libno="20"
xslt-libno="21"

この2つでは登録500エラーは出ませんでしたが、
「Warning: 」エラーが多発し、管理画面のレイアウトも崩れてしまう状態でした。
・・・いづれにしても、iniファイルの変更はNGとの事でした・・・
よくよく確認してみると、変更可能との事でしたので、設定を変えて見たのですが、
状況変わらず・・

ちなみに
(4)入力された25000文字の中に、エラーの原因となる文字が含まれていた。
"aaaaaaa....."の文字数を50,000文字入れると、同様に500エラーとなるので、
おそらく
>(3)ご利用のサーバにインストールされているXSLTエンジンの制限。
かつ、相性・・・ということで納得せざるを得ないかと・・・

RiU
アクティブユーザー
記事: 21
登録日時: 2007年2月23日(金) 15:48

Re: サーバエラー(500)が出ます

投稿記事 by RiU » 2007年3月16日(金) 15:43

webmaster様
お世話になります。

入れ違いで投稿頂いたみたいでもうしわけありません。
私ももう少し調べて見ようと思います。

とりあえずの回避方法として、textareaを「list」の繰り返し
として用意し、入力する文章の段落毎に分けてもらい、
表示の際に、CSSで結合されているように見せる

という形を取ろうと考えています。

過去履歴で出ていない障害なので、これだけの文字数を
textareaに入れる運用自体があまり現実的でないのかも
しれないですね。

ありがとうございました。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: サーバエラー(500)が出ます

投稿記事 by webmaster » 2007年3月16日(金) 15:48

 RiUさん、コメントが入れ違いになってしまったようですいません。

 xslt-libnoについては、お使いのサーバにはSablotron以外のXSLTエンジンが
入っていないということになるかと思います。

 また、弊社でxslt-libnoを20、21にして試してみたところ、10万文字でも
問題なく入力されました。これはどうやら、Sablotron XSLTエンジンの不具合
ということになりそうです。

 いろいろとお手数をおかけして申し訳ありませんでした。

 対策としては、前回のコメントと同じく

(1) textarea項目のmaxlengthを40000前後で設定して頂く。

 または

(2) xslt-libnoを20または21にして頂く。

 ということになるかと思います。
 この件についてはもう少し調査し、マニュアルへの記載、又はCMS Designer側
での強制的な制限などの対策をとらせて頂きたいと思います。

RiU
アクティブユーザー
記事: 21
登録日時: 2007年2月23日(金) 15:48

Re: サーバエラー(500)が出ます

投稿記事 by RiU » 2007年3月16日(金) 15:56

webmaster様
早速のご連絡ありがとうございます。

 xslt-libnoについては、お使いのサーバにはSablotron以外のXSLTエンジンが入っていないということになるかと思います。

なるほどです。サーバの問題・・ということですね。

こちらこそ、いろいろと調べていただきありがとうございました。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: サーバエラー(500)が出ます

投稿記事 by webmaster » 2007年3月16日(金) 16:00

 RiUさん、またもや入れ違いですいません。

 面倒な運用になることは承知しておりますが、list項目による回避方法は
今回の状況ではおそらくベターかと思います。

 弊社でも過去に大きなデータ登録はテストしたのですが、50000バイトの
文字列の登録は試験しておりませんでした。
 試験漏れでご迷惑をおかけしました。

 Sablotron開発サイドに今回のエラーについて報告しておこうと思います。

RiU
アクティブユーザー
記事: 21
登録日時: 2007年2月23日(金) 15:48

Re: サーバエラー(500)が出ます

投稿記事 by RiU » 2007年3月19日(月) 09:23

webmaster様

いろいろとありがとうございました。
 xslt-libnoについては、お使いのサーバにはSablotron以外のXSLTエンジンが入っていないということになるかと思います。

サーバ運営会社に確認したところ、やはりdomxml関数は使えないとの回答でした。

やはり、listで回避する形で進めます。
ありがとうございました。

返信