Initial commit: 心理咨询预约系统
PHP 前后端一体:首页咨询师列表、预约表单、管理后台、二维码准入与邮件通知;敏感配置与提交数据通过 .gitignore 排除。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
129
api/diagnostics.php
Normal file
129
api/diagnostics.php
Normal file
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
require __DIR__ . '/bootstrap.php';
|
||||
require __DIR__ . '/mailer.php';
|
||||
|
||||
function requireDebugAccess(): void
|
||||
{
|
||||
$token = trim((string) ($_GET['access'] ?? $_POST['access'] ?? ''));
|
||||
$config = loadAppConfig();
|
||||
if ($token === '' || $token !== ($config['accessToken'] ?? '')) {
|
||||
jsonError('无权访问,请在 URL 中携带 ?access=访问令牌', 403);
|
||||
}
|
||||
}
|
||||
|
||||
function checkWritableDir(string $dir): array
|
||||
{
|
||||
if (!is_dir($dir)) {
|
||||
return ['ok' => 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('未知操作');
|
||||
Reference in New Issue
Block a user