PHPのインストール

Red Hat Linuxのページトップへ


PHP(PHP Hypertext Preprocessor)
HTMLファイル内に記述する形式のスクリプト言語
CGIとして使用でき、Perlと比べて処理速度の高速化・サーバー負荷の低減が図れる
データベース(PostgreSQL,MySQL,Oracle,Sybase)との連携に優れている
XML,PDF,IMAP,LDAP等をサポート

CLI(Command Line Interface)版
コマンドラインのスクリプト実行用

DSO(Dynamic Shared Object)版
Apacheのモジュールとして動作する

CGI版
cgiで呼び出す

PHPはセキュリティーホール等が見つかりバージョンアップすると、ついでに関数までいじられてしまうので
バージョンアップした時に問題が出ることがある
これが腕利きのプログラマには嫌われてしまう要因となっているみたいです
(『だったらPHP使わずにJavaを使ったほうがいいじゃん』な意見)
問題が出ないかどうかを確認してからバージョンアップしたいところ

PHP 4.1.1以前 ファイルアップロードにおけるセキュリティホール
PHP 4.2.0, 4.2.1 POST 変数の取り扱いに関するセキュリティホール
PHP 4.3.0 CGI 版にセキュリティホール(CGI 版を使用する場合はPHP 4.3.1以降を使用する)
PHP 4.3.2 セーフモードが正常に動作しない問題&クロスサイトスクリプティング問題が修正されている
PHP 4.3.3,PHP 4.3.4 いくつかのバグが修正されている
PHP 4.3.7 以前の全てのバージョン --enable-memory-limit を有効にしてコンパイルした場合のセキュリティホール
PHP 4.2.3 日本語関連のバグが多い(問題を修正した国際化版 PHP 4.2.3を使用する)
PHP 4.2.x wordwrap() 関数のセキュリティホール・その他の問題
PHP 4.3.10 mktimeで1970年以前の日付を入れると14462となる。
PHPを入手
ダウンロードサイト

主な設定ファイル
/etc/httpd/conf.d/php.conf
/etc/php.ini

libxml2最新版のrpmは”ftp://xmlsoft.org/”で入手可能.

>>> パッケージのアップデート
# rpm -Uvh libxml2-*
警告: libxml2-2.6.11-1.i386.rpm: V3 DSA signature: NOKEY, key ID de95bc1f
Preparing... ########################################### [100%]
1:libxml2 ########################################### [ 33%]
2:libxml2-devel ########################################### [ 67%]
3:libxml2-python ########################################### [100%]

旧バージョンの削除
インストールをする前に旧バージョンを削除する
cd /usr/local/apache/libexec 
rm -f libphp4.so 
cd /usr/local/lib 
rm -fr php* 
PHPのrpmパッケージがインストールされているか確認し、インストールされていたら削除します。
 # rpm -qa | grep php
 php-4.2.2-8.0.5
 php-imap-4.2.2-8.0.5
 php-ldap-4.2.2-8.0.5
 php-pgsql-4.2.2-8.0.5
 # rpm -qa | grep php | xargs rpm -e

PHPのmake に必要なrpmパッケージのインストール 
rpm -i httpd-devel-2.0.40-21.3.i386.rpm
rpm -i postgresql-devel-7.3.2-3.i386.rpm
rpm -i libpng-devel-1.2.2-16.i386.rpm
rpm -i libjpeg-devel-6b-26.i386.rpm
rpm -i freetype-devel-2.1.3-6.i386.rpm


ダウンロードしたPHPのソースファイルを/usr/local/srcディレクトリに展開します。
ソースファイルは、FTPで適当なディレクトリにあらかじめアップしておきます。

#cd /usr/local/src
#tar zxf /ソースファイルのディレクトリ/php-4.3.4.tar.gz  

展開したPHPのソースディレクトリに移動します。 
#cd /usr/local/src/php-4.3.4  

環境によってMySQL関係でconfigureがうまくいかないことがあるらしい
MySQLをインストールして、シンボリックリンクを張っておくことで回避する
# ln -s /usr/include/mysql /usr/mysql

apxがインストールされている場所を確認する
#locate apxs


