インストール

  • php-mbstring … マルチバイト文字のサポート
  • php-mysql … MySQLと接続
  • php-gd … 画像を操作

yum によるインストール

# yum -y install php php-gd php-mbstring php-mysql

ソースからインストール (php-mysql付き)

# wget http://jp.php.net/distributions/php-5.3.10.tar.gz
# cd php-5.3.10
# ./configure --with-mysql --with-zlib-dir --enable-mbstring --with-apxs2 --enable-mbregex --enable-zend-multibyte --with-zlib --enable-ftp --with-openssl --enable-shared
# make
# make test
# make install
# cd php-5.3.8
# ./configure --with-mysql
# make
# make test
# make install
# ./configure --with-apxs2 --enable-mbstring --enable-mbregex  --enable-zend-multibyte --with-freetype-dir=/usr --with-png-dir=/usr --with-zlib --with-jpeg-dir=/usr --enable-ftp --disable-short-tags --with-mysql --with-openssl --enable-shared
$ ./configure --with-apxs=/usr/local/apache/bin/apxs \
--with-dom \
--with-zlib-dir \
--enable-mbstring \
--enable-mbstr-enc-trans \
--without-mysql

PHP4のDOMサポート手順 - Do You PHP?

--with-dom、--with-zlib-dirの指定は必須です。
--with-dom=/usr/localとしなくても、configureスクリプトが/usr/lib・/usr/local/libのいずれかのディレクトリにlibxml2が存在するかどうか、判断しているようです

Notice: Following unknown configure options were used:

--with-dom
--enable-mbstr-enc-trans

--disable-dom が入ってなければ問題なし。

configure のオプション一覧

$ ./configure --help

起動と確認

Apache を起動

# service httpd restart

ドキュメントルートに php を置いてみる

<?php
phpinfo();
?>

ブラウザで見て php の情報が表示できてれば OK 。

デフォルト文字コード

/etc/php.ini (or /usr/local/php/lib/php.ini) を編集

default_charset = "UTF-8"

Fatal error: Class 'DomDocument'

# yum -y install php-xml

セッション有効期限

/etc/php.ini

session.gc_maxlifetime = 1440

現在読み込まれているモジュール一覧

php -mで現在読み込まれているextensionが表示されます。

php -iでphpinfoっぽい情報を表示

POSTパラメータ数上限

PHP Warning:  Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini.
# vi /etc/php.ini
[PHP]
…
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
max_input_vars = 5000

_POSTが勝手にエスケープされる

php.ini

magic_quotes_gpc = Off

pdo

# /usr/local/php/bin/pecl install pdo

ビルドエラーが出るときは↓ - PHP :: Bug #59440 ::

[2011-01-24 09:53 UTC] komur at gnu dot gen dot tr

quick resolve

// /usr/include/php5/Zend/zend.h:320  add lines

#define refcount refcount__gc
#define is_ref is_ref__gc

// /usr/include/php5/Zend/zend_API.h:52 add lines

#define object_pp object_ptr

php.iniの場所

phpinfo(); でわかる。

さらに /etc/php.d/*.ini も読み込まれる

php.iniの書き方

[PHP]
hoge = hoge
…

「You are required to use the date.timezone setting or the date_default_timezone_set() function.」

php.ini [Date]

date.timezone = Asia/Tokyo

推奨される設定

allow_url_fopen = Off

基本設定

default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8

; それぞれコメント外し
extension_dir = "C:/Dropbox/bin/@devel/php-5.3.24-Win32-VC9-x86/ext" … ※Windowsでは相対パス指定ができないっぽい
extension=php_mbstring.dll
extension=php_exif.dll      ; Must be after mbstring as it depends on it
extension=php_mysql.dll
extension=php_mysqli.dll

; エラー出力
display_errors = Off    … エラー情報をページに表示するか
log_errors = On         … エラー情報をログに出力するか
error_reporting = E_ALL … どのレベルのエラーまでレポートするか
html_errors = On
; ショートタグを使うなら
short_open_tag = On

; タイムゾーン
[Date]
date.timezone = Asia/Tokyo

; メール送信
[mail function]
sendmail_from = test@thinkpad

※extension_dir を相対パスにした場合は、おそらくApacheのディレクトリからの相対パス扱いになるっぽい
'[PHP-WIN] Re: relative path in extension_dir php.ini directive' - MARC

xdebug.ini

; Enable xdebug extension module
zend_extension=/usr/lib64/php/modules/xdebug.so
xdebug.remote_enable = On
xdebug.remote_host = 127.0.0.1

xdebug.var_display_max_children = -1
xdebug.var_display_max_data = -1
xdebug.var_display_max_depth = -1

xdebug.idekey="php-vs"

xdebug.profiler_enable = On
xdebug.profiler_output_dir = "/var/log/xdebug/" (※xdebugディレクトリはあらかじめ作っておく)
xdebug.remote_log = "/var/log/xdebug/remote.log"

拡張子.phpが実行されていないようにみえるとき

中のソースが丸々見えてしまっている、等。

  • 実はショートタグが使われていないか。(これはデフォルトではOFF)
  • そもそもphpがインストールされてないとか。(php54 だけ install して php54-php を install し忘れてるとか)