2008/11/7 金曜日

PHP 文字エンコード

Filed under: スクラップ — admin @ 13:07:56

PHP による日本語の文字コード判定スクリプト

文字列の文字コードを判定する場合、PHP には mb_detect_encoding() 関数が用意されていますが、文字列が短い場合、判定に失敗することが多くなりますので、もう少し判定率の良いスクリプトを作成してみました。

mbstring(マルチバイト文字列関数) と mbregex(マルチバイト正規表現関数) が必要です。文字コード範囲が重なるような場合は、SJIS-win を優先させています。

各文字コードの範囲については、Perl メモ:文字の正規表現を参考にしました。

/**
 * 日本語文字列の文字コード判定(ASCII/JIS/eucJP-win/SJIS-win/UTF-8 のみ)
 */
function detect_encoding_ja( $str )
{
    $enc = @mb_detect_encoding( $str, 'ASCII,JIS,eucJP-win,SJIS-win,UTF-8' );

    switch ( $enc ) {
    case FALSE   :
    case 'ASCII' :
    case 'JIS'   :
    case 'UTF-8' : break;
    case 'eucJP-win' :
        // ここで eucJP-win を検出した場合、eucJP-win として判定
        if ( @mb_detect_encoding( $str, 'SJIS-win,UTF-8,eucJP-win' ) === 'eucJP-win' ) {
            break;
        }
        $_hint = "xbfxfd" . $str; // "xbfxfd" : EUC-JP "雀"

        // EUC-JP -> UTF-8 変換時にマッピングが変更される文字を削除( ≒ ≡ ∫ など)
        mb_regex_encoding( 'EUC-JP' );
        $_hint = mb_ereg_replace( "xad(?:xe2|xf5|xf6|xf7|xfa|xfb|xfc|xf0|xf1|xf2)", '', $_hint );

        $_tmp  = mb_convert_encoding( $_hint, 'UTF-8', 'eucJP-win' );
        $_tmp2 = mb_convert_encoding( $_tmp,  'eucJP-win', 'UTF-8' );
        if ( $_tmp2 === $_hint ) {

            // 例外処理( EUC-JP 以外と認識する範囲 )
            if (
                // SJIS と重なる範囲(2バイト|3バイト|iモード絵文字|1バイト文字)
                ! preg_match( '/^(?:'
                    . '[x8ExE0-xE9][x80-xFC]|xEA[x80-xA4]|'
                    . 'x8F[xB0-xEF][xE0-xEF][x40-x7F]|'
                    . 'xF8[x9F-xFC]|xF9[x40-x49x50-x52x55-x57x5B-x5Ex72-x7Ex80-xB0xB1-xFC]|'
                    . '[x00-x7E]'
                    . ')+$/', $str ) && 

                // UTF-8 と重なる範囲(全角英数字|漢字|1バイト文字)
                ! preg_match( '/^(?:'
                    . 'xEFxBC[xA1-xBA]|[x00-x7E]|'
                    . '[xE4-xE9][x8E-x8FxA1-xBF][x8FxA0-xEF]|'
                    . '[x00-x7E]'
                    . ')+$/', $str )
            ) {
                // 条件式の範囲に入らなかった場合は、eucJP-win として検出
                break;
            }
            // 例外処理2(一部の頻度の多そうな熟語は eucJP-win として判定)
            // (珈琲|琥珀|瑪瑙|癇癪|碼碯|耄碌|膀胱|蒟蒻|薔薇|蜻蛉)
            if ( mb_ereg( '^(?:'
                . 'xE0xDDxE0xEA|xE0xE8xE0xE1|xE0xF5xE0xEF|xE1xF2xE1xFB|'
                . 'xE2xFBxE2xF5|xE6xCExE2xF1|xE7xAFxE6xF9|xE8xE7xE8xEA|'
                . 'xE9xACxE9xAF|xE9xF1xE9xD9|[x00-x7E]'
                . ')+$', $str )
            ) {
                break;
            }
        }

    default :
        // ここで SJIS-win と判断された場合は、文字コードは SJIS-win として判定
        $enc = @mb_detect_encoding( $str, 'UTF-8,SJIS-win' );
        if ( $enc === 'SJIS-win' ) {
            break;
        }
        // デフォルトとして SJIS-win を設定
        $enc   = 'SJIS-win';

        $_hint = "xe9x9bx80" . $str; // "xe9x9bx80" : UTF-8 "雀"

        // 変換時にマッピングが変更される文字を調整
        mb_regex_encoding( 'UTF-8' );
        $_hint = mb_ereg_replace( "xe3x80x9c", "xefxbdx9e", $_hint );
        $_hint = mb_ereg_replace( "xe2x88x92", "xe3x83xbc", $_hint );
        $_hint = mb_ereg_replace( "xe2x80x96", "xe2x88xa5", $_hint );

        $_tmp  = mb_convert_encoding( $_hint, 'SJIS-win', 'UTF-8' );
        $_tmp2 = mb_convert_encoding( $_tmp,  'UTF-8', 'SJIS-win' );

        if ( $_tmp2 === $_hint ) {
            $enc = 'UTF-8';
        }
        // UTF-8 と SJIS 2文字が重なる範囲への対処(SJIS を優先)
        if ( preg_match( '/^(?:[xE4-xE9][x80-xBF][x80-x9F][x00-x7F])+/', $str ) ) {
            $enc = 'SJIS-win';
        }
    }
    return $enc;
}

文字コード判定の考え方としては、以下のようになっています。

  1. EUC-JP -> UTF-8 への変換してから、UTF-8 -> EUC-JP を行った場合、逆変換に成功することは少ない
  2. まず、文字コードがあいまいな文字列を EUC-JP として検出させ、1. より、EUC-JP で無いことを確認した場合は SJIS か UTF-8 を判定
  3. EUC-JP での逆変換に成功した場合、SJIS と文字コードが重なる部分は SJIS を優先
  4. EUC-JP でない場合、UTF-8 と仮定して逆変換に成功した場合のみ UTF-8 として検出
  5. 例外は個別対応

この文字コード判定スクリプトには以下の問題があります。

  • 少し重くなる
  • PHP の mbstring に依存している(汎用性がない)
  • EUC-JP のいわゆる半角カタカナ(\x8e[\xa1-\xfc])や、EUC-JP の一部の文字([\xe0-\xea][\xa1-\xfc])のみで 構成される文字列は SJIS-win として判定される
  • UTF-8 の一部の記号(数学記号とギリシア文字の一部)が含まれる文字列が eucJP-win として判定される

使用方法としては、以下のように文字コードが分からない日本語文字列を UTF-8 に変換するような関数を作成する場合に便利です。

function convert_utf8( $str )
{
    $encoding = detect_encoding_ja( $str );
    return mb_convert_encoding( $str, 'UTF-8', $encoding );
}

2008/11/3 月曜日

次世代ネットワーク 1Gbps の世界

Filed under: テクノロジー — admin @ 17:04:44

