ZetCode

PHP curl_share_close 函数

最后修改日期:2025 年 4 月 11 日

PHP curl_share_close 函数用于关闭 cURL 共享句柄。它用于清理多个 cURL 句柄之间的共享资源。此函数会释放与共享句柄关联的所有内存。

基本定义

curl_share_close 函数关闭由 curl_share_init() 创建的 cURL 共享句柄。它以共享句柄作为唯一参数,不返回任何值。

语法:curl_share_close(CurlShareHandle $share_handle): void。调用此函数后,共享句柄将无法再使用。完成后务必关闭共享句柄以释放资源。

基本的共享句柄用法

此示例演示了如何创建和关闭基本的 cURL 共享句柄。

basic_share_close.php
<?php

declare(strict_types=1);

$sh = curl_share_init();

// Configure shared options
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);

// Use the share handle with multiple cURL handles...

curl_share_close($sh);

此代码创建了一个共享句柄,将其设置为在句柄之间共享 Cookie,然后将其关闭。共享句柄通常会在关闭之前与多个 cURL 句柄一起使用。

在句柄之间共享 Cookie

此示例展示了如何在多个 cURL 句柄之间共享 Cookie。

cookie_sharing.php
<?php

declare(strict_types=1);

$sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);

$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://example.com/login");
curl_setopt($ch1, CURLOPT_SHARE, $sh);

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://example.com/profile");
curl_setopt($ch2, CURLOPT_SHARE, $sh);

// Execute requests...

curl_close($ch1);
curl_close($ch2);
curl_share_close($sh);

我们创建一个共享句柄,在两个 cURL 句柄之间共享 Cookie。这使得第二个请求能够维护第一个请求的会话。所有句柄和共享句柄都已正确关闭。

共享 DNS 缓存

此示例演示了在多个请求之间共享 DNS 缓存。

dns_sharing.php
<?php

declare(strict_types=1);

$sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);

$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://api.example.com/v1/users");
curl_setopt($ch1, CURLOPT_SHARE, $sh);

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://api.example.com/v1/posts");
curl_setopt($ch2, CURLOPT_SHARE, $sh);

// Execute requests...

curl_close($ch1);
curl_close($ch2);
curl_share_close($sh);

共享句柄配置为在请求之间共享 DNS 缓存。当向同一域发出多个请求时,这可以提高性能。所有资源都已正确清理。

共享多种数据类型

此示例展示了如何在句柄之间共享多种数据类型。

multi_share.php
<?php

declare(strict_types=1);

$sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE | CURL_LOCK_DATA_DNS | CURL_LOCK_DATA_SSL_SESSION);

$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://secure.example.com");
curl_setopt($ch1, CURLOPT_SHARE, $sh);

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://secure.example.com/profile");
curl_setopt($ch2, CURLOPT_SHARE, $sh);

// Execute requests...

curl_close($ch1);
curl_close($ch2);
curl_share_close($sh);

我们在句柄之间共享 Cookie、DNS 缓存和 SSL 会话。这对于维护会话和提高性能非常有用。按位或运算符结合了多个共享选项。

共享句柄的错误处理

此示例演示了共享句柄的正确错误处理。

error_handling.php
<?php

declare(strict_types=1);

$sh = curl_share_init();

if ($sh === false) {
    die("Failed to initialize share handle");
}

if (!curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE)) {
    curl_share_close($sh);
    die("Failed to set share option");
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_SHARE, $sh);

// Execute request...

if (curl_errno($ch)) {
    echo "cURL error: " . curl_error($ch);
}

curl_close($ch);
curl_share_close($sh);

我们在创建和配置共享句柄时检查错误。如果任何操作失败,我们会在退出前清理资源。这可以防止在出现错误时发生资源泄露。

最佳实践

来源

PHP curl_share_close 文档

本教程通过实际示例介绍了 PHP curl_share_close 函数,展示了其在共享 cURL 资源方面的用法。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

所有 PHP cURL 教程列表。