Drupal で色々やってたらエラーが表示されるようになった。 どんなエラーかというと、 Got a packet bigger than 'max_allowed_packet' bytes というやつ。
Session データを書き込もうとしていたみたいなんだけど、MySQL があまり長い SQLを受け付けない設定になっていたみたいではじかれてた。
Drupal で色々やってたらエラーが表示されるようになった。 どんなエラーかというと、 Got a packet bigger than 'max_allowed_packet' bytes というやつ。
Session データを書き込もうとしていたみたいなんだけど、MySQL があまり長い SQLを受け付けない設定になっていたみたいではじかれてた。
PHPでのアプリの開発って、このところずっとフレームワークを使ってたので忘れてしまってた。XOOPSも、Drupalも管理画面で変更できるし。Mojavi も cakephp も設定ファイルで変更できる。
しっかり本番環境で、Warning Illegal offset type in xxxx などとエラーメッセージが表示されてしまっていた。
関係者の皆様申し訳ございません。確認不足でした。
本番環境では PHPの設定(php.ini等)で、display_errors を Off にしたほうがよい。こうすることで、エラーメッセージを画面に表示しなくなる。画面にエラーメッセージが表示されると、エラーメッセージからセキュリティホールを見つけられる危険があるから。ついでに、画面に表示せずにログファイルに出力するには、log_errors を Onにしておく。これは、対で覚えておいた方がよい。
今回の場合は、たまたま問題の起こりそうに無いメッセージだったが、お客様からご指摘頂くような失態。
先ほど EC-CUBEなサイトの夜間 VACUUM 設定が完了したのでメモ。
まずは、以下の感じで crontab に vacuumdb コマンドの実行を指定。この設定だと 4時0分にコマンドが起動される。
0 4 * * * /usr/bin/vacuumdb --analyze -U databaseuser databasenamecrontab(1) コマンドは忘れた事無いけど、一応老後の為に書いておく。以下のようにする事で、username さんの権限で起動するコマンドが指定出来る(例えば、nologin なユーザの設定をしたいときに使う)。
crontab -u username -eついでに中身だけ見るときは
crontab -u username -l某 EC-CUBEのサイトを新しいサーバにお引越し。そのサーバは suExec の PHP版みたいなモジュール suPHP を使っている。
suPHPといえば、例えば、スクリプトファイルの所有者、所有グループが実行ユーザと異なっていたらエラーになるとか、まあとにかく安全に動作するようにちゃんと動いてくれる。別に初めて使うわけじゃないんで、その事はわかっていたつもりだったんだけど……。
EC-CUBEは、日本の企業が作ったソフトウェアなので、モバイル版だとちゃんと日本の携帯電話にあった HTMLを出力してくれる。古い機種のことも考えていて、Shift_JISでの出力に対応している。
ログイン画面で「システムエラー」になったとき、エラーログを見ればすぐにわかった。データベースのエンコードがおかしいってメッセージが出ているが、データベースはちゃんと utf8で作られている。
そうなると、mb_string 関連の設定がおかしいのだろう。たしかに .htaccess ファイルが存在し、mbstring 関連の設定もされている。しかし、このファイルを色々といじってみても、phpinfo()で調べると、値がやっぱりおかしい。
EC-CUBEコミュニティのフォーラムにも似たようなことが書いてあったし、suPHPのFAQにもちゃんと書いてある(Can I use the php_value directives in .htaccess files with suPHP? のところ)。どうやら、suPHPだと .htaccess ファイルの php_value を読み込まない様子。
懐かしい人と電話。弟がお世話になっているそうで、よろしくお願いいたします。
さて、今週は久しぶりに Solaris で色々やってる。
Apache を使えるようにしたり、近くのパソコン工房で、グラフィックボードを買ったり。
で、PHP5.2 の導入もやってみた。
自分でコンパイルしてインストールした CVS版の emacs を -nw で起動したら以下のようなメッセージが。
emacs: Cannot open termcap database file当方の環境 Debian etch。こんなときは、Emacsのコンパイル(徒然草-雑記帳)に書いてある準備をしてからコンパイルをしなおす。
必要な開発環境をインストールする。
# apt-get install libncurses5-dev
(このパッケージをインストールしないとコンパイルが完了しても「Cannot open termcap database file」となってemacsが起動しませんでした)。
$ svn propedit svn:ignore .*.aux
*.toc
*.lot
*.lof
*.log
*.dvi開発するシステムの文字コードが utf-8 なのに、納品するマニュアルが LaTeX だったりして文字コードは euc-jp で書く必要がある場合の話。(いまどきは utf-8 で使える platex-utf8 があるらしいので、そちらを使っても解決するのだが、せっかく覚えたやり方なので)
最近は(subversion の日本語化が進んだおかげで)、trac + subversion 環境を使う事が多くなった。しかし、trac の「リポジトリブラウザ」で LaTeX のソースだけが文字化けしていたので、その解決方法を調べてみた。
たまには Windows でもお仕事。
で、Windows 用の Subversion クライアントを探してみる。 TortoiseSVN というのが見つかったのでインストールしてみた。(TortoiseSVN のサイトは Drupal で構築されている模様 :-D )
TortoiseSVN は Windows の エクスプローラ と連動するので非常に使いやすい。
以下にインストールの方法と一部の機能の使い方を紹介する。他の機能の使い方、Subversion の素晴らしさについては書いていないのでご注意頂きたい。