次世代のインターネットでは携帯が現状のネットワークの速度(100Mbps)を使うのが主流となる。そこで現状の数百倍の通信料になるであろう予想できるが、現状としてはP2Pの帯域で苦しんでいる時点ではどうなのよ…とか思うわけでー。じゃあ、解決方法は何かないの?ってことで、次世代ネットワーク技術の研究文献についていろいろ探してみてたら、参考になりそうな文献を発見。

先進ネットワーク研究成果発表(大学院情報科学研究科)
http://www.anarg.jp/achievements/web2007/research_2net.html

おもしろそうな技術がいろいろ・・・ 実現はいつになるかな?

cron設定

Filed under: スクラップ, 未分類 — admin @ 15:43:09
5-1. ジョブスケジューラー

 

 

  • cronを用いてバックアップのスケジューリング
  • cronデーモンの起動/停止
    # /sbin/service crond start
    # /sbin/service crond stop


ジョブスケジューラーによるバックアップの採取 Linuxのスケジューラーは、指定された日付や時刻に自動的にジョブを実行するような設定が可能です。システム管理者はタスクの自動化によって、定期的にバックアップを実行するなどが可能になります。
ジョブを特定の日時で繰り返し実行させるcron について解説します。

cronデーモンの起動と停止 cronを使用するには、cronの実体であるデーモンcrond を起動する必要があります。
crond の起動/停止スクリプトは/etc/rc.d/init.d/crond となっています。起動スクリプトのオプションでは、起動(start)、停止(stop)、再起動(restart)、現在の状況を確認(status)を指定できます。

crondの再起動

# /sbin/service crond restart


5-2. cronの設定ファイル

 

cronの設定ファイル【1】

  • /var/spool/cron/ユーザー名
  • /etc/crontab
  • /etc/cron.d
  • /etc/cron.hourly/
  • /etc/cron.daily/
  • /etc/cron.weekly/
  • /etc/cron.monthly/

crondは毎分cron設定ファイルに変更がないかをチェックし、変更があった場合には変更を反映させる

 

cronの設定ファイル【2】   /var/spool/cron/ユーザー名

  • ユーザー毎に設定できるファイル
  • ファイルを作成・削除・閲覧するにはcrontabコマンド使用
    crontab [-u user] {-e|-l|-r}
    • -u user  userで指定したユーザーのcrontabファイルを操作の対象とする。このオプションはrootユーザーのみ使用
    • -e  crontabを対話的に編集する。通常viエディタが起動して、設定ファイルを編集
    • -l  crontabファイルの内容を表示
    • -r  crontabファイルを削除


/var/spool/cron/ユーザー名

# /usr/bin/crontab -u root -e

例では/var/spool/cron/rootファイルが作成され、viで編集することができます。
このファイルに、いつ、もしくはどれくらいの間隔で指定したコマンドを実施するか記述します。

crontabファイルの書式

分 時 日 月 曜日 コマンド
  • 分 — 0~59
  • 時 — 0~23
  • 日— 1~31
  • 月— 1~12
  • 曜日— 0(日曜)~6(土曜)

複数の値を指定する場合は「,」、間隔を指定する場合は「/」、範囲を指定する場合は「-」を使います。

毎日23:30にバックアップを実行

30 23 * * * /usr/bin/find /home | /bin/afio -ovZ -L
/tmp/full.log /dev/nst0

10分ごとにバックアップを実行

*/10 * * * * /usr/bin/find /home | /bin/afio -ovZ -L
/tmp/full.log /dev/nst0

9時、11時、13時、15時、17時のそれぞれ0分、15分、30分、45分にバックアップを実行

0,15,30,45 9-17/2 * * * /usr/bin/find /home | /bin/afio -ovZ -L
/tmp/full.log  /dev/nst0


 

cronの設定ファイル【3】   /etc/crontab他

  • /システム用に設定できるファイル(rootユーザーのみ)
  • /etc/crontab
    • ジョブスケジュールのメイン設定ファイル
      このファイルには、「cron.monthly」、「cron.weekly」、「cron.daily」、「cron.hourly」配下のファイルを指定時に実行する指示が記述


/etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin       ←あらかじめ設定されている部分
MAILTO=root                   (ここから)
HOME=/                     
# run-parts                   
01 * * * * root run-parts /etc/cron.hourly   
02 4 * * * root run-parts /etc/cron.daily    
22 4 * * 0 root run-parts /etc/cron.weekly   
42 4 1 * * root run-parts /etc/cron.monthly  ←(ここまで)
        ↓ユーザー名
* */12 * * * root etc/cron.hourly/backup    ←新たに追加

構文はcrontabコマンドの構文と似ていて、「曜日」と「コマンド」の間に「ユーザー」が入るだけです。
また、環境変数MAILTOで指示されたメールアドレスに対して、実行結果をメールで送ります。MAILTOがない場合は、ファイルの所有者にメールが送 られます。メールを受け取りたくない場合には、MAILTO=‘’ または MAILTO=“” と指定することで受け取らないように設定できます。

/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly これらのディレクトリ配下のファイルは、/etc/crontabファイルによって呼び出されて、指定された時間にジョブを実行します。ディレクトリ配下のファイルはいずれもシェルスクリプトである必要があります。
(例)/etc/crontabファイルで新たに追加した
「 * */12 * * * root etc/cron.hourly/backup 」部分の「/etc/cron.hourly/backup」ファイルで設定した内容

/usr/bin/find /home | /bin/afio -ovZ -L /tmp/full.log
/dev/nst0

この場合、/etc/crontabファイルで呼び出された「/etc/cron.hourly/backup」ファイル内のafioコマンドを12時間ごとに実施することになります。

/etc/cron.d cronタスクを毎時間、毎日、毎週、毎月以外の予定で実行する必要がある場合は、そのスクリプトをこのディレクトリに追加できます。このディレクトリ内のファイルの構文はすべて/etc/crontabと同じです。

2008/11/1 土曜日

httpd.confファイルの設定

Filed under: スクラップ — admin @ 15:07:39

web サーバーの設定 (apache)

Vine Linux 4.0

Jan. 27 2007

Vine Linux 4.0 から Webサーバーが apache2 になった。今までの apache1.x の設定ファイルはそのままでは使用できない。また、設定ファイルの httpd.conf やドキュメントルートなどの場所も変更になっているので注意が必要。もっとも httpd.conf 内で各種ファイルの場所を apache1.x と同じくするという方法もある。しかし、今後のことも考えて apache2 の標準に沿って設定しておくことにする。
設定ファイル /etc/apache2/conf/httpd.conf の次の部分を変更しておく。

# vi /etc/apache2/conf/httpd.conf

ServerTokens OS

