のんき者のシステム開発ノート(ってかメモ)

アクセスカウンタ

zoom RSS 【環境構築3】PHPをインストールする

<<   作成日時 : 2011/02/07 17:31   >>

ブログ気持玉 0 / トラックバック 1 / コメント 0

[2011.02.07] last update [] CentOS(Fedora/RedHat)/PHP5.1

Apacheのインストールが完了しました。
次にPHPをインストールしようと思いますが...。

実は、yum groupinstall "Web サーバー"とApacheをインストールした際に、phpものWeb サーバーのDefault Packagesのひとつとして一緒にインストールされています。
なので、インストールは不要なのです...。

まぁとりあえず、インストールされていないと仮定した場合のインストール手順は下の通り。

yum install php

終了!!

簡単過ぎますね〜。


それではphpが動くか試してみます。

Apacheインストール直後の設定を変更していない場合だと、/var/www/html がドキュメントルートになっており、ここに置いたファイルが公開対象のホームページということになります。
※httpd.confの設定次第でこの場所を変更したり、ユーザー毎に公開場所の設定できたりと、様々な設定を行うことが出来ます。

1.動作確認用のファイルを作成
/var/www./html に test.php とう名前の空のファイルを作ります。
(コマンドなら touch test.php)
(コマンドなら echo "<?php phpinfo() ?>" > test.php) ・・・ 2.は不要。

2.test.php に <?php phpinfo() ?> と書き込む。

3.test.php→右クリック→プロパティー→アクセス権タブ→グループとその他のアクセス権を読み込みのみに設定する。
(コマンドなら chmod 644 test.php)

4.として、外部からブラウザのアドレス欄に http://192.168.0.100/test.php と打ち込んで確認!
※192.168.0.100 はeth0等に設定したアドレスを指定して下さい。同じPCから見る場合はlocalhostでも可。
画像

のように表示されればOK!
※CentOS5.5では初期設定で有効になっていますが、表示されない場合は/etc/http/conf.d/php.confの設定を変える必要があります。


phpの設定については以下の2つに分かれます。
@Apacheでのphpの取扱の設定
/etc/http/conf.d/php.conf の設定を変更することで対応します。
※昔は/etc/http/httpd.conf に纏めて書かれていましたが、今は管理しやすくする為に /etc/http/conf.d の中に1つのファイルとして設定されています。


Aphp自体の動作についての設定
php.ini の設定を変更することで対応します。

以下でそれぞれに最低限必要と思われる設定を記します。
※必要に応じて編集予定。
※どちらの設定変更後も、httpd -t で構文チェックを行います。問題がなければ「Syntax OK」と表示されるので httpd -k restart でサーバーを再起動させて下さい。

【Apacheでのphpの取扱の設定】
設定ファイル:/etc/http/conf.d/php.conf

・phpプログラムとして実行する対象のファイル拡張子を設定
デフォルト:AddHandler php5-script .php
htmlの中に書かれたphp構文を処理する為にはこの項目に .htmlを追記します。
例:AddHandler php5-script .php .html

【php自体の動作についての設定】
設定ファイル:/etc/php.ini

・phpの実行が許されるフォルダを指定する。(ってことだと思う^^;)
デフォルト:doc_root =
ブランクだとどこでも実行可能ってことっぽい。セキュリティ上、好ましくないそうです。
例:doc_root =/var/www/html/
この設定の場合、/var/www/html/以下の.phpファイルは確実にインタプリタ処理(プログラムの実行)をされた結果のみが返されるので、phpファイルの中身が外部に漏れることは無いそうです。
個人的にはブランクでいいような気がするのですがねぇ〜。

・ユーザディレクトリの設定
デフォルト:user_dir =
Apacheの設定ファイルhttpd.confにおいて、ユーザ毎にホームページを公開する設定になっている場合に、<IfModule mod_userdir.c></IfModule>の中に書かれているUserDir部分に設定されているものと同じものを設定します。

・phpモジュールが保管されているフォルダを指定
デフォルト:extension_dir = "/usr/lib/php/modules"
モジュールを複数の箇所に置いて管理した場合は、このフォルダにlnコマンドでリンクをはりましょう!

