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 错误。