トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

PHP

PHP5

ThinkIT PHP5のオブジェクト指向
http://www.thinkit.co.jp/free/marugoto/1/1/1/1.html

ソースからのインストール

php-4.4.2をソースからインストールする。

#./configure \
--prefix=/usr/local/php4 \
--without-pgsql \
--with-mysql=/usr/local/mysql \
--with-apxs=/usr/local/apache/bin/apxs \
--enable-track-vars \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--with-gd \
--with-freetype-dir=/usr/lib \
--with-jpeg-dir=/usr/lib \
--with-png-dir=/usr/lib \
--with-zlib-dir=/usr/lib \
--enable-gd-native-ttf \
--enable-gd-jis-conv

足らなかったパッケージはyumでインストール。

# yum install libjpeg-devel \
 libpng-devel \
 freetype-devel \
 flex \
 bison

configure中にbisonは1.28推奨と警告がでるが、パッケージには2.0-6しかなかったのでそのまま続行(汗)。

makeとmake install。時間は30分ぐらい。

# make
# make install

phpの解凍フォルダよりiniのコピー。

# cp /usr/local/src/php-4.4.2/php.ini-dist /usr/local/php4/lib/php.ini
# vi /usr/local/php4/lib/php.ini

mbstring関係のセミコロンを外す。
つづいてhttpd.confの設定。

LoadModule php4_module libexec/libphp4.so
AddType application/x-httpd-php .php

DirectoryIndex index.html index.cgi index.php

apacheの再起動。

#/usr/local/apache/bin/apachectl restart

phpの情報をphpinfo()で確認し、mbstring、mysql、gdのあたりが設定されているか確認する。

php-4.4.4

うちの環境では

/usr/local/apache2
/usr/local/mysql5

php-4.4.2をソースからインストールする。

# cd /usr/local/src
# wget http://www.php.net/get/php-4.4.4.tar.gz/from/jp2.php.net/mirror
# chmod 755 php-4.4.4.tar.gz
# tar -zxvf php-4.4.4.tar.gz
# ./configure \
 --prefix=/usr/local/php444 \
 --without-pgsql \
 --with-mysql=/usr/local/mysql5 \
 --with-apxs2=/usr/local/apache2/bin/apxs \
 --enable-track-vars \
 --enable-mbstring \
 --enable-mbregex \
 --enable-zend-multibyte \
 --with-gd \
 --with-freetype-dir=/usr/lib \
 --with-jpeg-dir=/usr/lib \
 --with-png-dir=/usr/lib \
 --with-zlib-dir=/usr/lib \
 --enable-gd-native-ttf \
 --enable-gd-jis-conv
 make
 make install

したあとに、httpd.confに勝手に

LoadModule php4_module libexec/libphp4.so

が記述される。
すでにこの記述がある場合は二重になってしまうので、チェックして削除する。

php-5.2.0

libxml2が必要。FedoraCore4ではlibxml2自体はrpmパッケージでインストールされているが、libxml2-develが入っていないためconfigureで失敗する。
さきにyumでlibxml2-develをインストールしておくこと。

# ./configure \
 --prefix=/usr/local/php520 \ 
 --without-pgsql \ 
 --with-mysql=/usr/local/mysql \
 --with-apxs2=/usr/local/apache/bin/apxs \
 --enable-mbstring \
 --enable-zend-multibyte \
 --with-gd \
 --with-freetype-dir=/usr/lib \
 --with-jpeg-dir=/usr/lib \
 --with-png-dir=/usr/lib \
 --with-zlib-dir=/usr/lib \
 --enable-gd-native-ttf \
 --enable-gd-jis-conv \
 --enable-sqlite-utf8 \
 --enable-memory-limit \
 --with-mysqli=/usr/local/mysql/bin/mysql_config

configureの最後にワーニング表示がでている場合は、どこかタイプミスしている。

--enable-track-varsは無い?みたい。sqliteはデフォで組み込まれる模様。ただしutf-8に対応させるのは別途指定。

PHP-5.2.1