クライアントに送り返す Server 応答ヘッダ内に、サーバの一般的な OS 種別や、 コンパイルされて組み込まれているモジュールの情報を 含めるかどうかを指定する。
クライアントに返すサーバー情報。Apache のHTTPレスポンスヘッダ。
あまり詳しい情報を返すと、それを手がかりにサーバーの脆弱性を調べ攻撃を仕掛けられる可能性があるので、これらを表示させないように ServerTokens の指定を変更する。引数は次のとおり。
一番秘匿性の高い ProductOnly を指定する。
Full( or 未指定)     Apache の詳細なバージョン、OS名及びモジュール
OS     Apache のバージョンとOS名
Major     Apache のメジャーバージョン
Minor     Apache のマイナーバージョンまで
Minimal(Min)     Apache の詳細なバージョン
ProductOnly     製品名のみ(Apache)

ServerTokens OS

ServerTokens ProductOnly

ExtendedStatus On

各リクエストに対して拡張ステータス情報を保存する。
Apache には、稼働状況を表示してくれる機能があるので、これを有効にする。
httpd.conf の ExtendedStatus On のコメントアウトを外し、次の行を追加する。

ExtendedStatus On
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 10.99.1
</Location>

全てのアクセスを禁止して、LAN ネットワーク内のみのアクセスを許可する。
daemon の再起動後、ブラウザで http://www.sleepingbird.net/server-status に接続すれば稼働状況が確認できるようになる。
ServerName

サーバが自分自身を示すリクエストスキームとホスト名とポートを設定する。

ServerName www.example.com:80

ServerName www.qcp.jp:80

UseCanonicalName

URLの最後の “/” が省略されたとき、それを補完する。
個人的には URL の最後の “/” は厳密に使用して欲しいが、ほとんどの人はいい加減に使用しているので、救済のため On にしておく。

UseCanonicalName Off

UseCanonicalName On

DocumentRoot

公開する ウエブページ (Documen) の基点 (Root) となるディレクトリ。
WEB で公開するトップディレクトリを指定する。通常はそのままでよいが、バーチャルホストを複数設定するのでホスト名に合わせて管理できるように変更した。

DocumentRoot /var/www/html

DocumentRoot /var/www/qcp

アクセスされたディレクトリに index.html が無いとディレクトリが丸見えになってしまうので、これを防ぐ。 Options から Indexes を削除する。
また、ディレクトリ指定も DocumentRoot と整合させておく。

#<Directory “/var/www/html”>
<Directory /var/www/qcp>
# Options Indexes FollowSymLinks
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

DocumentRoot ディレクトリを作成し、リモートから ftp 転送できるように所有者を変更する。

# mkdir /var/www/qcp
# chown -R 所有者名 /var/www/qcp

DirectoryIndex

クライアントが、ディレクトリ名の最後に「/」 を指定してディレクトリインデックスを要求する場合に探すリソースのリスト。
リストに記載された順にディレクトリ内を探査し、レスポンスを返す。

DirectoryIndex index.html index.html.var

DirectoryIndex index.html index.htm index.shtml index.php index.php4 index.php3 index.cgi

ServerSignature

サーバが生成するドキュメント の最下行に付与するフッタの設定を行なう。
エラーページを表示する際にもバージョンが表示されるので、これも抑止するために ServerSignature を Off にする。

ServerSignature On

ServerSignature Off

サーバーブート時の自動起動の設定を行う。

# chkconfig apache2 on

ネットに接続して、外部からアクセス可能になっているか調べるには、次のサイトを利用する。

* WWWサーバテスト(パソコンおやじ)
* Free webmaster test tools(WebSitePulse.com)
* サーバーメンテナンス支援【無料】

| 覚え書き : Web server | Permalink

SSI/CGI の起動

/etc/httpd/conf/httpd.conf を編集する。このうち、Options ディレクティブの ExecCGI が CGI 起動の許可部分。Include が SSI の許可部分。

# vi /etc/httpd/conf/httpd.conf

以下のコメントをはずす

#<Directory /home/httpd/cgi-bin>
# AllowOverride None
# Options ExecCGI Includes
# Order allow,deny
# Allow from all
#</Directory>

CGIが実行可能な拡張子の設定。コメントをはずし「.pl」も加えておく

# AddHandler: allows you to map certain file extensions to “handlers”,
AddHandler cgi-script .cgi .pl

SSI を起動させるには二つの方法がある。一つは拡張子に実行属性を付与する方法。SSI を起動したいファイルの拡張子を .shtml に変更する必要がある。(デフォルト)

AddType text/html .shtml
AddHandler server-parsed .shtml

もう一つが、全ファイルで起動可能に設定し、実際に起動したいコードが埋め込まれたファイルに実行属性を与える方法。ただし、サーバーのオーバーヘッドが大きくなり負荷が増大するので実用的ではない。

XBitHack on

All     MultiViews以外のすべての指定を有効にする
ExecCGI     CGIの実行を許可する
FollowSymLinks     シンボリックリンクを許可する
SymLinksIfOwnerMatch     ファイルとディレクトリがリンクされている場合、ユーザIDが同一の場合のみシンボリックリンクを許可する
Includes     SSI(Server Side Include)を許可する
IncludesNOEXEC     SSI自体は許可するが「#exe」(コマンド実行)とCGIスクリプトの「#include」は許可しない
Indexes     リクエストされたディレクトリにDirectoryIndex(index.htmlなど)が存在しない場合、ディレクトリ下のファイルを一覧表示する
MultiViews     言語対応機能の許可

| 覚え書き : Web server | Permalink

CGI ディレクトリ

インストール直後、apache 用のホームディレクトリには、 cgi-bin ディレクトリが生成されているが、このディレクトリはデフォルトでエイリアスされており、各ユーザーがアクセス可能になっている。

# cat /etc/httpd/conf/httpd.conf

ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/

| 覚え書き : Web server | Permalink

CGI エラー

CGI が思ったように起動できない場合、次の点を確認する。

1. 各ファイルのパーミッションは正しく設定されているか。
2. perl へのパスは正しいか。

なお、/etc/httpd/logs/err_log を確認し、次のエラーが表示された場合は、上記2の誤りか、またはスクリプトの中に MS-Windows の改行コードが混入している可能性がある。
エラーの意味としては、ファイルまたはディレクトリが見つからないということだが、後者の場合にもこのメッセージが出力され、戸惑うことがある。

