|

■「Internal
Server Error」等のエラーが出る
お客様のホームディレクトリの中にhttp_logsというディレクトリがありますが、その中のerror_logというファイルに詳しいエラーが記載されている場合がありますので、エラーが出た場合はそのファイルをFTPで取得して最終行付近をご覧下さい。
次に、下記の箇所を点検してください。
| 点検箇所 |
説明 |
| 設置場所 |
public_htmlディレクトリの直下にcgi-localというディレクトリを作成し、そこにCGIを設置します。 |
| 文字コード |
サーバーはUTF-8を標準としていますので、できればUTF-8にします。
EUCやShiftJISでも可能ですが、ShiftJISの場合は特定の文字が文字化けする可能性がありますので注意してください。 |
| 改行コード |
LFのみにします。CRやCR+LFではエラーになることがあります。 |
| FTPソフト |
アップロード時に文字コードや改行コードが自動変換されるようになっていたら、それを解除します。もしくは、バイナリでアップロードするようにします。 |
| ファイルのパス |
Perlプログラムの場合、1行目が「#!/usr/bin/perl」以外になっているとエラーが出る場合があります。プログラム中にsendmail等のパス指定もあれば、それも確認してみてください。 |
| パーミッション |
実行形式のファイル(通常のCGI)は755、掲示板などのログの場合は666等が普通です。
SuEXECのオプションをご利用の場合はさらに注意が必要です。 |
| SSIとの連携 |
SSIを使ってCGIを呼ぶ場合、CGIのパスを間違うと実行されなかったりエラーになったりします。 |
| その他 |
プログラム自体が間違っていたり、指定された場所にディレクトリやファイルを作っていなかったりするとエラーが起きる場合があります。設置しようとするCGIの説明書があれば詳しくご覧ください。 |
|
■今まで動いていたのに突然動かなくなった
上記のエラーの他に、次の箇所を点検してください。
| 点検箇所 |
説明 |
| ファイルの上書き |
ホームページを更新した際に、誤ってCGIファイルも同時に転送してしまい、パーミッションなどが変更されている場合があります。 |
| ディスク容量の不足 |
契約しているディスク容量を超えた可能性があります。大きいファイルなどを扱っている場合は当社までご相談ください。 |
| プログラムの不具合 |
プログラム自体の不具合も考えられます。まずは入念に上記箇所をチェックし、最後にプログラムを見直してください。 |
| .htaccessの設置/不具合 |
.htaccessに不正な文字やオプションが含まれているとサーバーエラーになる可能性があります。当社サーバーで使用できるのは、ファイル情報(FileInfo)、認証(AuthConfig)、制限(Limit)のみです。「php_flags」などのオプションは使用できません。 |
| サーバー側のアップデート |
PerlやPHPのバージョンアップで一部の関数などで互換性が無くなっている可能性があります。
その場合、当社までご連絡ください。 |
|
■プログラムが文字化けする
データベース(XOOPS/MovableType等を含む)やCGIなどのプログラムをご利用の場合にご一読ください。
当サーバーのシステムの標準文字コードはUTF-8です。今までEUCが標準のサーバーをご利用だった場合は、データベースを利用するCGIの変更が必要になる場合があります。
データベースはUTF-8で格納されます。よって、CGI側でデータベースの読み書きをする際にUTF-8に対応する必要があります。
対処法としては次の2通りになります。
(1)CGI自体の文字コードをUTF-8に変更する。
(2)データベースの読み書きの部分だけ、EUCとUTF-8の相互変換をするように修正する。
(1)の場合は対処が比較的簡単ですが、PHP等の場合は内部コードをUTF-8に明示的に合わせる必要があります。
PHPの場合は下記のコードをプログラムの先頭に入れることで動く場合があります。
/* 入出力をUTF-8に変換する */
mb_http_output("UTF-8");
ob_start("mb_output_handler");
mb_internal_encoding("UTF-8"); |
|
(2)の場合はデータベースの読み書きをする部分だけを注目し、そこだけ文字コードの変換を行います。文字コードの変換は下記の関数で行えます。
プログラムがEUCで書かれていた場合を例にして説明します。
| 項目 |
関数の使用例 |
データベースへの書き込み時
※
EUCからUTF-8に変換 |
$new_str = mb_convert_encoding($orig_str, "UTF-8", "EUC-JP");
/*
$new_strをデータベースに書き込む */
・・・・・・・ // データベースへの書き込み |
データベースからの読み込み時
※
UTF-8からEUCに変換 |
/* データベースから読み込んで$orig_strに格納 */
・・・・・・・ // データベースからの読み込み
$new_str = mb_convert_encoding($orig_str, "EUC-JP", "UTF-8"); |
|
他に、PostgreSQLに下記のSQL文を入れてから操作すると、データベースにアクセスするたびに文字コード変換をしなくても大丈夫な場合があります。ただし、CGIを呼ぶ度に実行する必要がありますので、先頭行の近くに記述しておくといいでしょう。
/* PostgreSQLとEUC_JPでやりとりする */
set client_encoding=EUC_JP |
|
※一部の文字で変換エラーになる場合があるようなので、こちらの方法はあまりお勧めできません。
■UTF-8とUTF-8Nの違いについて
UTF-8は厳密に分けるとUTF-8とUTF-8Nの2種類が存在します。前者はBOMコードと呼ばれる3バイトのコードがファイルの先頭に付いています。このことによって、UTF-8のファイルと明示的に認識できることになります。しかし、この3バイトのせいでプログラムが正常に動かなくなる可能性があります。もしお使いのエディタにUTF-8とUTF-8Nの2種類が存在する場合、できるだけUTF-8Nで保存した方がトラブルが少ないようです。
■UTF-8でコードを書いたらブラウザの半角文字が変になる(ページのレイアウトが崩れる)
これはInternet Exprolerのみの問題(バグと呼んでいいぐらいの仕様)ですが、UTF-8だと半角の英数字が「MSゴシック」以外に変更されてしまいます。Shift JISやEUC等では問題ありません。
この問題を解決するためには、明示的にフォントを指定する必要があります。次のようにHTMLページの先頭でCSS定義すればいいようです。
<style type="text/css">
<!--
* { font-family: 'MS Pゴシック',Osaka,sans-serif; }
-->
</style> |
もしくは |
<style type="text/css">
<!--
body,input,button {
line-height:normal;
font-family:"MS Pゴシック";
}
textarea {
line-height:normal;
font-family:"MS ゴシック";
}
-->
</style> |
|
また、UTF-8でHTMLを記述する場合、metaタグ(http-equiv=・・・)内に「charset=utf-8」と入れますが、そのmetaタグの前に日本語が入っている場合(例えば「<title>私のページへようこそ!</title>」等)は、IE6でShiftJISに誤認識されてしてしまうというバグがあるようです。よって、metaタグはheadタグの直下に入れるようにしてください。
■データベースへのデータの書き込み時にフィールドの最大文字数を超えてしまう
例えばvarchar型フィールドのデータが、UTF-8に移行した際に文字数オーバーになることがあります。これはEUCよりもUTF-8の内部文字数(バイト数)が多いことに起因します。varchar型であれば文字数を増やすことは可能ですので、余裕のある文字数に変更した方がよろしいかと思います。
以前エラーが出なかったのに、新システムに移行後に文字数オーバーでエラーになる場合はここを疑ってください。
■XOOPSの文字コードをEUCからUTF-8に変換したい
インストールしたフォルダの下記のファイル群を変更してください。
| ファイル |
内容 |
| language/japanese/*.php |
全てUTF-8に変換する |
| modules/モジュール名/language/japanese/*.php |
各モジュールについて、全てUTF-8に変換する |
| language/japanese/global.php |
168行目ぐらいに
define('_CHARSET', 'EUC-JP');
となっているところがあるので、そこを次のように修正する。
define('_CHARSET', 'UTF-8'); |
|
■文字コードを一括変換したい
PHPなどのソースを1ファイルごとにUTF-8に変換するのは大変な作業です。そこで複数のファイルを一括で変換できるツールを使うと便利です。
・Windows用
KanjiTranslator(ベクターよりダウンロード可)
・Linux用
特に一括変換ツールはなさそうですが、一括変換したいディレクトリに移動後に下記のコマンドで一括変換できます。
(例)拡張子phpを、文字コードUTF-8、改行コードLFに変換したい場合
find . -name "*.php" -print0 | xargs -0 nkf -w -Lu --overwrite |
|
■PHP4をPHP5に移行したい
PHPで作成されたCGIなどのプログラムをご利用の場合にご一読ください。
当サーバーではPHPのバージョン5を使用しています。
PHP4からPHP5へ移行する場合、いくつかの修正点があります。詳細は該当サイトや専門誌を見ていただくことになりますが、特に文字コードの変換関数などに注意してください。ここではPHP5で削除された関数と代替関数の一部をご紹介します。
| PHP 4 |
PHP 5 |
解説 |
| mbstrlen |
mb_strlen |
文字数を数える |
| mbstrpos |
mb_strpos |
文字列の中に指定した文字列が最初に現れる位置を見つける |
| mbstrrpos |
mb_strrpos |
文字列の中に指定した文字列が最後に現れる位置を見つける |
| mbsubstr |
mb_substr |
文字列の一部を得る |
| mbstrcut |
mb_strcut |
文字列の一部を得る |
| i18n_internal_encoding |
mb_internal_encoding |
内部文字エンコーディングを設定あるいは取得する |
| i18n_http_input |
mb_http_input |
HTTP 入力文字エンコーディングを検出する |
| i18n_http_output |
mb_http_output |
HTTP 出力文字エンコーディングを設定あるいは取得する |
| i18n_convert |
mb_convert_encoding |
文字エンコーディングを変換する |
| i18n_discover_encoding |
mb_detect_encoding |
文字エンコーディングを検出する |
| i18n_mime_header_encode |
mb_encode_mimeheader |
MIMEヘッダの文字列をエンコードする |
| i18n_mime_header_decode |
mb_decode_mimeheader |
MIME ヘッダフィールドの文字列をデコードする |
| i18n_ja_jp_hantozen |
mb_convert_kana |
カナを("全角かな"、"半角かな"等に)変換する |
|
PHP4とPHP5の違いなど、詳しくはこちらのサイト(PHP 4 から PHP 5.0.x への移行)をご覧ください。
|
|