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