Top過去ログ目次掲示板

作成日:2008年01月21日 作成:おやじ
掲示板で過去に質問された内容です。

No.7430 Apache+PHPの設定について一考


No.7430 投稿時間:2008年01月21日(Mon) 21:49 投稿者名:7743 URL:
タイトル:Apache+PHPの設定について一考

拝啓おやじ様、何時もおやじ様のページを参考にサーバーの設定を
しています。数あるHow toページの中でもおやじ様のページが解り
易く最強だと思っています。
今回、おやじ様のページを参考にWindowsでSSL通信可能でXOOPSを動か
すデモ機のセッティングをしたのですが、おやじ様のページのPHPの設
定について是非つけ加えて頂きたい項目があります。
XOOPSのセッティングで、一部文字化けが起こり、いろいろ検索してみ
てどれも解決に至らず悩んでいました。
そもそもXOOPSのphpスクリプトがTeraPadで文字コードと改行コードを
確認してみるとShift JIS+LFだったりしてそれが原因なのかと悩んだ
のですが、キチンとした文字コード+改行コードに変えても相変わらず
文字化けに悩まされました。
(ツールで一括して文字コードを変換すると今度はスクリプト自体が
エラーを吐く。FTP越しに上げるとこういう事は起こらないのかな?
今回は全てローカル上でコピーしました。)

解決策はPHP.INIの
default_charset = Shift_JIS を
default_charset = PASS
とするだけで一部文字化け(私の場合はログオン中の待ち画面の
文字化けでした)が直りましたので(phpmyadminも激しく文字化け
していましたがぴたっと直りました)
おやじ様の解説ページに文字化けが直らない場合はこの設定も
試してみてください的なスタンスで注記して頂けないでしょうか?
確認バージョンは
php5.2.5
apach2.2.6-ssl
です。おやじ様の解説ページではバージョンが違いますが
基本的には変わらないと思います。


No.7431 投稿時間:2008年01月23日(Wed) 21:45 投稿者名:おやじ URL:
タイトル:おやじのHPはかなり誤りがあります。

> 拝啓おやじ様、何時もおやじ様のページを参考にサーバーの設定を
> しています。数あるHow toページの中でもおやじ様のページが解り
> 易く最強だと思っています。

と言われるとうれしいのですが、あくまで趣味の領域でありこの世界を知ってちょうど6年で、素人に毛が生えた程度の知識しかなく、結構間違いも多いです。
コンテンツが多すぎるので気がついていても直せていない部分もあり、phpに関してはこれに該当するのではないかと思います。

> 今回、おやじ様のページを参考にWindowsでSSL通信可能でXOOPSを動か
> すデモ機のセッティングをしたのですが、おやじ様のページのPHPの設
> 定について是非つけ加えて頂きたい項目があります。
> XOOPSのセッティングで、一部文字化けが起こり、いろいろ検索してみ
> てどれも解決に至らず悩んでいました。
> そもそもXOOPSのphpスクリプトがTeraPadで文字コードと改行コードを
> 確認してみるとShift JIS+LFだったりしてそれが原因なのかと悩んだ
> のですが、キチンとした文字コード+改行コードに変えても相変わらず
> 文字化けに悩まされました。
> (ツールで一括して文字コードを変換すると今度はスクリプト自体が
> エラーを吐く。FTP越しに上げるとこういう事は起こらないのかな?
> 今回は全てローカル上でコピーしました。)
>
> 解決策はPHP.INIの
> default_charset = Shift_JIS を
> default_charset = PASS
> とするだけで一部文字化け(私の場合はログオン中の待ち画面の
> 文字化けでした)が直りましたので(phpmyadminも激しく文字化け
> していましたがぴたっと直りました)
> おやじ様の解説ページに文字化けが直らない場合はこの設定も
> 試してみてください的なスタンスで注記して頂けないでしょうか?
> 確認バージョンは
> php5.2.5
> apach2.2.6-ssl
> です。おやじ様の解説ページではバージョンが違いますが
> 基本的には変わらないと思います。

phpの文字化けはなかなか難しい問題で、おやじも結構苦労します。
究極は、「コードを統一し、変換等を行わずにその環境に合わせて設定すること。」と思いますが、いろいろなソフトがあるため必ずしもそうは行かないのが実態です。
従って、各人のシステムで一番問題がない設定をphp.iniでデフォルト設定しておき、「問題がある場合は、.htaccessやapacheの設定で変更する。」というのが現実的ではないでしょうか?
おやじのページの設定は、基本的にはよろしくない設定です。下記で設定すれば、ほとんどのケースでうまくいくと思います。

1. output_buffering
おやじの無知で On と記載していますが、一般的に出力バッファリング制御をチャント実行しているとは思えませんので、ここはOffが正解と思います。

output_buffering = Off

2. default_charset
これを指定すると、常にContent-type:ヘッダで character encodingを出力するようになるが、コードはソフトに依存するのでcharsetの送信を無効にするのが正解。
  無効にするには、これを空にする。passという値は? 最近のバージョンはデフォルトで下記になっているが、バージョンによっては、"iso-8859-1"になっているようなので、コメントアウトでなく明示的に空にするほうが良いと思います。