[Thu May 15 20:16:02 2003] [error] (2)No such file or directory:
exec of /home/httpd/cgi-bin/********.cgi failed
[Thu May 15 20:16:02 2003] [error] [client ***.***.***.***] Prem
ature end of script headers: /home/httpd/cgi-bin/********.cgi

↑ 実際は2行

次のコマンドによりスクリプトファイルから余計なコードを除去する。元のファイルは拡張子 .old が付加されて保存され、除去後のファイルが生成される。

$ perl -i.old -npe ’s/\r\n/\n/’ ファイル名

| 覚え書き : Web server | Permalink

ユーザーページの公開

各ユーザーにホームページを公開させたい場合は、 httpd.conf から次のコメントをはずす。各ユーザーのホームディレクトリ直下の public_html ディレクトリ下が公開される。

#<Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# <Limit GET POST OPTIONS PROPFIND>
# Order allow,deny
# Allow from all
# </Limit>
# <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
# Order deny,allow
# Deny from all
# </Limit>
#</Directory>

ユーザーディレクトリと public_html のパーミッションを変更する。

$ cd
$ chmod 711 ../ユーザディレクトリ
$ mkdir public_html
$ chmod 755 public_html

| 覚え書き : Web server | Permalink

エラーページのカスタマイズ

リクエストされたページが移動あるいは削除されていた場合、「404 NotFound」と表示されるが、このページをカスタマイズしたい場合は任意のファイルを用意し httpd.conf に次の行を追加する。なお、ファイル名は絶対パスで記述する。また、任意に用意したファイルの中で使用する画像およびファイルのリンク先についても絶対パスで指定する必要がある。他のエラーについても同様に設定できる。403,404,500 あたりを用意しておけば当面大丈夫。502 を用意しておけば夢が見られる!?
なお、Virtual Host についてもそれぞれに定義しておく。

# vi /etc/httpd/conf/httpd.conf

ErrorDocument 404 /404.html

Result     コード     解 説
200     OK     アクセス成功
201     Created     POSTが成功
202     Accepted     アクセス中(処理中)
203     Partial Information     注釈
204     No Response     アクセスしたドキュメントが反応しない
301     Moved     ドキュメントが移動されている
302     Found     ドキュメントは別の場所にある
303     Method     ドキュメントは別の場所にあって,別にアクセスする
304     Not Modified     ドキュメントが更新されていない
400     Bad request     形式が異なっている
401     Unauthorized     認証ができなかった
402     Payment Required     アクセス料が必要
403     Forbidden     アクセス権限がない
404     Not found     ドキュメントが見つからない
500     Internal Error     サーバエラー
501     Not implemented     利用できない機能が要求された
502     Service temporarily overloaded     アクセスが集中している

| 覚え書き : Web server | Permalink

default.ida

アクセスログに次のようなログが残されることがある。これは IIS(Microsoft Internet Information Server)を攻撃する CodeRed と呼ばれる worm の痕跡。apache には感染しないが、サーバーに無いファイルを要求してくるのでレスポンスが悪化するし、ログも汚れる。ルートに同名の 0 byte ファイルを置くことでこれを回避する。

# less /var/log/httpd/error_log

[Mon Jul 28 07:53:36 2003] [error] [client 219.156.211.253]
File does not exist: /home/httpd/html/default.ida

↑ 実際には1行

#less /var/log/httpd/access_log

219.156.211.253 - - [28/Jul/2003:07:53:36 +0900] “GET /default.ida?
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u
7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u5
31b%u53ff%u0078%u0000%u00=a HTTP/1.0″ 404 1647 “-” “-”

↑ 実際には1行

| 覚え書き : Web server | Permalink

favicon.ico

上記と同様に、有るはずのないファイル「favicon.ico」を要求された痕跡が残ることがある。これは、Internet Explorer(IE)5.0から備わった「お気に入り」にサイトを登録すると自動的にオリジナルのアイコンを表示する機能の痕跡。デフォルトのオリジナルアイコンの名前が favicon.ico で、お気に入りに登録する操作を行ったときに、このファイルを要求してくる。通常はそんなファイルを用意していないから、ログにエラーが残る。

# less /var/log/httpd/error_log

[Sun Jul 27 01:59:05 2003] [error] [client 220.254.0.4]
File does not exist: /home/httpd/html/favicon.ico

↑ 実際には1行

#less /var/log/httpd/access_log

220.254.0.4 - - [27/Jul/2003:01:59:05 +0900] “GET /favicon.ico HTTP/1.1″
404 1647 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

↑ 実際には1行

なお、このアイコンファイルの検索は、まず現在のディレクトリ内で favicon.ico を探し、なければルートディレクトリまで一つずつ上位のディレクトリを探していく。
せっかくの機能だから、図柄を考えて ICON をディレクトリにおいておく事にした。なお、ファイルを明示的に指定したい場合は、次のタグを埋め込んでおく。

<LINK REL=”SHORTCUT ICON” href=”sleepingbird.ico”>

| 覚え書き : Web server | Permalink

ログのカスタマイズ

サーバを運営していて、たまにログを覗くと思ったより膨大なデータが記録されている。しかし、良く見るとそのほとんどがアクセスしたページに付随する画像ファイル等のアクセス記録である。設定当初は稼働状況を詳細にチェックするのにログ情報は多いほどありがたいが、安定稼働状態だと逆にうっとうしい。そこで、これらの出力を抑止する。
SetEnvIfを使用することとし、環境変数「rejectlog」にログに出力したくないファイルの拡張子を登録し、CustomLog を変更する。

# reject log files
SetEnvIf Request_URI “\.(gif)|(jpg)|(png)|(js)|(css)$” rejectlog

#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
# CustomLog /var/log/httpd/access_log common
#CustomLog /var/log/httpd/access_log combined
CustomLog /var/log/httpd/access_log combined env=!rejectlog

| 覚え書き : Web server | Permalink

VirtualHost

Nov.09 2003

一台のサーバーで複数の domain を使用し、あたかも独立した複数のサーバーが存在するように見える(VirtualHost)設定を行う。
VirtualHost の設定には、domain ごとに IP address を設定する IP ベースとWebブラウザがWebサーバに対して送るホスト名を基にして応答するホストを決定する NAME ベースとがあるが、非固定IPで運営しているので NAME ベースで設定になる。
NAME ベースのバーチャルホストを使うには、そのホストへの リクエストを受け付けるサーバの IP アドレス (もしかしたらポートも) を指定する必要がある。 これは NameVirtualHost ディレクティブで設定する。通常、NameVirtualHost で * の属性を使ってサーバの全ての IP アドレスを使う。
扱うホストそれぞれに対して <VirtualHost> ブロックを作成する。
既にあるウェブサーバにバーチャルホストを追加する場合、 既存のウェブサーバに対しても <VirtualHost> ブロックを作る必要がある。このバーチャルホストの ServerName と DocumentRoot は、グローバルな ServerName と DocumentRoot と同じものにする。また、このバーチャルホストを設定ファイルの中で先頭に置いて、デフォルトホストとして動作するようにする。
<VirtualHost> コンテナの中に他のディレクティブを書くことで、バーチャルホストの設定を細かく調整することができる。ほとんどのディレクティブはこれらのコンテナに設置することができて、変更点はそのバーチャルホストに対してのみ有効になる。

新たに yatagarasu.jp を取得したので、/home/httpd/yatagarasu をホームディレクトリとする設定を行う。
各ディレクティブの意味は次のとおり。

DocumentRoot
ドキュメントルートを指定する。バーチャルホスト毎に別々に指定できる。
ServerAdmin
管理者のメールアドレスを記入する。
ErrorLog
エラーログのファイル名を指定する。バーチャルホスト毎に違うファイルを指定できる。
TransferLog
アクセスログのファイル名を指定する。バーチャルホスト毎に違うファイルを指定できる。

/etc/httpd/conf/httpd.conf の ### Section 3: Virtual Hosts 以下に次の行を追加して apache を再起動する。

NameVirtualHost *

<VirtualHost *>
ServerName www.sleepingbird.net
DocumentRoot /home/httpd/html
ServerAdmin webmaster@sleepingbird.net
ErrorLog /var/log/httpd/error_log
TransferLog /var/log/httpd/access_log
</VirtualHost>

<VirtualHost *>
ServerName www.yatagarasu.jp
ErrorDocuments 404 /404.html
DocumentRoot /home/httpd/yatagarasu
ServerAdmin webmaster@sleepingbird.net
ErrorLog /var/log/httpd/yatagarasu_error_log
TransferLog /var/log/httpd/yatagarasu_access_log
</VirtualHost>

# /etc/init.d/httpd restart

なお、yatagarasu.jp の DNS 設定は次のようにした。

CNAME www www.sleepingbird.net. ← 最後はピリオド

www.yatagarasu.jp へのリクエストは www.sleepingbird.net に割り当てられた IP アドレスが返される。

Dec.04 2003
アクセス解析の AWStats でアクセスのロギング漏れが見つかった。確認してみると Virtual Host の設定をした時点からのアクセスが反映されていない。生ログを覗くと記録項目が少ない。
原因は、<VirtualHost> コンテナの中のログファイルディレクティブ設定では記録項目がデフオルトになってしまうため。従って、このコンテナ中で改めて combined 指定を設定しなければならない。改訂版の VirtualHost コンテナは次のとおり。

NameVirtualHost *

<VirtualHost *>
ServerName www.sleepingbird.net
DocumentRoot /home/httpd/html
ServerAdmin webmaster@sleepingbird.net
ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd/access_log combined
TransferLog /var/log/httpd/access_log
</VirtualHost>

<VirtualHost *>
ServerName www.yatagarasu.jp
DocumentRoot /home/httpd/yatagarasu
ServerAdmin webmaster@sleepingbird.net
ErrorLog /var/log/httpd/yatagarasu_error_log
CustomLog /var/log/httpd/access_log combined
TransferLog /var/log/httpd/yatagarasu_access_log
</VirtualHost>

変更後、httpd の再起動を行う。

Jul.13 2004
VirtualHost のディレクトリでの cgi 等の設定は、/etc/httpd/conf/httpd.conf の ### Section 2: に以下のように行を追加して apache を再起動する。
(この例では、DocumentRoot 以下の全てのディレクトリで cgi 注意)

<Directory /home/httpd/html>




</Directory>

# virtual host “yatagarasu”
<Directory /home/httpd/yatagarasu>
Options Includes FollowSymLinks MultiViews ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>

| 覚え書き : Web server | Permalink

Server-status

Dec.31 2003

Apache には、稼働状況を表示してくれる機能があるので、これを有効にする。
/etc/httpd/conf/httpd.conf の ExtendedStatus On のコメントアウトを外し、次の行を追加する。

<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 10.99.1
</Location>

全てのアクセスを禁止して、LAN ネットワーク内のみのアクセスを許可する。
daemon の再起動を行ったら、ブラウザで 自分のサーバへアクセスする。

2008/10/31 金曜日

リンクアグリケーション LANケーブルを束ねる

Filed under: 開発メモ — admin @ 0:18:01

複数のLANを束ね、100Mbps×4本で400Mbpsにする方法。NICの負荷を抑えることができるほか、障害等に強くなる。Windowsは苦しいと思うが、Linuxではbondなどを利用することで出来るみたいだ。

・リンクアグリケーションについて

http://oshiete.nikkeibp.co.jp/qa2169410.html

・NICの負荷分散と冗長化

http://www.stackasterisk.jp/tech/systemConstruction/teaming01_01.jsp

2008/10/27 月曜日

アメリカと日本のゲーム文化の違い

Filed under: 未分類 — admin @ 15:46:15

ゲーム一般:ゲーム全般:アメリカと日本のゲーム文化の違い 全体を要約しました

余りにも要約していない部分が長かったので全部要約してまとめました。
翻訳・要約担当者からのまえがき

原典はこちらです:
Clash of the cultures
The differences between Western and Japanese game design philosophies.
[1up.com]

注意1:翻訳したものをさらに要約しているため、文の流れ等が無く、論理的に乱暴であったり無礼に見える箇所もあるかもしれません。それらは私の能力不足によるものです。そう感じる方がいらっしゃいましたら素直に謝ります、ごめんなさい。また、興味のある方は原文を全部読んでみてください。要約では削らざるをえなかった例や対比が確認できます。

注意2:CAPCOM の方のコメントは英語本文中の内容を LYE が独自に翻訳したものであり、インタビューの内容をそのまま文書化したものではありません。またインタビューのソースも記されていませんのでその点もご了承ください。

注意3:基本的に欧米のゲーマー向けに書かれた内容であり、内容にはこのテーマの一般的な傾向、(意識的にせよ無意識にせよ) 「一方の優劣をつけたがる」が見える箇所もありますが、先ずは新しい視点を得るつもりで一通り読み通していただければ幸いです。

+ + + + + + + + + +
目次

1. 序章
2. 自由
3. 自由:カメラ視点
4. 自由:セーブシステム
5. 「サンドボックス」ゲームと「リニア(いわゆる映画的)」RPG
6. 日米のアドベンチャーゲーム
7. 日米の絵柄の好み
8. 視覚的な嗜好に関する歴史的な相違点
9. 日本でアニメ絵が好まれる理由
10. ゲーム音楽の捉え方
11. 一方の地域でしか人気がないゲーム
12. 宗教
13. ゲームの難易度
14. 結論

序章

* ゲーム開発業界の現代の2大勢力は創始者:アメリカと80年代の家庭用ゲーム救世主:日本
* 米国と日本には、外側から来るアイデアを容易に受け入れるという共通の文化がある
* 同時に受け入れた要素にひねりを加えて自国に馴染む形に変形させるという傾向もある
* 一方で両地域のゲーマーが自国のゲームばかりを好む理由は (人殺しFPS 対 ファンタジRPG)?
* 本記事はすべてが検証済みで科学的な理論に基づくわけではないがひとつの興味深い考察にはなると思う

自由

* アメリカ人は個人の自由を非常に重要視し、強い自我を持つ
=> ゲームでも「自由」を愛する
* 欧米のゲームが観客向けに作られているのに対し、
多くの日本製ゲームはプレイヤーをデザイナーの世界へ招待するようなつくりになっているのではないか

自由:カメラ視点

* 日本発ゲーム:カメラ視点固定多い
=> より映画的なアプローチ
* 欧米タイトル:カメラ移動可
=> プレイヤーに周りを見回す自由を与えてゲームプレイを向上させる
* 理由1: 日本のゲーマーは一般に3D酔いを起こしやすい
* 理由2: カメラ視点制限
=> 映画的なスタイル強化
=> 開発者がユーザーエクスペリエンスを詳細にコントロールできる
* 理由3:昔のゲームからの名残? レトロな2Dアクションからの伝統?
* 一般的に日本の開発チームは、ユーザーが開発チームの想定したとおりにゲームをプレイできるようにしたがる(CAPCOM 小林 裕幸氏)
* 日本人は何をするのかが厳密に定義されていることを好むし、ゲームでも目標を示されたほうがゲーム自体に集中できると考える(CAPCOM 稲船敬二氏)
*

自由:セーブシステム

* 欧米製ゲーム:「いつでもセーブ」システム
* 日本製ゲーム:「セーブポイント」システム
* 理由1:カセット時代の名残? 欧米ではゲームの主流がPCであったため早くからどこでもセーブシステムを採用できた

CAPCOM:稲船敬二氏のセーブシステムに関するコメント

「アメリカのデザイナーはセーブシステムのことをゲームプレイの一部と捉えないけど、日本ではセーブシステムはゲームの一部と捉えられている。日本のゲームデザイナーは昔、技術的な限界がゲームにもたらすマイナス要素がゲームプレイのプラス要素として機能するように知恵を絞った。たとえば、初代バイオ・ハザードでは、”ここからセーブ室までの間にゾンビがいるかもしれない” という楽しみがあった。セーブが特定の場所でしかできないことで、ゾンビと遭遇するかもしれないという緊張感を高めていた。もし初代バイオ・ハザードでどこでもセーブできたとしたら、それはもう同じゲームではないと思う。」
「セーブシステムの活用というのは日本のゲームデザイナーがかなり神経を使うところのひとつです。」
「たとえば、デッド・ライジングでどこでもセーブシステムが採用されていたら、日本のゲーマーは萎えてしまう。どこでもセーブできるということがゲームの手ごたえを無くし、ゲームではないとすら思わせるでしょう。自分のステータスを把握し、手持ちの武器を管理し、セーブポイントまでの距離を理解することが デッド・ライジングというゲームの緊張感と面白さのキモだからです。この手法については、理解して楽しんでくれる人もいればそうでない人もいます。」
「サンドボックス」ゲームと「リニア(いわゆる映画的)」RPG

* 通常「サンドボックス」というゲーム用語は グランド・セフト・オートやエルダースクロールズ:オブリビオンなどの「どこにでも行けて、何でもできる」ゲームを指す
* ファイナル・ファンタジーやドラゴン・クエストなどの日本の人気RPGでは、 プレイヤーは一直線のストーリーラインに乗せられ、強いストーリー性が強調される
* サンドボックス的ゲームにももちろん追いかけるべきストーリーラインや具体的なゴールも設定されているが、いずれもまったく二次的な要素として存在している
=> 真に重要な部分は冒険までの道中にあり、すべてはプレイヤー自身が決定する
=> ゲームにどんどん自由を求める欧米

CAPCOM:稲船敬二氏の日本で好まれるゲームの傾向に関するコメント

「文化的な点で、日本の文化には稲作農業と島国根性 (”its status as an island nation”をちょっと強引に訳しました) しっかりと根付いている。」
「日本人は計画を立てることができて、ガイドがあって、集中するポイントがあることを望む。単純に言い換えると、日本人は知らないもの、どう変化/進展するか分からないものに接すると落ち着かないんです。これは RPG によく表れていますね。今は自分の攻撃ターン、次は敵の攻撃ターン。戦闘中に呪文を選べば、予想通りの効果が表れる。明確に定義されたゴールに向かってゲームを進める。日本人はこういったタイプの「明確なゴール」が設定されたゲームを好むし、その嗜好性はゲームデザインにずっと影響を与えてきた。日本のゲーマーは「サンドボックス」にガイドなしで放り込まれるタイプのゲームは楽しめないんです。 どこに行ってもいいよ、と言われてもどこにも行かないという選択をする日本のプレイヤーは結構多いでしょうね。」
「一方で欧米人は、知らないものと出会うとワクワクするみたいですね。例えば、狩猟クラブで鹿狩りに行って熊に遭遇したら、日本人なら驚いて怖がると思いますが、アメリカ人は多分熊を撃ち殺して、鹿の代わりに熊ゲットしたぜ!って興奮すると思うんです。 僕はこの、”知らないものは知っているものよりも良い”というアイデアが重要な相違点なのだと感じます。」
上記コメントに続く CAPCOM 小林氏のコメント

「このテーマは、先ほどの”日本の開発者は想定したとおりにゲームが進むようにしたがる” と部分的に重なりますね。このケースでは直線的なストーリー運びは、ちょうど本を読むのと同じように、終始一貫してプレイヤーを物語の流れに巻き込むのに役立ちます。海外の多くのゲーマーは自分だけの冒険を作り上げることを好み、制限のないスタイルを好みます。これはバイオハザード4がヒットした理由のひとつではないかと思います。シリーズ史上最も自由でしたから。」
日米のアドベンチャーゲーム

* 昔、アドベンチャーは両地域で非常に人気のあるジャンルだった
* 米国のアドベンチャー ゲーム ジャンルは実質的に死んでおり、いくつかのヨーロッパ製ゲームでなんとか生き延びている状態
* 日本ではアドベンチャー ゲームはまだ 活発に”生きて” いる
* 初期の段階において、日本と西洋のゲームスタイルはストーリーテリングと謎解きに焦点を絞っていた(スタート地点での下地は一緒だった)
* このジャンルでも初期の段階で西洋にはサンドボックス的、日本はベルトコンベア的な傾向があった
* 日本のアドベンチャーの多くはライセンス提供のアニメ ゲームか恋愛シミュレーションのエロ ゲーム
* 例外的に「おさわり探偵」や「逆転裁判」などの優れたゲームがある (「逆転裁判」については欧米の批評家の間ではその一本道のストーリー展開に否定的な意見もあったが、その脚本とユーモアのセンスは賞賛されたそうです)

日米の絵柄の好み

* アメリカのゲームはまず第一に「リアリズム」を追求する傾向
* 日本のゲームはより明るくカラフルで、多様なアートスタイルが用いられる傾向
* 一例:スケボー系ゲーム 米:Tony Hawk VS 日本:Jet Set Radio
* 日本のゲーマーにはアメリカのゲームは全部似たように見え、 キャラクターは味気なく、魅力が足りないと感じる
* アメリカのゲーマーからは、 剣を握って戦うよりはファッション ショーに出たほうが良さそうなツンツン頭のかわいい男の子のキャラクターに不満が噴出する

視覚的な嗜好に関する歴史的な相違点

* 19世紀の日本/アメリカの警察の制服や戦争時の甲冑を比較してみると (新撰組VS保安官) その時代においてすでに視覚的な嗜好の違いを見ることができる
* アメリカの厳しい開拓時代において、”伝統を守る( = 美しい衣装等)” ことよりも “合理的” に “生き残れる” 選択をすることのほうが大事だった
* 歴史的な違い:日本の寺 = 流曲線と曲線が特徴的、グレコローマン的建物 = でかい柱と直線 という対比

日本でアニメ絵が好まれる理由

* 大人も漫画を読む文化があり、漫画・アニメは明るく色彩豊かである傾向がある
=>   ゲームでも同様のスタイルが許容される下地
* 欧米のエンターテイメントの主役は映画や TV である
=>   リアル志向を加速?
* 日本ゲームの男性キャラクターがかわいくなる理由としては購買ターゲットに女性を考慮しているという理由があるのではないか
=>   欧米では主に男性向けにゲームを作る
* ヒーロー像の違い―
欧米:マッチョ、ソルジャー
日本:美少年 (腐女子向?)

ゲーム音楽の捉え方

* 日本のゲームは多様な音楽をゲーム専用に作成して使う => メロディはゲームの重要な要素と捉える
* 欧米ではオーケストラや既存のメジャーな曲を使用することが多い
* 欧米で人気の Xbox 系ハードでは自分でプレイリストを作成してかける音楽をカスタマイズすらできる
(訳注: “効果音は出したまま好きな音楽かける”機能がデフォであります)
* 日本で独自音楽作成文化がはやったのはファミコン登場時からではないか
* 既存の楽曲はゲームのストーリーにあわせて作られていないので雰囲気にぴったりフィットしない

一方の地域でしか人気がないゲーム

* 電車シミュレータ:交通システムの違い、アメリカでは電車より車
* 戦争系 FPS:軍もないし、銃も身近にない、PC ゲーマーが少ないのでキーボード移動&マウス エイムに親しみがない

宗教

* 日本:悪の宗教組織を倒すの大好き => ボスが神というパターンが多い
=>   神を殺すという行為が一神教の国では強い抵抗感を生む
(ブレスオブファイア、魔界塔士Saga、FFタクティクス、ゼノギアス、女神転生などなど)
* 日本のゲームで神殺しが許容される理由:日本では神様がたくさんいる、また輪廻転生という考え方もある

ゲームの難易度

* 日本:少数の超ハードコアゲーマーと大量の羽毛級ライトゲーマー
=>   日本のゲームは必然的に難易度が低くなる
=>   ローカライズの際に欧米向に難易度を上げることが多い
(訳注:欧米でゲーマーといえばハードコアな人が多いという前提?)
* 欧米のレンタルゲーム店の存在
=>   簡単なゲーム出そうものならレンタルで済まされて売れない
(訳注:ツタヤでゲーム借りられるのを想像してください)
* 製作段階での視点の違い
=>   欧米:クリアする課題が激ムズなのを望む客 => クリアが目標として機能、能力じゃなくPスキル上げメイン、そのためにゲーム内で何度死んでも気にしない
=>   日本:RPG メイン、死ぬのを嫌う客 => P スキルじゃなくキャラクタの能力あげメイン => 適切に進めれば死なないバランス作り => 難易度低下

※ ここで、CAPCOM の稲船氏のきついコメント「日本の製作会社は難しくても売れるゲームを作る能力を失いつつある」と。
結論

* ゲーム名こそ違うがキャラクターを育てて強くするゲームは両地域で人気がある
* 日本にも洋ゲー万歳のゲーマーが少数だけどいる。
* だからこそニッチながらも洋ゲーが発売されている。
* 欧米でも日本的ゲーム―例えば新女神転生とか―のコアなファンはいる。
* 優れたゲームはどこへいったって優れたゲーム、数百年に及ぶ文化の差を埋めるほどに。
* 結局のところ、実際に思われているよりも共通点は多い。

2008/10/9 木曜日

情報系 仕事 7K システムエンジニア

Filed under: 未分類 — admin @ 12:38:14

昔の仕事の3Kといえば「きつい」「きたない」「きけん」で現業系や技能系の職種に関してあったわけで、

ゴミ収集とか誰でも出来るような仕事に回されてたわけですが、

最近は最先端の情報系にこれよりひどい7Kが普通にあてはまる時代となっている。

7Kとは?

「きつい」「かえれない」「きゅうりょうが安い」「休暇がとれない」「規則が厳しい」「化粧がのらない」「結婚できない」

システムエンジニアは35歳定年が一般的だといわれているが、確かにわからないものでもない。

サーバが落ちたら夜中の2時であっても出勤しなければならない、システム設定が終わらないために帰ることができない、

その割には給料は安く負担も増え、会社の運命も握っているという大変重大な責任が課されている管理職。

自殺者が出るのもわかる。注意しないといけないことは責任感の強い人ほど追い込まれるのが情報系だ。

ストレスを発散できるような環境を作っておかないときついかもしれない…。  そんな道に進もうとしている自分が───

2008/10/4 土曜日

javascript すべてのチェックボックスをON

Filed under: 未分類 — admin @ 11:39:32

<HTML>
<HEAD>
<META HTTP-EQUIV=”Content-Script-Type” CONTENT=”text/javascript”>
<TITLE>チェックボックスを全チェックON/OFFとする方法</TITLE>
<SCRIPT TYPE=”text/javascript”>
<!–
//――――――――――――――――――――――――――――――――――――――
// 作成者 るび~/ACCESS R http://www5e.biglobe.ne.jp/~access_r/
//――――――――――――――――――――――――――――――――――――――
var count;
function BoxChecked(check){
for(count = 0; count < document.form1.r1.length; count++){
document.form1.r1[count].checked = check;    //チェックボックスをON/OFFにする
}
}
//–>
</SCRIPT>
</HEAD>
<BODY>

<FORM NAME=”form1″>
<INPUT TYPE=”button” onClick=”BoxChecked(true);” VALUE=”全て選択”>
<INPUT TYPE=”button” onClick=”BoxChecked(false);” VALUE=”全て未選択”><BR><BR>
<INPUT TYPE=”checkbox” NAME=”r1″ VALUE=”1″> 項目(1)
<INPUT TYPE=”checkbox” NAME=”r1″ VALUE=”2″> 項目(2)
<INPUT TYPE=”checkbox” NAME=”r1″ VALUE=”3″> 項目(3)
<INPUT TYPE=”checkbox” NAME=”r1″ VALUE=”4″> 項目(4)
<INPUT TYPE=”checkbox” NAME=”r1″ VALUE=”5″> 項目(5)<BR>
<INPUT TYPE=”checkbox” NAME=”r1″ VALUE=”6″> 項目(6)
<INPUT TYPE=”checkbox” NAME=”r1″ VALUE=”7″> 項目(7)
<INPUT TYPE=”checkbox” NAME=”r1″ VALUE=”8″> 項目(8)
<INPUT TYPE=”checkbox” NAME=”r1″ VALUE=”9″> 項目(9)
<INPUT TYPE=”checkbox” NAME=”r1″ VALUE=”10″> 項目(10)<BR>
</FORM>

</BODY>
</HTML>

・ソースFROM

http://www5e.biglobe.ne.jp/~access_r/hp/javascript/js_072.html

2008/10/2 木曜日

php myadmin エラー

Filed under: 未分類 — admin @ 15:05:31

 phpMyAdminで作業していて「PMA Database … OK ではありません。」というエラーに出くわした。
放っておいても特に問題ないようだが、気になるので対応方法を探してみた。

PMA Database[G]でグーグルするとたくさん引っかかってくる。
それだけ多くの人たちがこのエラーに遭遇しているということ。
そのなかで真っ先に出てくるのがXREA.COMの掲示板の記事
基本的にはここで書かれていることを実行すれば解決するはずだが、MySQLのバージョンが違うとSQLエラーで先に進めない。

とりあえずエラー表示をなくするだけなら以下の方法が手っ取り早い。
config.inc.php で、

$cfg[PmaNoRelation_DisableWarning’] = TRUE;

根本的な解決をするには上記ページにあるように「phpmyadmin」という名前のデータベースを作ることになる。
手元のマシン(CentOS4.4)ではMySQLのバージョンが「4.1.20」となっている。
まず、phpMyAdminにて「phpmyadmin」というデータベースを作成する。
データベースphpmyadminを選択後、SQLタブをクリックしてそこの入力欄に以下を貼り付けて実行する。

CREATE TABLE `pma_bookmark` (
`id` int(11) NOT NULL auto_increment,
`dbase` varchar(255) NOT NULL default ”,
`user` varchar(255) NOT NULL default ”,
`label` varchar(255) NOT NULL default ”,
`query` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM COMMENT=’Bookmarks’;

CREATE TABLE `pma_column_info` (
`id` int(5) unsigned NOT NULL auto_increment,
`db_name` varchar(64) NOT NULL default ”,
`table_name` varchar(64) NOT NULL default ”,
`column_name` varchar(64) NOT NULL default ”,
`comment` varchar(255) NOT NULL default ”,
`mimetype` varchar(255) NOT NULL default ”,
`transformation` varchar(255) NOT NULL default ”,
`transformation_options` varchar(255) NOT NULL default ”,
PRIMARY KEY (`id`),
UNIQUE KEY `db_name` (`db_name`,`table_name`,`column_name`)
) TYPE=MyISAM COMMENT=’Column information for phpMyAdmin’;

CREATE TABLE `pma_history` (
`id` bigint(20) unsigned NOT NULL auto_increment,
`username` varchar(64) NOT NULL default ”,
`db` varchar(64) NOT NULL default ”,
`table` varchar(64) NOT NULL default ”,
`timevalue` timestamp(14) NOT NULL,
`sqlquery` text NOT NULL,
PRIMARY KEY (`id`),
KEY `username` (`username`,`db`,`table`,`timevalue`)
) TYPE=MyISAM COMMENT=’SQL history for phpMyAdmin’;

CREATE TABLE `pma_pdf_pages` (
`db_name` varchar(64) NOT NULL default ”,
`page_nr` int(10) unsigned NOT NULL auto_increment,
`page_descr` varchar(50) NOT NULL default ”,
PRIMARY KEY (`page_nr`),
KEY `db_name` (`db_name`)
) TYPE=MyISAM COMMENT=’PDF relation pages for phpMyAdmin’;

CREATE TABLE `pma_relation` (
`master_db` varchar(64) NOT NULL default ”,
`master_table` varchar(64) NOT NULL default ”,
`master_field` varchar(64) NOT NULL default ”,
`foreign_db` varchar(64) NOT NULL default ”,
`foreign_table` varchar(64) NOT NULL default ”,
`foreign_field` varchar(64) NOT NULL default ”,
PRIMARY KEY (`master_db`,`master_table`,`master_field`),
KEY `foreign_field` (`foreign_db`,`foreign_table`)
) TYPE=MyISAM COMMENT=’Relation table’;

CREATE TABLE `pma_table_coords` (
`db_name` varchar(64) NOT NULL default ”,
`table_name` varchar(64) NOT NULL default ”,
`pdf_page_number` int(11) NOT NULL default ’0′,
`x` float unsigned NOT NULL default ’0′,
`y` float unsigned NOT NULL default ’0′,
PRIMARY KEY (`db_name`,`table_name`,`pdf_page_number`)
) TYPE=MyISAM COMMENT=’Table coordinates for phpMyAdmin PDF output’;

CREATE TABLE `pma_table_info` (
`db_name` varchar(64) NOT NULL default ”,
`table_name` varchar(64) NOT NULL default ”,
`display_field` varchar(64) NOT NULL default ”,
PRIMARY KEY (`db_name`,`table_name`)
) TYPE=MyISAM COMMENT=’Table information for phpMyAdmin’;

その後config.inc.phpを以下のように変更する。

$cfg[‘Servers’][$i][pmadb’]         = ‘phpmyadmin’;          // Database used for Relation, Bookmark and PDF Features
// (see scripts/create_tables.sql)
//   - leave blank for no support
//     DEFAULT: ’phpmyadmin’
$cfg[‘Servers’][$i][‘bookmarktable’] = pma_bookmark’;          // Bookmark table
//   - leave blank for no bookmark support
//     DEFAULT: ’pma_bookmark’
$cfg[‘Servers’][$i][‘relation’]      = pma_relation’;          // table to describe the relation between links (see doc)
//   - leave blank for no relation-links support
//     DEFAULT: ’pma_relation’
$cfg[‘Servers’][$i][‘table_info’]    = pma_table_info’;          // table to describe the display fields
//   - leave blank for no display fields support
//     DEFAULT: ’pma_table_info’
$cfg[‘Servers’][$i][‘table_coords’]  = pma_table_coords’;          // table to describe the tables position for the PDF schema
//   - leave blank for no PDF schema support
//     DEFAULT: ’pma_table_coords’
$cfg[‘Servers’][$i][‘pdf_pages’]     = pma_pdf_pages’;          // table to describe pages of relationpdf
//   - leave blank if you don’t want to use this
//     DEFAULT: ’pma_pdf_pages’
$cfg[‘Servers’][$i][‘column_info’]   = pma_column_info’;          // table to store column information
//   - leave blank for no column comments/mime types
//     DEFAULT: ’pma_column_info’
$cfg[‘Servers’][$i][‘history’]       = pma_history’;          // table to store SQL history
//   - leave blank for no SQL query history
//     DEFAULT: ’pma_history’

2008/9/30 火曜日

神舟7号 泡

Filed under: 未分類 — admin @ 20:58:57

中国が神舟7号を宇宙空間へ射出し、無事帰還。宇宙遊泳もした!と各メディアは伝えているが・・・・?

あ・・・あれ・・・???何か泡のようなものが・・・

« 前のページ次のページ »

HTML convert time: 1.283 sec. Powered by WordPress ME