如何在不禁用错误报告的情况下抑制 fputs、fsockopen 等警告?
How to suppress fputs, fsockopen etc warnings without disabling error reporting?
我使用 fsockopen、fgets 和 fputs 来实现与其他机器的通信协议。 NetBeans 在 fsockopen, fputs, fgets
等之前向所有“@”发出警告。该解决方案有效但在远程设备断开连接后没有“@”时会出现警告(不是错误)。
我不想使用 error_reporting 因为它不是更洁净的解决方案。另外更多的代码,更长的执行时间...
有没有更好的解决方案?
顺便说一句。如果目标机器将断开连接,则会出现警告。如果设备过载,则有可能。
$answer=@fgets($socket, $negotiatedMaxLength);
顺便说一句。该解决方案应该在没有 ini_set
的情况下工作 - 在服务器上被阻止并且没有 error_reporting()
。
一种替代 @
的方法是使用 set_error_handler
https://www.w3schools.com/php/func_error_set_error_handler.asp
这使您可以将错误通过管道传输到 ErrorException
class 中,然后您会得到异常而不是错误。这允许您使用 try/catch
块来处理错误。
set_error_handler(function($severity, $message, $file = 'Unknown', $line = 'Unknown'){
//typically I set a constant for PHP_ERRORS for the exception code.
if (error_reporting() != -1 && !(error_reporting() & $severity)) {
//we'll let this error go to the next error handler
return; //return null
}else{
//convert the error into an exception
throw new ErrorExcption($message, 0, $severity, $file, $line );
//we don't have to return anything because the exception throwing kicks us out of the error handler.
}
});
try{
$answer=fgets($socket, $negotiatedMaxLength);
}catch(ErrorException $e ){
}
请注意 &
单符号是为了检查严重级别 -vs- 您执行的错误报告级别 bitwise And
此外 $file
和 $line
是可选的,因此我们为它们设置默认值。
我使用 fsockopen、fgets 和 fputs 来实现与其他机器的通信协议。 NetBeans 在 fsockopen, fputs, fgets
等之前向所有“@”发出警告。该解决方案有效但在远程设备断开连接后没有“@”时会出现警告(不是错误)。
我不想使用 error_reporting 因为它不是更洁净的解决方案。另外更多的代码,更长的执行时间...
有没有更好的解决方案?
顺便说一句。如果目标机器将断开连接,则会出现警告。如果设备过载,则有可能。
$answer=@fgets($socket, $negotiatedMaxLength);
顺便说一句。该解决方案应该在没有 ini_set
的情况下工作 - 在服务器上被阻止并且没有 error_reporting()
。
一种替代 @
的方法是使用 set_error_handler
https://www.w3schools.com/php/func_error_set_error_handler.asp
这使您可以将错误通过管道传输到 ErrorException
class 中,然后您会得到异常而不是错误。这允许您使用 try/catch
块来处理错误。
set_error_handler(function($severity, $message, $file = 'Unknown', $line = 'Unknown'){
//typically I set a constant for PHP_ERRORS for the exception code.
if (error_reporting() != -1 && !(error_reporting() & $severity)) {
//we'll let this error go to the next error handler
return; //return null
}else{
//convert the error into an exception
throw new ErrorExcption($message, 0, $severity, $file, $line );
//we don't have to return anything because the exception throwing kicks us out of the error handler.
}
});
try{
$answer=fgets($socket, $negotiatedMaxLength);
}catch(ErrorException $e ){
}
请注意 &
单符号是为了检查严重级别 -vs- 您执行的错误报告级别 bitwise And
此外 $file
和 $line
是可选的,因此我们为它们设置默认值。