default_charset = "";

3. mbstring.language = Japanese
4. mbstring.internal_encoding = EUC-JP
5. mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off

基本的に無変換。

7. mbstring.detect_order
文字コードの検出順序でありデフォルトはauto。但し、autoの検出順序がASCII, JIS, UTF-8, EUC-JP, SJISのため誤検出するようなので、順序を入れ替え指定。

mbstring.detect_order = EUC-JP,SJIS,JIS,UTF-8,ASCII


8. mbstring.substitute_character = none;


[参考URL]
http://hain.jp/index.php/tech-j/2007/02/13/%EF%BC%B0%EF%BC%A8%EF%BC%B0%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91


No.7433 投稿時間:2008年01月24日(Thu) 19:34 投稿者名:7743 URL:
タイトル:Re: おやじのHPはかなり誤りがあります。

お返事ありがとうございます
すみません
mbstring.http_input = pass
の間違いでした。
意味をよく理解してないので、間違っちゃいました。
おやじ様の設定が正規の設定なんでしょうね。
おやじ様は凄いなと改めて思いました。
いつも参考に見てますのでがんばってください。

自分では確認していないのですが、おやじ様が気にしていた
CentOSのSELinuxの切り方が
http://centossrv.com/
このHPに載っていました。とっくの昔にやられているかもしれませんが
一応参考までに書いておきます。
私も実はRedHat難民で、Vineに移行していたのですが
昨今のLinuxの進化に取り残された感があるのでCentOSを使って
見ようと思っています。
おやじ様のHPや他の方のHPを見るとRedHatの後継はやはりCentOSなのかな
と思っちゃいます。


No.7440 投稿時間:2008年01月28日(Mon) 18:01 投稿者名:裕次郎 URL:
タイトル:ご存知だと思います

> CentOSのSELinuxの切り方が

当然ご存知だと思います。おやじさんはこの手のウェブサイトの主宰者の中では極めて慎み深い方です (おやじさんが自身で言われるように「初心者」なら、世の「初心者」は初心者どころかまだ足を半歩も踏み入れていないことになりますよ)。

> 私も実はRedHat難民で、Vineに移行していたのですが
> 昨今のLinuxの進化に取り残された感があるのでCentOSを使って
> 見ようと思っています。
> おやじ様のHPや他の方のHPを見るとRedHatの後継はやはりCentOSなのかな

このあたりは多々誤解があります。CentOS プロジェクトのウェブサイトにあるとおり、それは RedHat の後継ではなく、すでにリリースされた RedHat のエディションから商用パッケージ部分を取り除いた (正確には新たに収録したものもあります) ディストリビューションです。だから、後継とかご先祖さんとかいう概念はありません。


No.7447 投稿時間:2008年01月30日(Wed) 12:57 投稿者名:7743 URL:
タイトル:Re: ご存知だと思います

おやじ様をバカにしてるように見えたのなら申し訳ありません。
何時も参考にさせて貰ってるページですし、Filezilaの日本語
パッチを作ったり、ここでいろいろな助言をしたり
おやじ様のパワーには圧倒されっぱなしですが、少しでも
情報提供になればと思って書かせて頂いた次第です。

HPに記述されている技術レベルからすると完全に蛇足で
リトルリーグの4番打者が空気を読めずに大リーグの
ホームランバッターにバッティングの指導をしてしまったような
感じで恥じ入るばかりです。

>それは RedHat の後継ではなく

レスはキチンと読まれてますか?
おやじ様もそうでしたが、私も元々無料だった頃のREDHATを使ってい
ましたが
その後オープンソースは幾ばくかの資金を提供してFeadraに移り、
RHELの方は全て有料になりました
Feadraのスタンスが合わなかったそれまでのユーザーに取って
どうかと言う事を言っているのは文脈から理解できるように
書いたつもりです。
CentOSが実質的にどうか、と言う事より、使う側に取っての
使い勝手や誕生の経緯がどうかと言う事からRedhatの代わりに
使えるかどうかという話をさせて頂いたつもりです。


No.7455 投稿時間:2008年01月31日(Thu) 17:40 投稿者名:裕次郎 URL:
タイトル:読んだ上であえて言っていますので

そのあたりは無問題であると思います。


No.7464 投稿時間:2008年02月04日(Mon) 05:57 投稿者名:7743 URL:
タイトル:Re: 読んだ上であえて言っていますので

> そのあたりは無問題であると思います。

なるほど、では、読んだ上で、言わなくても良い一言を言って
他人の神経を逆撫でされるタイプの方ということですね。
真剣にレスをいたしましてこれは失礼しました。
以降レスは不要ですので、あなたの日記はチラシの裏にでも
お書きください。


No.7467 投稿時間:2008年02月04日(Mon) 19:48 投稿者名:裕次郎 URL:
タイトル:Re^2: 読んだ上であえて言っていますので