環境に合わせた設定を行う為、configureスクリプトを使います。
※実際は改行せずに入力します。 
#./configure --enable-mbstring --enable-mbstr-enc-trans
--with-pgsql=/usr/local/pgsql --with-mysql=/usr/local/mysql --enable-track-vars
--with-apxs2=/usr/local/apache2/bin/apxs --without-gd --enable-trans-sid  
# ./configure --with-apxs2filter=/usr/sbin/apxs --enable-mbstring --enable-mbregex --enable-zend-multibyte --with-gd --enable-gd-native-ttf --with-freetype-dir=/usr --with-png-dir=/usr --with-zlib --with-jpeg-dir=/usr --with-pgsql=/usr --with-mysql=/usr
データベースが不要であれば、さらに次を追記 --without-pgsql --without-mysql
 $ ./configure \
  --with-apxs2=/usr/local/apache2/bin/apxs \
  --enable-mbstring \
  --enable-mbregex \
  --enable-zend-multibyte \
  --with-gd \
  --enable-gd-native-ttf \
  --with-freetype-dir=/usr \
  --with-png-dir=/usr \
  --with-zlib \
  --with-jpeg-dir=/usr \
  --with-pgsql=/usr \
  --with-mysql=/usr
./configure --helpでオプションは確認できる
configureのオプション
--with-apxs2=/usr/local/apache2/bin/apxs (Apache 2.0DSO用。オプションで、Apache apxsツールへのパス名を指定) 
--enable-mbstring (マルチバイト文字列のサポートを有効) 
--enable-mbregex (マルチバイト正規表現のサポートを有効) 
--enable-zend-multibyte (PHPスクリプトがShift_JISで記述可能になる) 
--with-gd (GDサポートを追加) 
--enable-gd-native-ttf (TrueType文字列関数をgdで使用可能にする) 
--with-freetype-dir=/usr (freetype2インストール接頭辞にパスを設定) 
--with-png-dir=/usr (libpngインストール接頭辞にパスを設定) 
--with-zlib (PNGで使用) 
--with-jpeg-dir=/usr (libjpegインストール接頭辞にパスを設定) 
--with-pgsql=/usr (PostgresSQLサポートを有効。PostgresSQLベースインストー ルディレクトリを指定) 
--with-mysql=/usr (MySQLサポートを有効。MySQLベースインストールディレクトリへのシンボリックリンクを指定) 

マルチバイト文字列の自動変換機能を有効にする--enable-mbstr-enc-trans は、PHP 4.2.x では有効ですが、
PHP 4.3.0 以降では、--enable-mbstr-enc-trans は指定しても無効になってしまうそうですので指定する必要はありません
自動変換機能が必要な場合は、php.ini の中で以下のように指定します
mbstring.encoding_translation = On

my-configure.shを編集してconfigureしてもよい
gedit my-configure.sh
chmod 755 my-configure.sh
./my-configure.sh

PHP5
php5には、libxml2 が必要なので、インストールしておくこと。

# vi /etc/apt/source.list

以下の行を追加
deb http://www.backports.org/debian stable libxml2

# apt-get update
# apt-get install libxml2

tar jxvf php-5.x.x.tar.bz2
./configure \
--disable-libxml \
--enable-bcmath \
--enable-calendar \
--enable-dio \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-yp \
--enable-zend-multibyte \
--prefix=/usr \
--with-apxs \
--with-bz2 \
--with-config-file-path=/etc \
--with-gettext \
--with-libmbfl \
--with-mime-magic \
--with-mod_charset \
--with-mysql=/usr \
--with-ncurses \
--with-gd --with-jpeg-dir=/usr --with-zlib-dir=/usr --with-freetype-dir=/usr \
--enable-gd-jis-conv \
--enable-gd-native-ttf \
--with-t1lib \
--with-ttf \
--with-imap \
--with-imap-ssl \
--with-ldap \
--enable-sqlite-utf8 \
--with-pgsql \
--enable-dba \
--with-db3 \
--with-dbm \
--with-flatfile \
--with-gdbm \
--with-inifile \
--with-ndbm













