PHP curl_strerror 函数
最后修改日期:2025 年 4 月 11 日
PHP curl_strerror 函数返回 cURL 错误代码的字符串描述。它对于将数字 cURL 错误代码转换为人类可读的消息非常有用。这有助于调试 cURL 操作。
基本定义
curl_strerror 函数接受一个 cURL 错误代码并返回其字符串描述。它在 PHP 5.5.0 及更高版本中可用。
语法:curl_strerror(int $error_code): string。该函数接受一个 cURL 错误代码并返回相应的错误消息。错误代码由 curl_errno() 返回。
基本错误处理
此示例显示了当请求失败时使用 curl_strerror 的基本错误处理。
<?php
declare(strict_types=1);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://nonexistent.example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if ($response === false) {
$error_code = curl_errno($ch);
$error_msg = curl_strerror($error_code);
echo "cURL Error ($error_code): $error_msg";
} else {
echo $response;
}
curl_close($ch);
此代码尝试连接到一个不存在的域。当请求失败时,我们使用 curl_errno 获取错误代码,并使用 curl_strerror 将其转换为消息。这提供了有关出现问题的更多上下文。
处理常见的 cURL 错误
此示例演示了如何处理具有描述的特定 cURL 错误代码。
<?php
declare(strict_types=1);
$ch = curl_init();
// Intentionally cause an error (empty URL)
curl_setopt($ch, CURLOPT_URL, "");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if ($response === false) {
$error_code = curl_errno($ch);
$error_msg = curl_strerror($error_code);
switch ($error_code) {
case CURLE_URL_MALFORMAT:
echo "URL Error: $error_msg";
break;
case CURLE_COULDNT_RESOLVE_HOST:
echo "Host Error: $error_msg";
break;
default:
echo "Error ($error_code): $error_msg";
}
}
curl_close($ch);
我们通过设置空 URL 来故意引起 URL 格式错误。代码展示了如何使用有意义的消息处理特定的错误代码。这有助于创建更用户友好的错误处理。
列出所有 cURL 错误代码
此示例列出了所有可能的 cURL 错误代码及其描述。
<?php
declare(strict_types=1);
echo "<h3>cURL Error Codes and Descriptions</h3>";
echo "<table border='1'>";
echo "<tr><th>Code</th><th>Description</th></tr>";
for ($i = 0; $i < 100; $i++) {
$error_msg = curl_strerror($i);
if ($error_msg !== "No error") {
echo "<tr><td>$i</td><td>$error_msg</td></tr>";
}
}
echo "</table>";
此代码循环遍历可能的错误代码并显示其描述。它会跳过“无错误”消息(代码 0)。这有助于理解您可能遇到的 cURL 错误的范围。
使用 curl_strerror 自定义错误处理程序
此示例展示了如何使用 curl_strerror 创建自定义错误处理程序。
<?php
declare(strict_types=1);
function handleCurlError(int $error_code): string {
$error_msg = curl_strerror($error_code);
$timestamp = date('Y-m-d H:i:s');
return "[$timestamp] cURL Error $error_code: $error_msg";
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://invalid.url");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if ($response === false) {
$error_code = curl_errno($ch);
$log_message = handleCurlError($error_code);
error_log($log_message);
echo "An error occurred. Details have been logged.";
}
curl_close($ch);
我们创建了一个自定义错误处理程序函数,该函数使用时间戳格式化错误消息。处理程序使用 curl_strerror 获取错误描述。此模式对于跨应用程序进行一致的错误日志记录很有用。
比较 curl_error 和 curl_strerror
此示例演示了 curl_error 和 curl_strerror 之间的区别。
<?php
declare(strict_types=1);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://nonexistent.example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if ($response === false) {
$error_code = curl_errno($ch);
$error_str = curl_strerror($error_code);
$error_msg = curl_error($ch);
echo "<p>Error Code: $error_code</p>";
echo "<p>curl_strerror: $error_str</p>";
echo "<p>curl_error: $error_msg</p>";
}
curl_close($ch);
此代码显示了 curl_strerror(通用描述)和 curl_error(特定错误消息)之间的区别。curl_strerror 提供一致的消息,而 curl_error 可能包含来自操作的附加上下文。
最佳实践
- 始终检查错误:验证 curl_exec 的返回值。
- 同时使用这两个函数:结合使用 curl_strerror 和 curl_error。
- 记录错误:在日志中包含错误代码和描述。
- 处理特定代码:为常见错误创建特殊情况。
- 记录错误:在 API 文档中注明可能的错误。
来源
本教程通过实际示例介绍了 PHP curl_strerror 函数,展示了如何在应用程序中有效地处理 cURL 错误。