- ベストアンサー
SSI される .inc ファイル内に PHP を記述したい…が…
お世話になっております。 .html から、SSI で .inc ファイルを呼び出し、その inc ファイル 内に記述の PHP を実行したいと考えております。 例えば、test.html に <!--#include virtual="../include/inc/meta.inc"--> のような記述があり、include.inc に <?php echo "test"; ?> のように記述があった場合、php4 では test と表示されるのですが、 php5 では、 <?php echo "test"; ?> がそのまま出てきてしまいます。 php4 と php5 の httpd.conf の違いは LoadModule php4_module C:/php446/sapi/php4apache2.dll LoadModule php5_module c:/php525/php5apache2.dll の行のみです。(いずれかをコメントにし、4と5を切り替え) 以下、httpd.conf の SSI の動作に影響を及ぼすと思われる 行を抜粋します。(コメント行も含みます) 環境は WINDOWS&Apache2 です。 <Directory /> Options FollowSymLinks MultiViews Includes ExecCGI AllowOverride All </Directory> <Directory "C:/Program Files/Apache Group/Apache2/htdocs"> Options All AllowOverride None Order allow,deny Allow from all </Directory> AddType application/x-httpd-php .inc .html .php #AddHandler server-parsed .shtml .html #AddType text/html .shtml .html .inc AddOutputFilter INCLUDES .shtml .html .inc #<Files *.html> #ForceType text/html #SetOutputFilter INCLUDES #</Files> #<Files *.shtml> #ForceType text/html #SetOutputFilter INCLUDES #</Files> #<Files *.inc> #ForceType text/html #SetOutputFilter INCLUDES #</Files> 原因は php.ini ですかね? ご存知の方、ご教授下さい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SSIde出力させる為には、PHPをCGIとして動作させる必要があるのではないでしょうか? 久しくSSIを書いてないのでうろ覚えですが、以下はどうでしょう? <!--#exec cgi="../include/inc/meta.inc"--> <!--#exec cmd="php /path/to/include/inc/meta.inc" --> とかとか。 <!--#include virtual・・・の場合、.inc(もしくは他の拡張子に変更して)をCGIとしてhttpd.confに設定する必要があるんじゃないかな?と思います。 include.incは #!/usr/bin/php <?php echo "test"; ?> なんて書いて、パーミッションも実行権限が必要だったり。 header("Content-type: text/plain");も必要かも? さらにPHPがCGIで動作するようになっていたり。 通常のPHPよりも遅かったり。 あまり良いことは無いと思います。 SSIなんか使わずに直接<? echo "test"?>じゃダメなんでしょうか?
その他の回答 (1)
- shimix
- ベストアンサー率54% (865/1590)
基本的に No.1 のとおりですね。SSIが処理している中にphpスクリプトを書いても(モジュール動作の)phpは動作はできません。今回はphp4がSAPIのようなので処理されているというだけではないでしょうか?つまり単にphpの実行形態の違いです。 SSIで書けるようなことはphpでも書けると思いますので、私もphpで統一した方がいいと思います。
お礼
ありがとうございます。 今回に関してはどうにかSSIでやるしか無いのですが、 確かにトリッキーな事をやろうという気がしています。 次回から改善しないといけないですね。。
お礼
確かに、PHPソース側で content-type の制御とか… 色々と設定が必要かもしれませんね。。 事情がありプログラム構造を変更するのは難しいのですが、 なるべくSSIを使わない方向で検討してみます。