PHP-5.2.0には結構バグがあるみたいでupdateする。memory-limitは早い段階で呼び出さないといけないみたいなので記述の順番を変更。

# ./configure \
 --prefix=/usr/local/php521 \
 --enable-memory-limit \
 --with-apxs2=/usr/local/apache/bin/apxs \
 --without-pgsql \
 --with-mysql=/usr/local/mysql \
 --with-mysqli=/usr/local/mysql/bin/mysql_config \
 --enable-mbstring \
 --enable-zend-multibyte \
 --with-gd \
 --with-freetype-dir=/usr/lib \
 --with-jpeg-dir=/usr/lib \
 --with-png-dir=/usr/lib \
 --with-zlib-dir=/ur/lib \
 --enable-gd-native-ttf \
 --enable-gd-jis-conv \
 --enable-sqlite-utf8

configureで↓のようなワーニングが出た。

configure: warning: You will need re2c 0.9.11 or later if you want to regenerate PHP parsers.
configure: warning: lemon versions supported for regeneration of libsqlite parsers: 1.0 (found: none).

5.2.0のときも出ていたのかは不明。
とりあえずそのままmakeもできて、make installしようとすると

# make install
  Installing PHP SAPI module:       apache2handler
  /usr/local/apache224/build/instdso.sh SH_LIBTOOL='/usr/local/apr224/build-1/libtool' libphp5.la /usr/local/apache224/modules
  /usr/local/apr224/build-1/libtool --mode=install cp libphp5.la /usr/local/apache224/modules/
  cp .libs/libphp5.a /usr/local/apache224/modules/libphp5.a
  cp .libs/libphp5.lai /usr/local/apache224/modules/libphp5.la
  libtool: install: warning: remember to run `libtool --finish /usr/local/src/php-5.2.1/libs'
  chmod 755 /usr/local/apache224/modules/libphp5.so

まできてlibphp5.soがnot foundで止まってしまう。
たにかに/usr/local/apache/modulesにはlibphp5.aとlibphp5.laがあるのみ。

ググったところ、re2cは実際にはgccに含まれるため特に必要はないことと、lemonはlibsqliteに関するものなのでlibphp5.soには関係なさそうだった。
そもそもワーニングだし。

↓を参考にre2cとlemonを入れることにした。

Web、只今勉強中
http://d.hatena.ne.jp/kazukichop/comment?date=20061120
wget http://nchc.dl.sourceforge.net/sourceforge/re2c/re2c-0.11.0.tar.gz
tar xfz re2c-0.11.0.tar.gz 
cd re2c-0.11.0
./configure
make
make install
wget http://www.sqlite.org/cvstrac/getfile/sqlite/tool/lemon.c
gcc -o lemon lemon.c 
mv lemon /usr/local/bin

configureではワーニングがでなくなり、makeも完了。
そしてmake installでは... やっぱりlibphp5.soが作れてない(汗)。

で結局のところ、make cleanしてmakeしてmake installしていたんですが、make distcleanしてmakeしてmake installしたらよくなった模様?
make cleanではなにか残骸?が消えていなかったのか...

PHP-5.2.6

5.2.1と同じだが、--enable-memory-limitがデフォルトで有効になっているため必要なくなった。
というか、指定するとconfigureでエラーになる。

# ./configure \
--prefix=/usr/local/php526 \
--with-apxs2=/usr/local/apache/bin/apxs \
--without-pgsql \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql \
--enable-mbstring \
--enable-zend-multibyte \
--with-gd \
--with-freetype-dir=/usr/lib \
--with-jpeg-dir=/usr/lib \
--with-png-dir=/usr/lib \
--with-zlib-dir=/ur/lib \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--enable-sqlite-utf8 \
--with-pdo-sqlite

--enable-zend-multibyteでコンパイルしたPHPならスクリプトがUTF-8のBOMありでもOK

PHP-5.4.4

ひさびさに、最新版ソースからテスト。

/rootにダウンロードしたら、解凍し、ディレクトリに入る。

# tar zxvfp php-5.4.4.tar.gz
# cd php-5.4.4

あまりにご無沙汰なので、まずはprefixとwith-apxs2だけ指定して、デフォルトの設定がどうなるのかチェックしてみる。

# ./configure \
--prefix=/usr/local/php544 \
--with-apxs2=/usr/sbin/apxs \

早速エラー(汗)。足りないものをyumでインストール。

yum install libxml2-devel httpd-devel

この頃はず〜っとyum(rpm)でインストールしてたので、ソースのコンパイルではdevel系のパッケージが必要なことを忘れてました(汗)。

で、晴れて

make

数十分かかる。
make installする前に、現行のlibphp5.soが上書きされるので、バックアップしといたほうがいいかも。

よければ

make install

これにより、アパッチの設定ファイル

/etc/httpd/conf/httpd.conf

には、

LoadModule php5_module /usr/lib/httpd/modules/libphp5.so

が書き加えられるが、先にインストールしていたrpmのphp設定が

/etc/httpd/conf.d/php.conf

にあり、こちらと重なるのでhttpd.conf側はコメントアウト。

php.iniは勝手に用意されないので、ソースを解凍した中にあるphp.ini-developmentもしくはphp.ini-productionのいずれかを選んで/usr/local/php544/libに配置。

# cd php-5.4.4
cp php.ini-production /usr/local/php544/lib/php.ini

みたいにしてhttpdを再起動、その後phpinfoを確認してみる。

で、話を最初に戻して、prefixとwith-apxs2だけのphpinfoは

Configuration File (php.ini) Path /usr/local/php544/lib
apache2handler
ctype
date
dom
ereg
fileinfo
filter
hash
iconv
json
libxml
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter

みたいな感じ。

mbstringやgd、MySQLはやっぱり見当たらず。改めてconfigureからやり直しね。
php.iniの配置は/etcになるようにする。

# ./configure \
> --prefix=/usr/local/php544 \
> --with-apxs2=/usr/sbin/apxs \
> --with-config-file-path=/etc
> --with-mysql \
> --with-mysqli \
> --with-pdo-mysql \
> --enable-mbstring \
> --enable-zend-multibyte \
> --with-gd \
> --with-freetype-dir \
> --with-jpeg-dir \
> --with-png-dir \
> --with-zlib-dir \
> --enable-gd-native-ttf \
> --enable-gd-jis-conv \
> --enable-sqlite-utf8 \

jpeglib.hが無いと出たので

# yum install libjpeg-devel

png.hが無いと出たので

# yum install libpng-devel

freetype.hが無いと出たので

# yum install freetype-devel

configureは終わったが、最後にワーニングが出た。

configure: WARNING: unrecognized options: --enable-zend-multibyte,
--enable-sqlite-utf8

enable-zend-multibyteはPHP5.4より標準で利用可能、php.iniで

zend.multibyte = On

とすると利用できるそうな。

enable-sqlite-utf8は

PHP マニュアル - sqlite_libencoding
http://uk.php.net/manual/ja/function.sqlite-libencoding.php

で変更になったみたい。「UTF-8マルチバイト文字は現在は正しく動かないから外す」ってことかな?

終わったら、

# make clean
# make
# make install

あとは最初にやったときと同じくhttpd.confを修正し、

/etc/init.d/httpd restart

phpinfo()で追加した分が確認できればOK。
dateでワーニングが出ている場合はphp.iniで

date.timezone = Asia/Tokyo

PHP-5.4.13

Fedora12にPHP-5.4.13を入れようとしたときの記録。

ppc(mac mini G4)を正式にサポートしているのはFedoraの場合、Fedora12までらしい。
で、Fedora12だとphpのrpmがphp-5.3.3で、ZendFramework2は5.3.4以降じゃないとlocaleでエラーがでた。

ということでFedora12に、PHP最新版をソースからインストールするわけだが、例によって

# wget http://www.php.net/get/php-5.4.13.tar.gz/from/jp1.php.net/mirror
# tar zxvfp php-5.4.13.tar.gz
# cd php-5.4.13
# ./configure .....略

みたいな感じで、まずはワーニングとかエラーを確認しながらmakeに必要なパッケージをインストールしていく。

その中でFedora12のパッケージだとバージョンが低くてダメだったのが↓のヤツ。

re2c scanner generator
http://sourceforge.jp/projects/sfnet_re2c/

rpmのほうが無難?な気がするのでsrc.rpmをゲットし、リビルドすることに。

# rpmbuild --rebuild re2c-0.13.5-1.src.rpm
RPM build errors:
    user marcus does not exist - using root
    group marcus does not exist - using root
    user marcus does not exist - using root
    group devel does not exist - using root
    Bad exit status from /var/tmp/rpm-tmp.UdPR0t (%build)

ユーザーとグループを追加しないとリビルドできないみたい。

# useradd -M -s /sbin/nologin marcus
# groupadd devel

気を取り直して

# rpmbuild --rebuild re2c-0.13.5-1.src.rpm

やっぱりエラー。
どうやらgccとかがそもそも入ってないっぽい(汗)。『gccとかって何が必要?』と考えるのもメドイのでグループインストールをかます。

# yum groupinstall "Development tools"

もういっちょトライ。

# rpmbuild --rebuild re2c-0.13.5-1.src.rpm

今度は無事にコンパイルできた。
カレントディレクトリにrpmbuildが出来ているので

# cd rpmbuild/RPMS/ppc
# rpm -Uvh re2c-0.13.5-1.ppc.rpm

改めてphpのディレクトリに戻りconfitureを試す。

# ./configure \
> --prefix=/usr/local/php-5.4.13 \
> --with-apxs2=/usr/sbin/apxs \
> --with-config-file-path=/etc \
> --with-mysql \
> --with-mysqli \
> --with-pdo-mysql \
> --enable-mbstring \
> --enable-zend-multibyte \
> --with-gd \
> --with-freetype-dir \
> --with-jpeg-dir \
> --with-png-dir \
> --with-zlib-dir \
> --enable-gd-native-ttf \
> --enable-gd-jis-conv \
> --enable-sqlite-utf8

php-5.4.4のときに試した--enable-zend-multibyteと--enable-sqlite-utf8は、組み込んでみたがワーニングは出ない模様。効いているんだかいないんだかまではチェックしてません(汗)。

とりあえずOKそうなので

# make clean
# make
# make install

みたいな。

いままで気にしたことなかった(気づいてなかっただけ?)けど、make install中の表示の中に

libtool: install: warning: remember to run `libtool --finish /root/php-5.4.13/libs'

