FreeBSD+Apache+PHP


PHPのインストールに関してである。
PHPはFreeBSDインストール時にPORTSなどで一緒に入れてしまう事も出来るのだが、コンパイルオプションなどが多岐にわたるために標準の出来上がったバイナリでは欲しい機能が全て入れられるとは限らない。
そこでSourceを入手し、コンパイルしてインストールするという手法を採らざるを得ない。
Sourceを入手したら適当なディレクトリに展開し、普通?のソースの通り./configur
とやるわけだが、ここに面倒なコンパイルオプションを羅列しなければいけない。
ちなみに私が行ったのはこんな感じである。
./configure
--with-apxs=/usr/local/sbin/apxs
--enable-mbstring
--enable-mbregex
--enable-zend-multibyte
--with-mysql=/usr/local/bin/l
--without-pgsql
--enable-calendar
--with-zlib-dir=/usr/local/lib
--with-gd
--with-jpeg-dir=/usr/local/lib
--with-png-dir=/usr/local/lib
--with-freetype-dir=/usr/local/lib
--with-config-file-path=/usr/local/etc' 最初のオプションはApacheとの連携の指定部分だが、Apacheのバージョンが2.xの場合には指定方法が違うので注意する必要がある。
【apache2+SSLの場合】./configure
--with-apxs2=/usr/local/sbin/apxs
--enable-mbstring
--enable-mbregex
--enable-zend-multibyte
--with-mysql=/usr/local/bin/l
--without-pgsql
--with-openssl
--enable-calendar
--with-zlib-dir=/usr/local/lib
--with-gd
--with-jpeg-dir=/usr/local/lib
--with-png-dir=/usr/local/lib
--with-freetype-dir=/usr/local/lib
--with-config-file-path=/usr/local/etc' configureが終わるとMAKEFILEが出来上がるので、mak
make instal
とすればいい。
PHPの設定ファイルであるphp.iniはコンパイルオプションで/usr/local/etcに置くことにしている。
通常はapacheのhttpd.confも自動的に編集されるので問題は無いと思うが、PHPのドキュメントルートなどは個別に設定する必要がある。
php.iniはhttpd.confの設定が完了していれば、apacheを再起動してPHPは動作するようになるはずだ。
設定されている内容などは、HTMLファイルに<?php phpinfo(); ?>
と書いて、それを呼び出せば解る。
これで一応の動作はするはずだが、日本語の文字化けに関しては少々対策が必要である。
PHPは大きなお世話的日本語文字コード自動変換があるのだが、これがうまく動かない、意図したとおりの動きをしてくれない場合が多い。
従ってPHPの文字変換機能を使用せずに、プログラムの方で必要な変換を行った方がよい。
[mbstring]
;language for internal character representation.
mbstring.language = "japanese"
; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
mbstring.internal_encoding = UTF-8 ; http input encoding.
mbstring.http_input = Off
入力文字のコードを指定する部分だが、前述の通り変換は
行わないようにしておく。
; http output encoding. mb_output_handler must be
; registered as output buffer to function
mbstring.http_output = pass
出力文字コードの指定部分。

UTF-8で良ければ指定しても良いと思う。

ただしSJIS出力などのホームページの場合、ここをSJISと
指定することでページの表示は正常に行われるが、フォーム
入力などSJISではない文字列を出力したい場合でもここで
SJISを指定してしまうと何が何でもSJISになってしまう。

