[PHP-users 21367]Re: .forwardからの標準入力で起動したスクリプトでpg_connectができない

cxn03651 @ msj.biglobe.ne.jp cxn03651 @ msj.biglobe.ne.jp
2004年 4月 20日 (火) 12:53:53 JST


Mashiki 様 <- 中村

 お世話になります。多くの方から返信をいただいたのですが、まとめてこちら
に返信をさせていただきます。

> --with-pgsql は無いんですね。

 無いみたいです。でも、Web上のphpスクリプトからはpostgreSQLへの接続はで
きているので、今回の件とは関係ないのではと思っています。

> cat dummy.dat | /usr/bin/php -q /path/test.php
> は動きますか?

 再現可能なソース(test.php)を末尾に載せます。
 これで、cat dummy.dat | /usr/bin/php -q /path/test.phpを実行すると、下
記ソースのpg_connect後のif文(else部分)が実行され、"Connect Success."の
メールが届きます。
.forwardで転送した場合は、pg_connect後のif文での"Connect Failed."のメー
ルが届きます。

> > また、POSTGRES関連の環境変数をセットしていないユーザーから実行すると
すいません。この部分は理解できません。POSTGRESの権限の問題かと思い、デー
タベースcxn03651で全てのユーザに全ての権限を与えるようにGRANT ALL ON
cxn03651 TO PUBLIC;をやってみても状況は変わりません。

> > どうなるでしょうか?また、エラーメッセージは?
 エラーメッセージを出力する方法がわからないため、現在は、このようにメー
ル送信を節目に置いてどこまで実行されたか確認する方法をとっています。
 エラーログにでも出力する方法があるのでしょうか。

 以下、ソースです。

#!/usr/bin/php -q
<?php

/*=================================================================
 *            メインルーチン
 *================================================================*/
  // メール情報を取得
  $source = "";
  $stdin = fopen("php://stdin", "r");
  while(!feof($stdin)) {
    $source .= fread($stdin, 4096);
  }
  // From:行を取得
  $From = GetSender($source);

  // postgreSQLへの接続テスト
  $dbname = "cxn03651";
  $constr = "dbname={$dbname}";
  $con = pg_connect($constr);
  if($con == false) {
    mb_send_mail("cxn03651 @ msj.biglobe.ne.jp","Connect Failed.","","");
    exit;
  }
  else {
    mb_send_mail("cxn03651 @ msj.biglobe.ne.jp","Connect Success.","","");
  }
  pg_close($con);
  exit;

/*=================================================================
 *            end of メインルーチン
 *================================================================*/

/*-------------------------------------------------------------------
 *  string GetSender : From:行を返す
 *------------------------------------------------------------------*/

  function GetSender($source) {
    $line = split("\n", $source);
    $From = "";
    for($i=0 ; $i<count($line) ; $i++) {
      if(eregi("^From:", $line[$i])) {
        $From = $line[$i];
        break;
      }
    }
    return $From;
  }
/*====================================================
 *          end of test.php
 *===================================================*/
?>

                  中村(cxn03651 @ msj.biglobe.ne.jp)




PHP-users メーリングリストの案内