ってのがあったので、とりあえずやっといた。

# libtool --finish /root/php-5.4.13/libs

phpが無事インストールされればhttpd.confにloadModuleが追加されているので、その下にAddTypeを追記しておく。

LoadModule php5_module        /usr/lib/httpd/modules/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

httpdを再起動し、phpinfo()で状態をチェックできればOKと思う。
makeやbuildの残骸は、必要無ければ削除しておく。

# rm -rf php-5.4.13
# rm -rf rpmbuild
# userdel marcus
# groupdel devel

PHP-5.5.0

いつのまにやら5.5.0ですね。Fedora12〜5.4.13のときの準備でそのままコンパイルできた。

# wget http://jp1.php.net/get/php-5.5.0.tar.gz/from/this/mirror
# tar zxvfp php-5.5.0.tar.gz
# cd php-5.5.0
# ./configure \
> --prefix=/usr/local/php-5.5.0 \
> --with-apxs2=/usr/sbin/apxs \
> --with-config-file-path=/etc \
> --with-mysql \
> --with-mysqli \
> --with-pdo-mysql \
> --enable-mbstring \
> --with-gd \
> --with-freetype-dir \
> --with-jpeg-dir \
> --with-png-dir \
> --with-zlib-dir \
> --enable-gd-native-ttf \
> --enable-gd-jis-conv \

