【发布时间】:2013-07-22 06:31:11
【问题描述】:
在您在命令行上运行的单个命令上,是否有可用于将所有 PHP 通知和警告重定向到 STDERR 的标志或命令?
我想从命令行解析 JSON 数组,但有时我会收到来自 STDOUT 的通知和警告,导致 JSON 解析失败。
命令如下所示:
rake collect
收集有关本地网站的一些信息是一项艰巨的任务。
【问题讨论】:
标签: php bash stdout stderr io-redirection
在您在命令行上运行的单个命令上,是否有可用于将所有 PHP 通知和警告重定向到 STDERR 的标志或命令?
我想从命令行解析 JSON 数组,但有时我会收到来自 STDOUT 的通知和警告,导致 JSON 解析失败。
命令如下所示:
rake collect
收集有关本地网站的一些信息是一项艰巨的任务。
【问题讨论】:
标签: php bash stdout stderr io-redirection
根据configuration manual,您需要将display_errors 选项设置为stderr,以便向STDERR 输出警告/错误。
display_errors 字符串
这决定了错误是否应该作为输出的一部分打印到屏幕上,或者是否应该对用户隐藏。
值“stderr”将错误发送到标准错误而不是标准输出。
您可以通过以下几种方式设置此选项:
1) 全球范围内(php.ini)
display_errors = stderr
2) 在脚本中本地使用ini_set():
ini_set('display_errors', 'stderr');
3) 作为命令行参数(不修改任何文件)
php --define display_errors=stderr script.php
【讨论】:
您需要创建一个自定义错误处理程序。
set_error_handler (function ($errno, $errstr, $errfile, $errline)
{
switch ($errno) {
case E_USER_ERROR:
$ERROR = "CUSTOM ERROR";
break;
//set cases for each error type
}
if($ERROR){
$stderr = fopen('php://stderr', 'w');
fwrite($stderr, $ERROR );
fclose($stderr);
}
});
【讨论】:
rake 任务,并且计划是保持服务器端代码不变。