「言わなくてもよい」というのは単にあなたの主観であるので、一般的にはそうではない可能性が高いのです。

それゆえ、私の前言はやむを得ざる理由があったものと思われます。


No.7444 投稿時間:2008年01月29日(Tue) 15:17 投稿者名:stranger URL:
タイトル:Re: PHPファイルとページ表示のコードが異なる場合

> 1. output_buffering
> おやじの無知で On と記載していますが、一般的に出力バッファリング制御をチャント実行しているとは思えませんので、ここはOffが正解と思います。
>
> output_buffering = Off
>
(PHPファイルとページ表示のコードが異なる場合)
output_buffering = On
output_handler = mb_output_handler
という人もいます


No.7446 投稿時間:2008年01月30日(Wed) 12:45 投稿者名:7743 URL:
タイトル:Re^2: PHPファイルとページ表示のコードが異なる場合

自分で試してみようと思いstranger氏の記述を
よく見たら、おやじ様のデフォルトの設定でそうなってました。
Windows版
Apache2.2.6と
PHP5.2.5の設定で
文字化けが大きな問題となるXOOPS上を例とした話ですが
(一応問題を簡略化する為、MySQLはきちんと設定出来ている物とします)
stranger氏の設定だけでは解決出来ません。
やはりおやじ様の指摘通り
>mbstring.http_output = pass
と言う部分が無いとどうしても文字化けしてしまいます。
output_bufferingに関しては私のつたない知識で調べた限りでは
文字コードがShift JISの時にOnまたは4096とすると
動作が速くなるそうです。


No.7451 投稿時間:2008年01月30日(Wed) 21:43 投稿者名:おやじ URL:
タイトル:闇雲にやってもだめです。

> 自分で試してみようと思いstranger氏の記述を
> よく見たら、おやじ様のデフォルトの設定でそうなってました。
> Windows版
> Apache2.2.6と
> PHP5.2.5の設定で
> 文字化けが大きな問題となるXOOPS上を例とした話ですが
> (一応問題を簡略化する為、MySQLはきちんと設定出来ている物とします)
> stranger氏の設定だけでは解決出来ません。
> やはりおやじ様の指摘通り
> >mbstring.http_output = pass
> と言う部分が無いとどうしても文字化けしてしまいます。
> output_bufferingに関しては私のつたない知識で調べた限りでは
> 文字コードがShift JISの時にOnまたは4096とすると
> 動作が速くなるそうです。


試してみるのは良いことですが、そもそも目的が何か?期待される結果がどうなのか?
を理解してから進めないと、昔のおやじみたいになりますよ。

PHPの記述コードが何であれ、PHPの記述コードとHTTP出力で出力されるContent-typeヘッダ
のコードが同じであれば、前レスのとおりの設定(透過。無変換)であれば、システムに複数
のコードが混在していても何ら問題ないです。
例えば、phpMyAdminはUTF-8で自作PHPはShift_JISといった具合です。
strangerさんが言っているのは、例えば、PHPはEUCで記述されているが、HTTP出力では
Shift_JISで出力されるような場合のことです。そういうスクリプトがどれくらいあるか
知りませんが、もしそういうことが必要なら、php.iniでは先のように基本的に無変換にし、
必要なところだけ、.htaccessで指定してあげればいいのでは?
一例ですが、PHPがUTF-8で出力がShift_JISの場合の.htaccessの記述例は以下のとおりです。
なお、.htaccessで記述する場合は、下記が参考になるでしょう。

http://www.shigeweb.jp/php/project_p/?section=setup&page=htaccess

<IfModule mod_php5.c>
    # 文字エンコーディングを指定したエンコーディングに変換。
    # output_handler で "mb_output_handler" 指定時は、自動で output_buffering On
    # となるので、output_bufferingは省略可。
#   php_flag output_buffering On
    php_value output_handler "mb_output_handler"

    # PHPの記述コード系(ex. UTF-8)を指定。
    php_value mbstring.internal_encoding "UTF-8"

    # HTTPの出力コード系(ex. SJIS)を指定。
  php_value mbstring.http_output  "SJIS"
</IfModule>


No.7465 投稿時間:2008年02月04日(Mon) 06:11 投稿者名:7743 URL:
タイトル:Re: 闇雲にやってもだめです。

今回はXOOPS専用のデモ機のセッティングということでしたので
ユーザーやページ個別の設定というのを考える必要がありませんでしたが
他のスクリプトなどと混在させるときは必要なんですね
XOOPSで文字化けを起こしていたページのソースを見るとEUCでもSHIFT
JISでもどちらでも文字化けしていたので何が起こったかについては
薄々感じて居ました
一応XOOPSのPHPも全てSHIFT JISなりEUCに変換してみましたが
解決にはいたりませんでした。
そのまま透過設定にして、不具合が出るところは.htaccessで解決する
ということですね。
.htaccessの設定については参考にさせて頂きます。
お忙しいところ手を煩わせましてありがとうございました。



掲示板▲頁先頭