如何让PHP登录函数返回成功/错误结果,实现调用后的分支逻辑?
PHP登录函数的返回值改造与错误处理
原函数的问题在于没有返回任何结果,导致调用后无法判断登录是否成功。我们可以通过以下方式改造函数,让它返回结构化的结果,方便页面进行分支处理:
改造后的登录函数
function login($hostname, $version, $database, $username, $password) { $url = 'https://' . $hostname . '/fmi/data/' . $version . '/databases/' . rawurlencode($database) . '/sessions'; $ch = curl_init(); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array ( 'Content-Type: application/json', 'Authorization: Basic ' . base64_encode($username . ':' . $password) )); curl_setopt($ch, CURLOPT_POSTFIELDS, '{}'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_URL, $url); $result = curl_exec($ch); $error = curl_error($ch); curl_close($ch); // 先处理CURL请求本身的错误 if ($result === false) { return [ 'success' => false, 'error' => 'CURL请求错误: ' . $error ]; } $loginResultArray = json_decode($result, true); // 处理JSON解析失败的情况 if (json_last_error() !== JSON_ERROR_NONE) { return [ 'success' => false, 'error' => '响应解析错误: ' . json_last_error_msg() ]; } // 检查接口返回的错误 $errorCode = $loginResultArray['messages'][0]['code'] ?? ''; $errorMessage = $loginResultArray['messages'][0]['message'] ?? '未知错误'; if ($errorCode !== '0') { return [ 'success' => false, 'error' => '登录错误: ' . $errorMessage . ' (' . $errorCode . ')' ]; } else { return [ 'success' => true, 'token' => $loginResultArray['response']['token'] ?? '' ]; } }
页面调用与错误处理
调用函数时接收返回值,根据success字段判断结果:
require_once 'inc/functions.php'; // 假设以下变量已提前定义 $hostname = '你的主机地址'; $version = '接口版本'; $database = '数据库名称'; $username = '用户名'; $password = '密码'; $loginResult = login($hostname, $version, $database, $username, $password); if (!$loginResult['success']) { // 登录失败,处理错误逻辑 echo $loginResult['error']; // 可在此终止页面执行或跳转到错误页 exit; } else { // 登录成功,使用返回的token进行后续操作 $token = $loginResult['token']; // 示例:将token存入session $_SESSION['fm_session_token'] = $token; }
关键改进点
- 新增CURL请求失败、JSON解析失败的错误处理,避免数组索引不存在导致的报错
- 使用关联数组统一返回格式,包含
success状态标识:成功时返回token,失败时返回error信息 - 调用时通过判断
success字段即可清晰实现分支逻辑
内容的提问来源于stack exchange,提问作者user982124
相关产品推荐
相关产品推荐

