ZetCode

PHP curl_multi_strerror 函数

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

PHP curl_multi_strerror 函数返回 cURL multi handle 错误代码的字符串描述。它是 PHP cURL multi 接口的一部分,该接口同时处理多个 cURL 传输。

基本定义

curl_multi_strerror 函数为 cURL multi handle 错误代码提供人类可读的错误消息。它接受一个错误代码作为输入并返回相应的错误字符串。

语法:curl_multi_strerror(int $error_code): ?string。如果错误代码无效,则函数返回 NULL。它自 PHP 7.3.0 起可用。

基本错误消息查找

此示例演示了如何获取已知 cURL multi 错误代码的错误消息。

basic_error_lookup.php
<?php

declare(strict_types=1);

$errorCode = CURLM_OK;
$errorMessage = curl_multi_strerror($errorCode);

echo "Error code {$errorCode}: {$errorMessage}";

此代码查找 CURLM_OK (0) 的消息,表示没有错误。该函数为此代码返回“No error”。在向用户显示消息之前,请务必检查错误代码。

处理 Multi cURL 错误

此示例展示了如何在实际的 multi cURL 场景中使用 curl_multi_strerror。

multi_curl_error.php
<?php

declare(strict_types=1);

$mh = curl_multi_init();
$ch1 = curl_init("https://example.com");
$ch2 = curl_init("https://nonexistent.domain");

curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

do {
    $status = curl_multi_exec($mh, $active);
    
    if ($status !== CURLM_OK) {
        echo "cURL multi error: " . curl_multi_strerror($status);
        break;
    }
    
    curl_multi_select($mh);
} while ($active);

curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

我们使用两个 cURL 请求创建一个 multi handle。其中一个 URL 无效,这可能会导致错误。会检查 curl_multi_exec 状态,并在需要时显示错误消息。最后会执行适当的清理。

无效错误代码处理

此示例演示了函数如何处理无效错误代码。

invalid_error_code.php
<?php

declare(strict_types=1);

$invalidCode = 9999;
$errorMessage = curl_multi_strerror($invalidCode);

if ($errorMessage === null) {
    echo "Invalid cURL multi error code: {$invalidCode}";
} else {
    echo "Error message: {$errorMessage}";
}

当提供无效错误代码时,函数返回 NULL。这有助于区分有效错误消息和未知错误代码。在处理动态错误代码时,请务必检查 NULL。

列出所有已知错误代码

此示例显示了如何显示所有已知的 cURL multi 错误消息。

all_error_messages.php
<?php

declare(strict_types=1);

$errorCodes = [
    CURLM_OK,
    CURLM_BAD_HANDLE,
    CURLM_BAD_EASY_HANDLE,
    CURLM_OUT_OF_MEMORY,
    CURLM_INTERNAL_ERROR,
    CURLM_BAD_SOCKET,
    CURLM_UNKNOWN_OPTION,
    CURLM_ADDED_ALREADY
];

foreach ($errorCodes as $code) {
    echo "Code {$code}: " . curl_multi_strerror($code) . "\n";
}

我们定义了一个包含已知 cURL multi 错误常量的数组并遍历它们。对于每个代码,我们显示相应的错误消息。这对于调试或创建文档很有用。

自定义错误处理包装器

此示例创建了一个自定义函数,用于增强 curl_multi_strerror。

custom_error_wrapper.php
<?php

declare(strict_types=1);

function getMultiCurlError(int $code): string {
    $message = curl_multi_strerror($code);
    
    if ($message === null) {
        return "Unknown cURL multi error (code: {$code})";
    }
    
    return "cURL multi error {$code}: {$message}";
}

// Example usage:
$errorCode = CURLM_OUT_OF_MEMORY;
echo getMultiCurlError($errorCode);

我们创建了一个提供更详细错误信息的包装函数。它能够优雅地处理未知错误代码,并以一致的方式格式化输出。此方法将错误消息处理集中在您的应用程序中。

最佳实践

来源

PHP curl_multi_strerror 文档

本教程涵盖了 PHP curl_multi_strerror 函数,并通过实际示例展示了其在各种错误处理场景中的用法。

作者

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

所有 PHP cURL 教程列表。