[PHP-users 4585] Re: スクリプトの1行目の表示を止めたい
HIGASHI Taku
php-users@php.gr.jp
Tue, 08 Jan 2002 12:00:54 +0900 (JST)
東志と申します。
# 以前の投稿([PHP-users 2374])を行なったものです。
From: "清水 泰之" <shimizu@kent-jp.net>
Subject: [PHP-users 4583] スクリプトの1行目の表示を止めたい
Date: Tue, 8 Jan 2002 10:39:39 +0900
Message-ID: <013201c197e5$569cb4e0$3400a8c0@OMNI500>
shimizu> 以前の投稿にもありましたが([PHP-users 2374] CGI版PHP でスクリプト1行目の出
shimizu> 力を抑止)
shimizu> CGI版とApacheのSUEXECで使った場合、1行目の/usr/local/bin/phpという行が
shimizu> 表示されてしまいます。コマンドラインで実行すると表示されないのですが
shimizu> この表示を止めるにはどうすればいいのでしょうか。
adhocではありますが、以下の方法で自己解決しましたんで参考にして下さい。
まず、FORMのACTIONには、目的のCGIを呼び出すためのラッパー(PHP)を指定し、
hiddenで、実際に呼び出すCGIを指定しておきます。
[form.html]
:
<form action="wrapper.php" method="post">
<input type="hidden" name="cgi" value="~foo/bar.cgi">
:
</form>
で、wrapper.phpは、以下のようになります。
[wrapper.php]
<?php
$url = "http://localhost/" . $HTTP_POST_VARS["cgi"];
$f = 0;
foreach ($HTTP_POST_VARS as $name => $value) {
if ($name == "cgi") continue;
if ($f == 0) {
$f = 1;
$url .= "?" . $name . "=" . $value;
} else {
$url .= "&" . $name . "=" . $value;
}
}
$fp = fopen($url, "r");
fgets($fp, 4096); // Skip 1st Line
fpassthru($fp);
?>
ポイントは CGIを直接呼び出さずに、wrapper.phpから呼び出す事で
不要な行の出力を抑止する事です。
また、CGI側では、$REMOTE_ADDRを参照して、localhost以外からの
呼び出しを蹴るようにしておいた方が良いかも知れません。
以上、御参考まで。