なんで PHP は CGI と違って実行権限がなくても動くの?
Perl や Python を CGI として動かしたい場合、パーミッションを 755 とかにして実行権限を付けないといけない。しかし、PHP ファイルは 644 と実行権限を付与していなくても動作する。コレはなぜか。
この挙動は、以前調べた「シェルスクリプトファイルに実行権限を付与する必要性」に近い理由によるモノだった。
Perl や Python、Ruby などは、CGI という仕組みを通じて、ファイルそのものが直接実行されている。ターミナルで表現するなら、
$ ./example.cgi
$ ./example.pl
というように、コマンドを指定せず直接実行しているのと同じワケだ。だから1行目の #!/usr/bin/perl
などというシバンが重要になってくるし、実行権限が必要になる。おさらいになるが、ココで拡張子はあまり関係ない。CGI として扱うことにする拡張子は設定で取り決められるものの、「.pl
だから中身は Perl で動かすぞ!」というような判断には使われていないのである。
一方 PHP は、かつては CGI として動かす仕組みもあったようだが、現在はちょっと異なる仕組みで動いている。PHP だけは、Apache や nginx などのサーバに追加したモジュールが代わりに実行している。そういえば Apache の設定ファイルで mod_php
みたいなのをいじったことがあるし、nginx では PHP だけ php-fpm とかいう違うモジュールで動かしていたと思う。
つまりは PHP ファイルだけは、
$ php ./example.php
と、「php
コマンドで動かしますよー」的な引き渡しが行われているワケだ。コレなら、php
コマンド (PHP 用の拡張モジュール) はファイルの読み取り権限だけあればよく、実行は php
コマンドが肩代わりすることになる。
ふむ、だいぶ腑に落ちた。いまさらになって CGI 理解したし。