ログを見る場合
./my-configure.sh &> my-configure.log &
tail -f my-configure.log
configure が終了したら [Ctrl]+C で tail を終了させる

    
項目 オプション 備考 関連rpm
DSO版 --with-apxs2filter=/usr/sbin/apxs Apache 2.0.40以上 (RedHat Linux 8.0, 9.0はこちら) httpd-devel
--with-apxs=/usr/sbin/apxs Apache 1.3.x (RedHat Linux 7.3はこちら) httpd-devel
--with-apxs2=/usr/sbin/apxs Apache 2.0.44以上  
CLI 版   PHP 4.3.0以降常に構築されるので指定不要  
イメージ関数 --with-gd 画像処理ライブラリ(GD) PHP 4.3.0以降にバンドル  
--enable-gd-native-ttf TrueType文字列関数 ImageString( )で英数字を描画  
--with-freetype-dir=/usr FreeType2 ImageTTFText( )で日本語を描画 freetype-devel
--with-png-dir=/usr PNG libpng-devel
--with-zlib PNGで使用  
--with-jpeg-dir=/usr JPEG libjpeg-devel
--enable-exif Exif exif_thumbnail( )でJPEGからサムネイルを取得  
マルチバイト関数 --enable-mbstring    
--enable-mbregex マルチバイトの正規表現  
国際化版 --enable-zend-multibyte PHPスクリプトがShift_JISで記述可能になる  
PostgreSQL --with-pgsql=/usr   postgresql-devel
MySQL --without-mysql MySQLが不要な場合は指定する  
# make ext/mysq/libmysql/my_tempnam.cの103行目でエラーが出るときは 103行目を以下のように編集 res=tempnam((char*) dir,(my_string) pfx); /* Use stand. dir with prefix */ ↓ res=mkstemp((char*) dir); /* Use stand. dir with prefix */ またはMySQLに最新のものを使えば解消される ソースをコンパイルし、インストールします。 CLI版 make install-cli DSO版 make install-sapi 両方 $ make install PHPの設定ファイルを作成します。 「php.ini-dist」というファイルを「php.ini」にリネームし、/usr/local/libにコピーします。 作成しなくともデフォルト状態で動作しますが、細かい設定を行う場合必要になります。 # cp php.ini-dist /usr/local/lib/php.ini (# cp php.ini-recommended /usr/local/lib/php.ini) php.iniの設定 register_globals = Off をOnに変更 default_charset = "EUC-JP" を "shift_jis"に変更 mbstring.language = Japanese mbstring.internal_encoding = SJIS mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On apacheの設定 Apacheの再コンパイル ./configure時に「--enable-so」オプションをつけて再コンパイルする httpd.confの設定 LoadModule php4_module libexec/libphp4.so DirectoryIndex index.html index.php コメントを外す AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps # cp /usr/local/src/php-4.3.8/php.ini-dist /usr/local/lib/php.ini ログ設定 インストールも完了し、php.iniも作成しました。 register_globalsのところを変更します。 変更前 register_globals = Off 変更後 register_globals = On mbstringのところを変更します。コメント記号( ; )を外します。 変更前 [mbstring] ;mbstring.language = Japanese ;mbstring.internal_encoding = EUC-JP ;mbstring.http_input = auto ;mbstring.http_output = SJIS ;mbstring.encoding_translation = Off ;mbstring.detect_order = auto ;mbstring.substitute_character = none; 変更後 [mbstring] mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; 透過的にセッション IDを付加する設定をします。 変更前 session.use_trans_sid = 0 変更後 session.use_trans_sid = 1 メール送信されない時、sendmail_path の記述を入れることで解決した。 変更前 [mail function] ;SMTP = localhost ;sendmail_from = me@localhost.com ;sendmail_path = 変更後 [mail function] ;SMTP = localhost ;sendmail_from = me@localhost.com sendmail_path = /usr/sbin/sendmail -t sql_safe_mode = On; にすると、外部のMySQLが操作できなくなる。 最後にphp.iniにエラーログを吐き出すための設定を施しておきます。 # cd /usr/local/lib/php.ini # vi php.ini 以下の項目がこのようになっているかチェックし、なっていなければ修正します。 error_reporting = E_ALL & ~E_NOTICE display_startup_errors = Off display_errors = Off log_errors = On error_log = /var/log/php ;error_log = syslog 各項目の意味は、上から順番に以下のとおりです。 notice以外をログとして出力する PHPスタートアップ時のエラーを表示しない エラーを画面に表示しない エラーログを出力する エラーログは/var/log/phpである ※nobodyユーザに書き込み権限があるか要確認 syslogにログを残さない php.iniの設定の概要 output_buffering = On : 出力バッファリングを有効 output_handler = mb_output_handler : 出力の変換を有効にするためにmb_output_handlerを指定 default_charset = Shift_JIS : PHPがContent-type:ヘッダで character encodingを出力するコードを指定 session.save_path = /tmp/php : セッションのデータが保存されるディレクトリ mbstring.language = Japanese : mbstringで使用される言語のデフォルト値 mbstring.internal_encoding = EUC-JP : 内部文字エンコーディングのデフォルト値 mbstring.http_input = auto : HTTP入力文字エンコーディングのデフォルト値 mbstring.http_output = SJIS : HTTP出力文字エンコーディングのデフォルト値 mbstring.encoding_translation = On : HTTP入力文字エンコーディング検出および内部文字エンコーディングへの変換 mbstring.detect_order = auto : 文字コード検出のデフォルト値 mbstring.substitute_character = none; : 無効な文字を代替する文字 mbstring.script_encoding = auto : PHPスクリプトのエンコーディングを指定(ASCII,JIS,UTF-8,EUC-JP,SJISに展開) テスト CLI 版 php -v PHP 4.3.3 (cli) (built: Aug 28 2003 17:03:34) Copyright (c) 1997-2003 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies が表示されればOKです。 DSO版 vi /var/www/html/phpinfo.php <?php phpinfo(); ?> WWWブラウザからスクリプトを表示できればOKです。 http://yourhost/phpinfo.php Linux
Script
mbstring.internal_encoding
Shift_JISEUC
ブラウザ
mbstring.http_output
Shift_JISEUCShift_JISEUC
output_buffering =
94行目付近
OffOnOnOff
output_handler =
106行目付近
mb_output_handlermb_output_handler
magic_quotes_gpc =
382行目付近
OffOffOffOff
default_charset =
400行目付近
Shift_JISEUC-JPShift_JISEUC-JP
mbstring.language =
1044行目付近
Japanese
mbstring.internal_encoding =
1046行目付近
SJISSJISEUC-JPEUC-JP
mbstring.http_input =
1052行目付近
autoautoautoauto
mbstring.http_output =
1056行目付近
SJISEUC-JPSJISEUC-JP
mbstring.encoding_translation =
1063行目付近
OnOnOnOn
mbstring.detect_order =
1067行目付近
autoautoautoauto
mbstring.substitute_character =
nonenonenonenone
Windows
Script
mbstring.internal_encoding
Shift_JISEUC
ブラウザ
mbstring.http_output
Shift_JISEUCShift_JISEUC
output_buffering =OffOnOnOff
output_handler =mb_output_handlermb_output_handler
magic_quotes_gpc =OffOffOffOff
default_charset =Shift_JISEUC-JPShift_JISEUC-JP
extension_dir =C:/php/extensionsC:/php/extensionsC:/php/extensionsC:/php/extensions
extension =php_mbstring.dllphp_mbstring.dllphp_mbstring.dllphp_mbstring.dll
mbstring.language =Japanese
mbstring.internal_encoding =SJISSJISEUC-JPEUC-JP
mbstring.http_input =autoautoautoauto
mbstring.http_output =SJISEUC-JPSJISEUC-JP
mbstring.encoding_translation =OnOnOnOn
mbstring.detect_order =autoautoautoauto
mbstring.substitute_character =nonenonenonenone
PHPお勧めツール FAQ・掲示板等の用途にPukiWiki

ぺんたん.info
あかいひ.com
IPくん.com
8枠.com - 競馬情報
galhime.com

PC Q&A||古い記事|雑学|ラーメン