Возникла задача отлавливать (не просто заглушать) ошибки которые могут происходить при вызове stream_socket_client. Проблемы с ДНС/непосредственным соединением сокета/т.п. отлавливаются через $errno и $errstr а вот если происходит ошибка внутри SSL-ля то в $errno и $errstr пусто. Пробовал смотреть в openssl_error_string() - там тоже по нулям. Собственно тестовый код:
$context = stream_context_create([
'ssl' => [
'capture_peer_cert' => true,
'verify_peer' => false,
'allow_self_signed' => true,
'SNI_enabled' => true,
]
]);
$stream = stream_socket_client('ssl://localhost:80', $errno, $errstr, 30,
STREAM_CLIENT_CONNECT, $context);
if ($stream === FALSE) {
print "Connection error: errno:$errno errstr:$errstr\n";
while($err = openssl_error_string()) {
print "SSL Error: $err\n";
}
exit;
}
PHP Warning: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol in /tmp/ssl_t.php on line 15
PHP Warning: stream_socket_client(): Failed to enable crypto in /tmp/ssl_t.php on line 15
PHP Warning: stream_socket_client(): unable to connect to ssl://localhost:80 (Unknown error) in /tmp/ssl_t.php on line 15
Connection error: errno:0 errstr:
Собственно задача: погасить варнинг через @ а ошибку(а желательно все 3 варнинга) "error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol" каким то образом отловить в коде