Re: redirect stdout to stderr
| From: | Bojan Tesanovic | Date: | Sat, 23 Feb 2008 01:07:46 +0000 |
| Subject: | Re: redirect stdout to stderr | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-269927@lists.php.net to get a copy of this message | ||
Hi Jack,
here is a link that can be of help
http://bugs.php.net/bug.php?id=22839
also you can use custom error handler function , catch errors and write to stderr
============
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
$ERROR='';
switch ($errno) {
case E_USER_ERROR:
$ERROR = "<b>My ERROR</b> [$errno] $errstr<br />\n";
$ERROR.= " Fatal error on line $errline in file $errfile";
$ERROR.= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
$ERROR.= "Aborting...<br />\n";
break;
case E_USER_WARNING:
$ERROR= "<b>My WARNING</b> [$errno] $errstr<br />\n";
break;
case E_USER_NOTICE:
$ERROR= "<b>My NOTICE</b> [$errno] $errstr<br />\n";
break;
default:
$ERROR = echo "Unknown error type: [$errno] $errstr<br />\n";
break;
}if($ERROR){
$stderr = fopen('php://stderr', 'w');
fwrite($stderr, $ERROR );
fclose($stderr);
}
/* Don't execute PHP internal error handler */
return true;
}
set_error_handler("myErrorHandler");
//code .....
==========================
I guess you can achieve what you need by one of those 2 concepts
Cheers.
On Feb 23, 2008, at 1:04 AM, Jack Bates wrote:
How can I implement in PHP, a script which redirects stdout to stderr, such that echo, etc. print to stderr instead of stdout? I can redirect stdout to stderr when invoking PHP like so: php script-name >&2 However I want to perform this redirection within the script itself. The solution I currently use is output buffering: ob_start(); // Call library code fwrite(STDERR, ob_get_contents()); ob_end_clean(); However I wonder if there's a more efficient way, so that output appears on stderr immediately, rather than waiting for fwrite(STDERR, ob_get_contents()); My reason for wanting this is to create a Subversion pre-commit hook using PHP_CodeSniffer: http://pear.php.net/package/PHP_CodeSniffer I want: 1) Commits to our Subversion repository to be checked against our coding standard with PHP_CodeSniffer 2) Commits to fail when PHP_CodeSniffer returns an error 3) PHP_CodeSniffer's report to be displayed to the Subversion user, so they can fix any problems I achieved 1) and 2), but PHP_CodeSniffer prints its report to stdout and Subversion only displays stderr to the user, not stdout. So to make this pre-commit hook fool proof, I want it to redirect PHP_CodeSniffer's report to stderr. Anyone have better suggestions than output buffering? Much thanks, JackBojan Tesanovic http://www.classicio.com/ http://www.carster.us/