温馨提示×

php httpserver代码如何编写

PHP
小樊
82
2024-11-19 02:05:35
栏目: 编程语言

要使用PHP编写一个简单的HTTPS服务器,您可以使用内置的http_server函数。以下是一个示例代码,展示了如何使用PHP创建一个基本的HTTPS服务器:

<?php
// 设置监听地址和端口
$host = '0.0.0.0';
$port = 8080;

// 创建一个HTTP服务器
$server = http_server(function (Psr\Http\Message\ServerRequestInterface $request) {
    // 设置响应头
    $response = new Psr\Http\Message\Response();
    $response->getBody()->write('Hello, this is a PHP HTTPS server!');
    $response->withHeader('Content-Type', 'text/plain');
    $response->withStatus(200);

    return $response;
}, $host, $port);

// 启动服务器并监听请求
$server->start();
echo "Server is running at https://{$host}:{$port}\n";

请注意,此示例代码创建了一个简单的HTTP服务器,而不是HTTPS服务器。要使其成为HTTPS服务器,您需要使用SSL证书进行加密。以下是一个使用自签名证书的示例:

<?php
// 设置监听地址和端口
$host = '0.0.0.0';
$port = 8443;

// 创建一个HTTPS服务器
$server = http_server(function (Psr\Http\Message\ServerRequestInterface $request) {
    // 设置响应头
    $response = new Psr\Http\Message\Response();
    $response->getBody()->write('Hello, this is a PHP HTTPS server!');
    $response->withHeader('Content-Type', 'text/plain');
    $response->withStatus(200);

    return $response;
}, $host, $port, true);

// 生成自签名证书
$key = openssl_random_pseudo_bytes(32);
$cert = openssl_x509_new();
openssl_x509_set_version(OPENSSL_VERSION_TEXT);
openssl_x509_set_notBefore(gmdate('Y-m-d\TH:i:s\Z'));
openssl_x509_set_notAfter(gmdate('Y-m-d\TH:i:s\Z', time() + 3600));
openssl_x509_set_serialNumber(1);
openssl_x509_set_subject_name(new X509Name(['CN' => 'PHP HTTPS Server']));
openssl_x509_sign($cert, $key, 'sha256WithRSAEncryption');

// 将证书和私钥保存到临时文件
$certFile = tempnam(sys_get_temp_dir(), 'cert');
$keyFile = tempnam(sys_get_temp_dir(), 'key');
file_put_contents($certFile, openssl_x509_export($cert));
file_put_contents($keyFile, openssl_privatekey_export($key));

// 创建一个HTTPS服务器,使用生成的证书和私钥
$server = http_server(function (Psr\Http\Message\ServerRequestInterface $request) {
    // 设置响应头
    $response = new Psr\Http\Message\Response();
    $response->getBody()->write('Hello, this is a PHP HTTPS server!');
    $response->withHeader('Content-Type', 'text/plain');
    $response->withStatus(200);

    return $response;
}, $host, $port, true, [
    'ssl_key' => $keyFile,
    'ssl_cert' => $certFile,
]);

// 启动服务器并监听请求
$server->start();
echo "Server is running at https://{$host}:{$port}\n";

在这个示例中,我们首先生成了一个自签名的SSL证书和私钥,然后将其保存到临时文件中。接下来,我们将这些文件作为参数传递给http_server函数,以创建一个HTTPS服务器。请注意,由于我们使用的是自签名证书,浏览器可能会发出安全警告。在实际生产环境中,您应该使用由受信任的证书颁发机构(CA)签发的证书。

0