なおこの指定はob_start("mb_output_handler")とペアで使
って初めて機能する。
; enable automatic encoding translation according to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note Do _not_ use automatic encoding translation for
; portable libs/applications.
mbstring.encoding_translation = Off
PHPが文字列変換を自動的に行うかどうかの指定で、Off以外
ではおかしな動作をすることが多い。
; automatic encoding detection order.
; auto means
mbstring.detect_order = aut
; substitute_character used when character cannot be converted
; one from another
mbstring.substitute_character = none; PHP内部で扱われている文字コードはUTF-8のようで、プログラム側もこれを意識する必要があると思う。
プログラム側でも文字変換していて、さらにPHP側でもの字変換が行われると何が何だか解らなくなる。
従って出来る限りPHP側では文字コードを変換させないように設定するのが良い。
Directive Local Value Master Value
allow_call_time_pass_reference On On
allow_url_fopen On On
allow_url_include On On
always_populate_raw_post_data Off Off
arg_separator.input & &
arg_separator.output & &
asp_tags Off Off
auto_append_file no value no value
auto_globals_jit On On
auto_prepend_file no value no value
browscap no value no value
default_charset Shift_JIS Shift_JIS
default_mimetype text/html text/html
define_syslog_variables Off Off
detect_unicode On On
disable_classes no value no value
disable_functions no value no value
display_errors On On
display_startup_errors Off Off
doc_root /public_html/ /public_html/
docref_ext no value no value
docref_root no value no value
enable_dl On On
error_append_string no value no value
error_log no value no value
error_prepend_string no value no value
error_reporting 6135 6135
expose_php On On
extension_dir ./ ./
file_uploads On On
highlight.bg #FFFFFF #FFFFFF
highlight.comment #FF8000 #FF8000
highlight.default #0000BB #0000BB
highlight.html #000000 #000000
highlight.keyword #007700 #007700
highlight.string #DD0000 #DD0000
html_errors On On
ignore_repeated_errors Off Off
ignore_repeated_source Off Off
ignore_user_abort Off Off
implicit_flush Off Off
include_path . /usr/local/lib/php . /usr/local/lib/php
log_errors Off Off
log_errors_max_len 1024 1024
magic_quotes_gpc Off Off
magic_quotes_runtime Off Off
magic_quotes_sybase Off Off
mail.force_extra_parameters no value no value
max_execution_time 30 30
max_input_nesting_level 64 64
max_input_time 60 60
memory_limit 128M 128M
open_basedir no value no value
output_buffering no value no value
output_handler no value no value
post_max_size 8M 8M
precision 12 12
realpath_cache_size 16K 16K
realpath_cache_ttl 120 120
register_argc_argv On On
register_globals Off Off
register_long_arrays On On
report_memleaks On On
report_zend_debug On On
safe_mode Off Off
safe_mode_exec_dir no value no value
safe_mode_gid Off Off
safe_mode_include_dir no value no value
sendmail_from no value no value
sendmail_path /usr/sbin/sendmail?-t?-i? /usr/sbin/sendmail?-t?-i?
serialize_precision 100 100
short_open_tag On On
SMTP localhost localhost
smtp_port 25 25
sql.safe_mode Off Off
track_errors Off Off
unserialize_callback_func no value no value
upload_max_filesize 2M 2M
upload_tmp_dir no value no value
user_dir no value no value
variables_order EGPCS EGPCS
xmlrpc_error_number 0 0
xmlrpc_errors Off Off
y2k_compliance On On
zend.ze1_compatibility_mode Off Off

apache

APACHE_INCLUDE no value
APACHE_TARGET no value
Apache Version Apache
Apache Release 10329100
Apache API Version 19990320
Hostname Port www.fnf.jp 80
User/Group www(80)/80
Max Requests Per Child 0 - Keep Alive on - Max Per Connection 100
Timeouts Connection 300 - Keep-Alive 15
Server Root /usr/local
Loaded Modules mod_php5, mod_setenvif, mod_so, mod_unique_id, mod_usertrack, mod_headers, mod_expires, mod_cern_meta, mod_proxy, mod_digest, mod_auth_db, mod_auth_anon, mod_auth, mod_access, mod_rewrite, mod_alias, mod_userdir, mod_speling, mod_actions, mod_imap, mod_asis, mod_cgi, mod_dir, mod_autoindex, mod_include, mod_info, mod_status, mod_negotiation, mod_mime, mod_mime_magic, mod_log_config, mod_env, mod_vhost_alias, mod_mmap_static, http_core