[PHP] 표준 에러(stderr)로 메시지를 보내는 방법
reference :
http://www.php.net/manual/en/wrappers.php.php
가끔 PHP로 코딩하다 보면 어떤 메시지를 '표준에러'로 보내고자할 경우가
있습니다.
BASH 경우)
-표준출력 : echo 'string'
-표준입력 : read foo 또는 foo.sh < bar.txt 또는 파라메터 전달 $*, $@, $1, $2, $3, ...
-표준에러 : echo 'string' >&2
예를들어,
콘솔이나 터미널에서는 표준출력이 아닌 표준에러로 보내고자 할 경우나
아파치 모듈로 구동되는 PHP 경우, 아파치 에러 로그로 어떤 메시지를
남기기를 원할 경우가 있을 겁니다.
방법은 다음과 같습니다(다른 방법도 있는 건지는 모르겠습니만)
## print to stderr such as error_log()
##
## arguments :
## $error string, error message
##
## return :
## $return mixed, the number of bytes written, or FALSE on error
##
function _stderr($errstr)
{
global $_SERVER;
if($fp = @fopen('php://stderr','w'))
{
## add error_log format style
##
if($_SERVER[HTTP_USER_AGENT])
{
$head = '['.date('D M d H:i:s Y').'] [PHP-stderr] '.
'[client '.$_SERVER[REMOTE_ADDR].'] ';
}
$return = @fwrite($fp,$head.$errstr."\n");
fclose($fp);
}
return $return;
}
function stderr($errstr)
{
return error_log($errstr,0);
}
## this alias
##
function stderror($errstr)
{
return stderr($errstr);
}
사용법 :
1) 콘솔이나 터미널에서 쉘과 같은 방법으로 작업할 경우
_stderr('아이고 형님 뭔가 잘못되었네요...T.T');
확인방법 :
(표준 출력을 없애고 표준 에러만 출력하도록 함)
$ php -q foo.php >/dev/null
아이고 형님 뭔가 잘못되었네요...T.T
$
2) 아파치 모듈형태로 아파치 에러로그(error_log)에 기록되고자 할 경우
_stderr('앗 DB 연결이 안되네요....T.T');
확인방법 :
$ tail /any/path/to/apache/logs/error_log
...
[Wed Jul 02 02:25:05 2003] [PHP-stderr] [client x.x.x.x] 앗 DB 연결이 안되네요....T.T
EOF |