函数名称:stream_socket_enable_crypto()
适用版本:PHP 5 >= 5.1.0, PHP 7
函数描述:stream_socket_enable_crypto()函数用于在一个已经建立的socket连接上启用或禁用加密。
语法:bool stream_socket_enable_crypto ( resource $stream , bool $enable , int $crypto_type [, resource $session_stream ] )
参数:
- $stream:必需,表示已经建立的socket连接的资源句柄。
- $enable:必需,表示是否启用加密。如果为true,则启用加密;如果为false,则禁用加密。
- $crypto_type:必需,表示加密类型,可以是以下常量之一:
- STREAM_CRYPTO_METHOD_ANY:默认值,使用任何可用的加密方法。
- STREAM_CRYPTO_METHOD_SSLv2_CLIENT:SSLv2客户端加密。
- STREAM_CRYPTO_METHOD_SSLv3_CLIENT:SSLv3客户端加密。
- STREAM_CRYPTO_METHOD_SSLv23_CLIENT:SSLv2、SSLv3和TLSv1客户端加密。
- STREAM_CRYPTO_METHOD_TLS_CLIENT:TLSv1客户端加密。
- STREAM_CRYPTO_METHOD_SSLv2_SERVER:SSLv2服务器加密。
- STREAM_CRYPTO_METHOD_SSLv3_SERVER:SSLv3服务器加密。
- STREAM_CRYPTO_METHOD_SSLv23_SERVER:SSLv2、SSLv3和TLSv1服务器加密。
- STREAM_CRYPTO_METHOD_TLS_SERVER:TLSv1服务器加密。
- $session_stream:可选,表示用于加密会话的资源句柄。
返回值:如果成功启用或禁用加密,则返回true;否则返回false。
示例:
// 创建一个socket连接
$socket = stream_socket_client('tcp://www.example.com:443', $errno, $errstr, 30);
// 启用加密
if (stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
echo "加密已成功启用!\n";
} else {
echo "无法启用加密!\n";
}
// 发送加密的数据
fwrite($socket, "Hello, encrypted world!");
// 关闭加密
stream_socket_enable_crypto($socket, false);
// 发送非加密的数据
fwrite($socket, "Hello, world!");
// 关闭socket连接
fclose($socket);
在上面的示例中,我们首先使用stream_socket_client()函数创建一个与www.example.com的443端口的TCP连接。然后,我们使用stream_socket_enable_crypto()函数启用加密,并指定加密类型为TLS客户端加密。如果加密成功启用,则输出"加密已成功启用!",否则输出"无法启用加密!"。接下来,我们使用fwrite()函数发送加密的数据。然后,我们使用stream_socket_enable_crypto()函数禁用加密。最后,我们使用fwrite()函数发送非加密的数据,并关闭socket连接。