php-5.5.0で--enable-zend-multibyteと--enable-sqlite-utf8は、有効となっている模様。

# make
# make test
# make install
# libtool --finish /root/php-5.5.0/libs

make testしたらPEAR系で「バージョン古いよ」警告がちらほら。とりあえず、いまは無視。シンボリックリンクを直す。

# ln -sf /usr/local/php-5.5.0/bin/* /usr/bin

コンソール、またはphpinfo()で切り替わったのを確認しる。

# php -v
PHP 5.5.0 (cli) (built: Jul  1 2013 07:25:59)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0-dev, Copyright (c) 1998-2013 Zend Technologies

php.iniの設定

[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.func_overload = 0

スクリプト内部で下記のように設定することも可能。
ただし、ini_setでは設定できないものもある。

mb_language('Japanese');
ini_set('mbstring.detect_order', 'auto');
ini_set('mbstring.http_input'  , 'auto');
ini_set('mbstring.http_output' , 'pass');
ini_set('mbstring.internal_encoding', 'UTF-8');
ini_set('mbstring.script_encoding'  , 'UTF-8');
ini_set('mbstring.substitute_character', 'none');
mb_regex_encoding('UTF-8');

.htaccessで指定する場合は

php_value mbstring.language Japanese
php_value mbstring.http_input EUC-JP
php_value mbstring.http_output EUC-JP
php_flag auto_detect_line_endings on
php_value output_handler mb_output_handler
php_value default_charset EUC-JP
php_value mbstring.internal_encoding EUC-JP
php_flag mbstring.encoding_translation off
php_value mbstring.detect_order auto
php_value mbstring.substitute_character none
php_flag magic_quotes_gpc off

値に対してはphp_valueで、On、Offに対してはphp_flagを使用するらしい。

文字コードの指定は

UTF-8
EUC-JP
SJIS
ISO-2022-JP(日本語メール)

 mbstring.internal_encoding

内部エンコーディングの設定。PHPの内部で文字データを扱う際の文字コードを設定しておく。
データベースと連携する場合、データベースと同じ文字コードにしておくと、いちいち変換処理をする必要がなくなる。
Shift-JISには問題点があるので、内部エンコーディングにはEUC-JPかUTF-8を使用するようにする。

mbstring.internal_encoding = EUC-JP

 mbstring.script_encoding

PHPスクリプトの文字コードを設定する。
この設定がない場合はmbstring.internal_encodingの設定が利用される。

mbstring.script_encoding = EUC-JP

 mbstring.encoding_translation

古いバージョンのブラウザでは常にShift-JISでデータを送信してくるブラウザもある。
mbstring.encoding_translationがonならば、Webサーバが受け取るデータ(入力データ)を自動判別し、内部エンコーディングに変換する。

mbstring.encoding_translation = On

参考

マルチバイト文字列関数
http://www.php.net/manual/ja/ref.mbstring.php

PHPを実行するディレクトリを制限する

phpの初期設定のままでは、どのディレクトリにphpを置いても実行してしまうので、
制限する方法。

Apacheモジュールとしてインストール
http://php.planetmirror.com/manual/ja/security.apache.php
open_basedir
http://php.planetmirror.com/manual/ja/features.safe-mode.php#ini.open-basedir

phpの設定

  1. php.ini
  2. httpd.conf
  3. .htaccess
  4. Windowsレジストリ
  5. PHPのini_set()
定数設定可能
PHP_INI_ALL1〜5
PHP_INI_PERDIR1〜3
PHP_INI_SYSTEM1〜2
php.ini ディレクティブ - Manual
http://jp.php.net/manual/ja/ini.php

サーバモジュール版ではWebサーバの起動時に読み込まれる。
CGI版ではスクリプトが実行される度に読み込まれる。

実行時設定
http://jp.php.net/manual/ja/configuration.php

 php.iniの記述

ディレクティブ名=設定値

 httpd.confまたは.htaccessの記述

php_value ディレクティブ名 値
php_flag ディレクティブ名 on/off

PHP資料

PHP:Hypertext Preprocessro
http://jp.php.net/
PHP マニュアル
http://jp.php.net/manual/ja/