[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以外からの
呼び出しを蹴るようにしておいた方が良いかも知れません。

以上、御参考まで。