PHPエラー「php_value takes two arguments, PHP Value Modifier」の原因と解決方法
PHPの設定をPHPの設定ファイル(コンフィグファイル)であるphp.iniではなく、httpd.conf、.htaccessなどApache側で設定を変更することがある。
PHPの設定変更を反映するためにApacheの再起動コマンドを実行することになるのだが、
php_value takes two arguments, PHP Value Modifier
といったエラーになり、Apacheの起動に失敗してしまうことがある。
《LinuxでのApache再起動失敗例とエラーメッセージ例》
# /etc/rc.d/init.d/httpd restart
httpd を停止中: [ OK ]
httpd を起動中: Syntax error on line 10 of /etc/httpd/conf.d/testsite.conf:
php_value takes two arguments, PHP Value Modifier
[失敗]
このエラーは、Apache側の設定ファイル(httpd.conf、.htaccess等)でPHPの設定「php_value」を記述する際に、文法上の誤りがあることを示すので、その視点で設定部分を見直すことになる。
例えば、PHPのinclude_pathの設定をApacheのVirtual Host(バーチャルホスト)ごとに設定したいと考え、その設定をApacheのVirtualHostで記述した際に、「include_path」の後ろに「=」(イコール)を付けてしまうと、このエラーになってしまう。この場合、「include_path」の後ろに「=」(イコール)があることがエラーの原因であり、「include_path」の後ろから「=」(イコール)を削除すれば、エラーを解決できる。
《誤った設定例》
# cat /etc/httpd/conf.d/testsite.conf
<VirtualHost 192.168.2.3>
ServerName test.nobuneko.com
DocumentRoot /var/www/testsite
<IfModule mod_php5.c>
php_value include_path = "/php/testsite"
</IfModule>
</VirtualHost>《正しい設定例》
# cat /etc/httpd/conf.d/testsite.conf
<VirtualHost 192.168.2.3>
ServerName test.nobuneko.com
DocumentRoot /var/www/testsite
<IfModule mod_php5.c>
php_value include_path "/php/testsite"
</IfModule>
</VirtualHost>
両者の違いは、「include_path」の後ろに「=」(イコール)があるかどうかだけだ。
PHP側でPHPの設定を変更する場合、つまり、php.iniで設定する場合は、
include_path = "/php/testsite"
といった「=」(イコール)付で設定する必要があるが、ApacheでPHPの設定を変更する場合は、「=」(イコール)を付けるとエラーになってしまう。
この違いは、もう覚えるしかない。
知らないと、「何故、エラーになるのだろう?エラーになる理由が分からない。」と長い時間悩んでしまうことになる。
《参考》PHP 5.1.6(CentOS 5)のphp.iniに記述されているinclude_pathの設定
# cat /etc/php.ini
〜〜〜(略)〜〜〜〜〜〜〜
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"
〜〜〜(略)〜〜〜〜〜〜〜