CGI版と言われるものは、WebサーバーであるApacheとは別プロセスで動作させるPHPという意味合いが強いです。※大量引用恐縮です。
実際に、CGIとは、Common Gateway Interfaceの略で、Webサーバーが、Webブラウザからの要求に応じて、プログラムを起動するための仕組みを言います。
つまり、ここでは、
プログラムを起動する=PHPを起動する
という意味となります。
(中略)
逆に、(中略)
モジュール版と言われるものは、WebサーバーであるApacheと同じプロセスで動作させるPHPという意味合いが強いです。
一般に、CGI版PHPとモジュール版PHPでは、どちらが早いかという記事を多くみます。以降の参考記事では、そのあたりがきれいに紹介されています。
ほとんどの場合、モジュール版PHPが動作が速いとされています。
(中略)
しかしながら、レンタルサーバーでは、ほとんどがCGI版PHPが採用されています。
これは、どういう意味があるでしょう。
答えは、上記の動作の仕組みの違いによります。
レンタルサーバーは、いろんな人の寄り合い所帯になっていて、悪意があるなしにかかわらず、PHPなどのスクリプトの暴走などで簡単にシステムが不安定になります。
例えば、モジュール版PHPが動作可能な環境で、あるユーザのPHPスクリプトが暴走しているとしましょう。
そうしたとき、管理者は、CPUの使用率が急激に上がったので対処しようとするでしょう。その時、暴走しているプロセスを停止させることでシステム全体の安定を確保しようと思いますが、モジュール版では、Apacheと同じプロセスとなりますから、Apacheが暴走しているように見えるわけです。
また、さらにApacheは、共有しているすべてのユーザが利用しているものでもありますから、安易にそのプロセスを停止するわけにいきません。
CGI版では、そのような問題を解決してくれます。CGI版は、別のプロセスですから、暴走しているスクリプトがあれば、そのプロセスを停止させれば良いことになります。
このように安定性を確保するためにCGI版を提供しているケースがほとんどのようです。

CGI版
Server API : CGI
モジュール版
Server API : Apache 2.0 Handler
あるいは、
Server API : Apache
どうすれば文字化けが起こらないようになるのか。
それは
自動変換を利用しない
ことだ。
;; Disable Output Buffering参考になります。
output_buffering = Off
;; Set HTTP header charset
; default_charset = EUC-JP
;; Set default language to Japanese
mbstring.language = Japanese
;; HTTP input encoding translation is enabled.
mbstring.encoding_translation = off
;; Set HTTP input encoding conversion to auto
mbstring.http_input = pass
;; Convert HTTP output to EUC-JP
mbstring.http_output = pass
;; Set internal encoding to EUC-JP
mbstring.internal_encoding = EUC-JP
;; Do not print invalid characters
mbstring.substitute_character = none
mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII
PHPではヒアドキュメント中、うーん、そうなのか。めんどい。。
1.変数は展開される
2.定数は展開されない
さくらでcronを動かそうとしてオオハマリ。もうダメカと思ったが。。できました〜(^^)ありがとうございます!
× /usr/local/bin/php /home/mydirectory/file.php
× /usr/local/bin/php -f /home/mydirectory/file.php
○ cd /home/mydirectory; /usr/local/bin/php /home/mydirectory/file.php
何とか動きました。
/etc/php.iniにて、だそうです。
allow_url_fopen = On
に設定して、httpdを再起動したら解決