false, 'message' => '目录不存在']; } if (!is_writable($dir)) { return ['ok' => false, 'message' => '目录不可写,请检查权限']; } $testFile = $dir . '/.write_test_' . uniqid(); $written = @file_put_contents($testFile, 'ok'); if ($written === false) { return ['ok' => false, 'message' => '无法写入测试文件']; } @unlink($testFile); return ['ok' => true, 'message' => '可写']; } if ($_SERVER['REQUEST_METHOD'] === 'GET') { requireDebugAccess(); $dataDir = checkWritableDir(DATA_DIR); $submissions = readSubmissions(); $mailConfig = loadMailConfig(); $recipients = getMailRecipients($mailConfig); jsonResponse([ 'ok' => true, 'time' => date('Y-m-d H:i:s'), 'phpVersion' => PHP_VERSION, 'assetVersion' => getAssetVersion(), 'extensions' => [ 'json' => extension_loaded('json'), 'openssl' => extension_loaded('openssl'), 'session' => extension_loaded('session'), ], 'paths' => [ 'root' => ROOT_DIR, 'dataDir' => DATA_DIR, 'submissionsFile' => SUBMISSIONS_FILE, 'mailConfig' => MAIL_CONFIG_FILE, ], 'dataDir' => $dataDir, 'submissions' => [ 'count' => count($submissions), 'fileExists' => is_file(SUBMISSIONS_FILE), 'last' => $submissions !== [] ? end($submissions) : null, ], 'mail' => [ 'enabled' => !empty($mailConfig['enabled']), 'recipientCount' => count($recipients), 'recipients' => $recipients, 'smtpHost' => $mailConfig['smtp']['host'] ?? '', ], 'apiUrls' => [ 'config' => 'api/config.php', 'doctors' => 'api/doctors.php', 'submit' => 'api/submit.php', 'diagnostics' => 'api/diagnostics.php', ], ]); } if ($_SERVER['REQUEST_METHOD'] !== 'POST') { jsonError('方法不允许', 405); } requireDebugAccess(); $action = trim((string) ($_GET['action'] ?? 'submit')); if ($action === 'mail') { $submissions = readSubmissions(); if ($submissions === []) { jsonError('暂无提交记录,无法测试邮件'); } $sent = sendSubmissionMail($submissions); if (!$sent) { jsonError('邮件发送失败,请查看服务器 PHP 错误日志', 500); } jsonResponse(['ok' => true, 'message' => '测试邮件已发送', 'count' => count($submissions)]); } if ($action === 'submit') { $suffix = date('His'); $record = [ 'id' => uniqid('debug_', true), 'createdAt' => date('c'), 'doctorId' => 'song', 'doctorName' => '宋崇升', 'nickname' => '调试用户' . $suffix, 'gender' => '男', 'contact' => '1380013' . str_pad((string) random_int(0, 9999), 4, '0', STR_PAD_LEFT), 'description' => '这是一条调试提交 ' . date('Y-m-d H:i:s'), ]; $submissions = readSubmissions(); $submissions[] = $record; if (!saveSubmissions($submissions)) { jsonError(getSaveSubmissionsError(), 500); } $mailSent = sendSubmissionMail($submissions); jsonResponse([ 'ok' => true, 'message' => '调试提交成功', 'record' => $record, 'total' => count($submissions), 'mailSent' => $mailSent, ]); } jsonError('未知操作');