失敗!PHPをcgiモードで動かそうとしたら

PHPをcgiモードで動かそうとしたら見事に失敗しました。現在はcgiモードではないですがその記録です。

CGIモードにしようと思った理由

CGIモードで動かそうと思ったのはwordpressの自動アップデートにあります。ヘテムルロリポップなどの共用サーバーはwordpresのプラグインや自動更新などをFTP情報を記憶しておくだけで更新できます。僕が自分で構築したサーバーはそれができません。CGIモードなどにしたらできるかなという安易な考えで行おうとしました。

環境

  • Apache:2.2.22
  • PHP:5.3.10

Apacheがモジュール版が動いているかはphpinfoで確認してください。バージョンなどもわかると思います。

php.confファイルの確認

php.confファイルの確認をします。

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#

LoadModule php5_module modules/libphp5.so

#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php

#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps

デフォルトの設定になっていると思います

CGIモードへ切り替える

CGIモードへ切り替えるには上の12-15行目を変更します。

AddHandler php5-script .php
AddType text/html .php
変更
↓
Action php53-cgi /cgi-bin/php53
AddHandler php53-cgi .php .phps

 

cd /var/www/cgi-bin
ln -s /usr/bin/php-cgi php52

/cgi-bin/php53 という実行ファイルを実行する名前をphp53-cgiと定義したものです。 このため、apacheのカレントディレクトリから/cgi-bin/php53という実行ファイルが存在しないといけません。

httpd.confを確認

Apacheの設定ファイルを確認します

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

<Directory "/var/www/cgi-bin">
    AllowOverride None
#    Options None
    Options FollowSymLinks
    Order allow,deny
    Allow from all

Optionsを変更します。また、バーチャルドメインを使っている場合はバーチャルドメインの設定も変更します。


	ServerName example.com
	DocumentRoot "/home/example"
	ServerAlias www.example.com
	<Directory "/home/example">
		Options FollowSymLinks Includes ExecCGI
		AllowOverride None
		Order allow,deny
		Allow from all

終わりましたらアパッチをリスタートします。

失敗談

Apacheを再起動後、確認をしたのですが、管理画面などのPHPが動いていませんでした。サイトは見れるのですがwordpressにログインできなくなりました。Optionsを変更したら管理画面にはログインしたりいじれたりできましたが今度はサイトがトップページ以外みれなくなりました。

結局CGIモードではなく現在はモジュール版で動かしていますがちょっと難しかったです。

追記

サーバーを新しくしたら見事に上記のやり方でうまくいきました。現在logwはphpをcgiモードで動かしています