You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:39:18