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"
〜〜〜(略)〜〜〜〜〜〜〜

前へ

横内愛弓さんが演奏する「カノン (パッヘルベル) Johann Pachelbel Canon」が聴いていて気持ち良い

次へ

Amazon Kindleが国内販売開始されるニュースに複雑な気持ちだが......