・モジュール設定
必要なモジュールを有効化するための設定をする場合は、extension=に値を設定します。
<mysqlと連携する為の設定> php-mysql.i386のインストールが必要(yum install php-mysql.i386)
extension=mysql.so
<マルチバイト対応> php-mbstring.i386のインストールが必要(yum install php-mbstring.i386)
extension=mbstring.so

[mbstringを有効にした場合の設定] ・・・ 超参考にしたサイト
コメント化されている場合は";"を消して解除する。

デフォルト:;mbstring.language = Japanese
設定:mbstring.language = Japanese
言語設定です。

デフォルト:;mbstring.internal_encoding = EUC-JP
設定:mbstring.internal_encoding = UTF-8
ほぼ使われる事の無いものらしいです。一部の機能で変換前の文字コードの指定が無いときに使われるそうです。

デフォルト:;mbstring.http_input = auto
設定:mbstring.http_input = pass
入力された文字の文字コードのデフォルト?基本的にpassで良いようです。

デフォルト:;mbstring.http_output = SJIS
設定:mbstring.http_output = pass
ob_start()などの機能で使われるようです。いろいろと問題になることがあるようなのでpassを設定します。

デフォルト:;mbstring.encoding_translation = Off
設定:mbstring.encoding_translation = Off
入力された文字を内部文字コード(mbstring.internal_encoding?)に変換するかどうかのフラグ。
問題になることがあるようなのでOffを設定します。

デフォルト:;mbstring.detect_order = auto
設定:mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII
文字コードを変換する際に、どの文字コードと一致するか確認する順番?
可能性が高い順に変換しておく方がよいだろうと思う。



【eclipseで開発するときの為に、デバッガの設定など】

Zend社のHPより、デバッガーと高速化のモジュールをダウンロードします。
http://www.zend.co.jp/

登録が必要です。
手順:登録→メールの受け取り→有効化→ログイン→ダウンロード


■Zendデバッガ■
eclipseでデバックするのに必要!

ダウンロード→severlinux→debugger→対象のデバッガーダウンロード
私の場合は、「ZendDebugger-v5.2-linux-glibc23-i386.tar.gz」。

解凍
tar zxvf ZendDebugger-v5.2-linux-glibc23-i386.tar.gz

[portの開放]
メインメニューのシステム→管理→セキュリティーレベルとファイヤーウォールの設定 でセキュリティーレベルの設定画面を開き、ファイヤーウォールのオプションタブの"その他のポート"をクリックし、追加ボタンでポート:10000、プロトコル:tcpを設定し、OK→OKとします。

php.iniのextension_dirに設定したディレクトリにZendDebugger.soを配置する。

php.iniへの記述
[Zend debugger]
zend_extension=/任意のディレクトリ/ZendDebugger.so
・・・配置したZendDebugger.soのフルパスを設定。
zend_debugger.deny_hosts=all
・・・アクセスを拒否するホストの指定。
zend_debugger.allow_hosts=127.0.0.1/32,192.168.0.0/24
・・・アクセスすることを予定しているホストのIPを指定。127.0.0.1は自分自身、192.168.0.0はプライベートアドレス内の192.168以下の全部になるんだと思います。
zend_debugger.expose_remotely=always

Windowsなどでスレッドセーフ版のphpを使用する場合、設定項目がzend_extension_tsのように_tsが付きます。
同梱されているdummy.phpをドキュメントルート(/var/www/htmlなどhttpd.confでDocumentRootに設定した場所)に配置します。eclipseでデバッグできるかのチェックに使うっぽい。


phpinfo()で組み込まれたか確認できるみたいだけど、出てこない。
いつの間にか出てたりしたことがある。
ま、外部からデバッグできればOKということで^^;


■Zend Optimizer■
phpの動作を速度化するモジュール。

ダウンロード→severlinux→guardloader→対象をダウンロード
私の場合は、「ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz」。

解凍
tar zxvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz

php.iniのextension_dirに設定したディレクトリにZendOptimizer.soを配置する。

php.iniへの記述。
(zenddebuggerより先に書いた方がいいっぽい。)
[Zend optimizer]
zend_extension=/usr/lib/php/modules/ZendOptimizer.so
・・・配置したZendOptimizer.soのフルパスを設定。
zend_optimizer.disable_licensing=0
・・・実行許可ライセンスのチェックの有無。無し"0"ならパフォーマンスUP。
zend_optimizer.license_path
・・・実行許可ライセンスファイルへのパス
zend_optimizer.obfuscation_level_support=3
・・・難読化レベルの設定

