Как подавить предупреждения fputs, fsockopen и т. Д., Не отключая отчеты об ошибках?

Я использую fsockopen, fgets и fputs для реализации протокола связи с другим компьютером. NetBeans предупреждает всех «@» перед fsockopen, fputs, fgets и т.д. Решение работает, но без ‘@’ после отключения удаленного устройства появляются предупреждения (не ошибки).

Я не хочу использовать error_reporting, потому что это не более кошерное решение. Дополнительно больше кода, больше времени выполнения …

Есть ли лучшее решение для этого?

КСТАТИ. предупреждения появляются, если конечный компьютер прервет соединение. Это возможно, если устройство перегружено.

$answer=@fgets($socket, $negotiatedMaxLength);

КСТАТИ. Решение должно работать без ini_set — заблокирован на сервере и без error_reporting(),

0

Решение

Один способ вместо @ что является очевидным способом сделать это, это использовать set_error_handler

https://www.w3schools.com/php/func_error_set_error_handler.asp

Это позволяет передавать ошибки в ErrorException класс, а затем у вас есть исключения вместо ошибок. Это позволяет вам использовать 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 являются необязательными, поэтому мы устанавливаем для них значение по умолчанию.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]