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 错误代码的错误消息。
<?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。
<?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 状态,并在需要时显示错误消息。最后会执行适当的清理。
无效错误代码处理
此示例演示了函数如何处理无效错误代码。
<?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 错误消息。
<?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。
<?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);
我们创建了一个提供更详细错误信息的包装函数。它能够优雅地处理未知错误代码,并以一致的方式格式化输出。此方法将错误消息处理集中在您的应用程序中。
最佳实践
- 错误检查:始终检查 curl_multi_exec 的返回值。
- 消息验证:验证 curl_multi_strerror 不返回 NULL。
- 日志记录:记录错误代码和消息以进行调试。
- 常量:使用 cURL 常量而不是硬编码值。
- 清理:使用后正确关闭 multi handle。
来源
本教程涵盖了 PHP curl_multi_strerror 函数,并通过实际示例展示了其在各种错误处理场景中的用法。