Windowsなどでスレッドセーフ版のphpを使用する場合、設定項目がzend_extension_tsのように_tsが付きます。


■phpの複数のバージョンへの対応...■

ZendExtensionManager.soが見付からないので対応させたかったけど、取り止め。
XAMMPなら最初から入っているらしいんだけど...。

;php.iniへの記述
;zend_extension=ZendExtensionManager.soへのフルパス
;zend_extension_manager.optimizer=???


■SELinuxへの対応■
SELinuxを有効にしている場合、後から追加したZendDebugger.so、ZendOptimizer.so等は、SELinuxの設定を行わなければモジュールとして有効化されないようです...。
多分、これには後から配置したファイルに適切なラベルがされていないためだと思い、設定を変更しました。

[設定した内容]

現状の確認
# ls -Z
-rwxrwxrwx root root root:object_r:lib_t ZendDebugger.so
-rwxr-xr-x root root root:object_r:lib_t ZendOptimizer.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t dbase.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t ldap.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t mbstring.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t mysql.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t mysqli.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t pdo.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t pdo_mysql.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t pdo_sqlite.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t phpcups.so


後からいれたZend・・・.soのラベルが他とは違うことが分かります。

これを他のものにあわすには次のようにします。

# chcon system_u:object_r:textrel_shlib_t ZendDebugger.so
# chcon system_u:object_r:textrel_shlib_t ZendOptimizer.so


できたら確認します。

# ls -Z
-rwxrwxrwx root root system_u:object_r:textrel_shlib_t ZendDebugger.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t ZendOptimizer.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t dbase.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t ldap.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t mbstring.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t mysql.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t mysqli.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t pdo.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t pdo_mysql.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t pdo_sqlite.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t phpcups.so


ラベルが他のものと同じになっていますね。
※後からchmod 755 ZendDebugger.soして、パーミッションも揃えました。

で、OSを再起動して確認したら...ダメでした。
※ダメだったけど、基本的にここのモジュール類のラベルやパーミッションは揃えておいた方がいいと思います。
setroubleshoot ブラウザの表示では、

[要約]
SELinux is preventing httpd (httpd_t) "execstack" to <不明> (httpd_t).
[詳細説明]
SELinux denied access requested by httpd.
It is not expected that this access is required by httpd and this access may signal an intrusion attempt.
It is also possible that the specific version or configuration of the application is causing it to require additional access.

と表示されました。
ちょっと調べた程度だと、まったく意味不明でした。
だって、どのファイルが悪いかを教えてくれないんだもん〜。

ls -R -Z / > a.txt
でラベルがズレてるようなところを探してみましたが、見つからず。
検索しても対策らしきものも見つからない。

これ、どうやったら解決できるんでしょうか...。
仕方なく、私はこの件でSELinuxを諦めることにします。
非常に残念━━(⊃Д`;)━━━!!!!


◆追記◆
諦めたんですが、ダメもとでSELinux Administrationをいじってみたら動きました...。

[そのSELinuxの設定]
メインメニューのシステム→管理→SELinux Management でSELinux Administrationを開き、select:のBooleanを選びます。
※SELinux Managementが存在しない場合はインストールして下さい。(yum -y install policycoreutils-gui)

Filterにhtpdを入れてHTTPD Serviceを選択し、項目を表示させます。
・Disable SELinux Protection for http suexec にチェックを入れる
・Disable SELinux Protection for httpd deamon にチェックを入れる
どちらが効いているのか分かりませんが、どちらもチェックを入れておいたほうが良さげな感じなので入れておきたいと思います。
追加のモジュールが動かなかったり、SELinuxで「SELinux is preventing httpd (httpd_t) "execstack" to <不明> (httpd_t).」とエラーが出るときは試してみて下さい。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(1件)

タイトル (本文) ブログ名/日時
プラダ メンズ
【環境構築3】PHPをインストールする のんき者のシステム開発ノート(ってかメモ)/ウェブリブログ ...続きを見る
プラダ メンズ
2013/07/06 13:37

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
【環境構築3】PHPをインストールする のんき者のシステム開発ノート(ってかメモ)/BIGLOBEウェブリブログ
文字サイズ:       閉じる