prepare("SELECT value FROM school_sys_config WHERE config_key = 'STORAGE'"); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); if (!$result) { die("❌ 未找到存储配置\n"); } $storage_config = json_decode($result['value'], true); if (!$storage_config || !isset($storage_config['tencent'])) { die("❌ 腾讯云存储配置不存在\n"); } $config = $storage_config['tencent']; echo "📋 腾讯云COS配置检查\n"; echo "====================\n"; echo "Bucket: " . $config['bucket'] . "\n"; echo "Region: " . $config['region'] . "\n"; echo "Access Key: " . substr($config['access_key'], 0, 8) . "***\n"; echo "Secret Key: " . substr($config['secret_key'], 0, 8) . "***\n"; echo "Domain: " . $config['domain'] . "\n\n"; // 测试连接 echo "🔍 测试腾讯云COS连接...\n"; $client = new Client([ 'region' => $config['region'], 'credentials' => [ 'secretId' => $config['access_key'], 'secretKey' => $config['secret_key'] ] ]); // 测试获取存储桶信息 try { $result = $client->headBucket([ 'Bucket' => $config['bucket'] ]); echo "✅ 存储桶连接成功\n"; echo "存储桶信息: " . json_encode($result->toArray()) . "\n\n"; } catch (Exception $e) { echo "❌ 存储桶连接失败: " . $e->getMessage() . "\n"; echo "错误代码: " . $e->getCode() . "\n"; // 分析常见错误 if (strpos($e->getMessage(), 'SignatureDoesNotMatch') !== false || strpos($e->getMessage(), 'The Signature you specified is invalid') !== false) { echo "\n🔧 签名错误诊断:\n"; echo "1. 检查 Access Key 和 Secret Key 是否正确\n"; echo "2. 检查服务器时间是否同步(时间偏差不能超过15分钟)\n"; echo "3. 检查密钥是否有相应的权限\n"; echo "4. 检查区域配置是否正确\n"; } if (strpos($e->getMessage(), 'NoSuchBucket') !== false) { echo "\n🔧 存储桶不存在:\n"; echo "1. 检查存储桶名称是否正确\n"; echo "2. 检查存储桶是否在指定区域\n"; } echo "\n"; } // 测试服务器时间 echo "⏰ 服务器时间检查:\n"; echo "当前时间: " . date('Y-m-d H:i:s T') . "\n"; echo "UTC时间: " . gmdate('Y-m-d H:i:s T') . "\n"; echo "时间戳: " . time() . "\n\n"; // 测试简单上传 echo "📤 测试文件上传...\n"; try { $test_content = "Test upload at " . date('Y-m-d H:i:s'); $test_key = 'test/upload_test_' . time() . '.txt'; $result = $client->putObject([ 'Bucket' => $config['bucket'], 'Key' => $test_key, 'Body' => $test_content, ]); echo "✅ 测试文件上传成功\n"; echo "文件路径: " . $test_key . "\n"; echo "ETag: " . $result['ETag'] . "\n"; // 清理测试文件 try { $client->deleteObject([ 'Bucket' => $config['bucket'], 'Key' => $test_key, ]); echo "🗑️ 测试文件已清理\n"; } catch (Exception $e) { echo "⚠️ 测试文件清理失败: " . $e->getMessage() . "\n"; } } catch (Exception $e) { echo "❌ 测试文件上传失败: " . $e->getMessage() . "\n"; echo "错误代码: " . $e->getCode() . "\n"; } } catch (PDOException $e) { die("❌ 数据库连接失败: " . $e->getMessage() . "\n"); } catch (Exception $e) { die("❌ 发生错误: " . $e->getMessage() . "\n"); } echo "\n🎯 诊断完成\n"; echo "如果仍有问题,请检查:\n"; echo "1. 腾讯云控制台中的密钥状态\n"; echo "2. 存储桶的权限设置\n"; echo "3. 网络连接是否正常\n"; echo "4. PHP扩展是否完整(curl, openssl等)\n"; ?>