🔍 Deep Debug - To-Do Cloud

زمان: 2026-07-12 14:53:46


📄 1. بررسی فایل api.php
✅ فایل api.php وجود دارد
📏 حجم فایل: 133264 بایت
🕒 آخرین تغییر: 2026-06-03 13:20:08
🔧 بررسی syntax error با php -l
✅ Syntax: بدون خطا
🔍 جستجوی توابع کلیدی در فایل
✅ تابع addCloudTransaction پیدا شد
✅ تابع processCloudAction پیدا شد
✅ تابع handleLogin پیدا شد
✅ تابع handleRegister پیدا شد
❌ تابع get_csrf_token پیدا نشد! (api.php قدیمی است)
❌ تابع check_session پیدا نشد! (api.php قدیمی است)
❌ تابع get_cloud_balance پیدا نشد! (api.php قدیمی است)
📖 10 خط اول api.php
<?php
// ============================================
// To-Do Cloud - API یکپارچه نهایی (نسخه 17.0)
// شامل: ماتریس آیزنهاور، خرید کلود از دیتابیس با تخفیف، تنظیمات پیش‌فرض تب‌ها،
// کیف پول حرفه‌ای، موزیک پس‌زمینه، فاکتور هوشمند، و تمام قابلیت‌های قبلی
// ============================================

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

define('DB_HOST', 'localhost');
define('DB_NAME', 'planir_focuscloud');
define('DB_USER', 'planir_focuscloud');
define('DB_PASS', 'Mohammad@1381');
🌐 2. تست مستقیم api.php (curl داخلی)
2.1 تست: get_csrf_token
HTTP Status: 400
Headers:
HTTP/1.1 400 Bad Request
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
x-powered-by: PHP/8.2.31
set-cookie: PHPSESSID=jah2qofjshg181d250k2gdo8pg; path=/
expires: Thu, 19 Nov 1981 08:52:00 GMT
cache-control: no-store, no-cache, must-revalidate
pragma: no-cache
content-type: application/json; charset=utf-8
access-control-allow-origin: *
access-control-allow-methods: POST, GET, OPTIONS
access-control-allow-headers: Content-Type, X-CSRF-Token
content-length: 53
date: Sun, 12 Jul 2026 14:53:46 GMT

Body (JSON):
{"success":false,"message":"اکشن نامعتبر"}
✅ پاسخ JSON معتبر - success: false
2.2 تست: check_session
HTTP Status: 401
Headers:
HTTP/1.1 401 Unauthorized
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
x-powered-by: PHP/8.2.31
set-cookie: PHPSESSID=9rqb8b8q0h13u0ctoo53jur0g9; path=/
expires: Thu, 19 Nov 1981 08:52:00 GMT
cache-control: no-store, no-cache, must-revalidate
pragma: no-cache
content-type: application/json; charset=utf-8
access-control-allow-origin: *
access-control-allow-methods: POST, GET, OPTIONS
access-control-allow-headers: Content-Type, X-CSRF-Token
content-length: 58
date: Sun, 12 Jul 2026 14:53:46 GMT

Body (JSON):
{"success":false,"message":"لطفاً وارد شوید"}
✅ پاسخ JSON معتبر - success: false
2.3 تست: login
HTTP Status: 401
Headers:
HTTP/1.1 401 Unauthorized
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
x-powered-by: PHP/8.2.31
set-cookie: PHPSESSID=18231ltmb06eosthcfct0kcfvh; path=/
expires: Thu, 19 Nov 1981 08:52:00 GMT
cache-control: no-store, no-cache, must-revalidate
pragma: no-cache
content-type: application/json; charset=utf-8
access-control-allow-origin: *
access-control-allow-methods: POST, GET, OPTIONS
access-control-allow-headers: Content-Type, X-CSRF-Token
content-length: 73
date: Sun, 12 Jul 2026 14:53:46 GMT

Body (JSON):
{"success":false,"message":"اطلاعات ورود اشتباه است"}
✅ پاسخ JSON معتبر - success: false
📋 3. آخرین خطاهای PHP (error_log) - 30 خط آخر
✅ فایل لاگ یافت شد: error_log
⚠️ فایل خالی یا خطا در خواندن
🗄️ 4. تست دیتابیس (جزئیات)
✅ اتصال به دیتابیس موفق
✅ جدول attachments وجود دارد
✅ جدول rate_limits وجود دارد
✅ جدول user_csrf_tokens وجود دارد
✅ جدول user_onboarding وجود دارد
✅ جدول push_subscriptions وجود دارد
🔑 5. تست CSRF Token با متد جایگزین
ارسال درخواست با fetch از فرانت‌اند (شبیه‌سازی مرورگر)
⚡ 6. تست نهایی: درخواست ساده به api.php بدون پارامتر
HTTP Status: 400
Content-Type: application/json; charset=utf-8
کل پاسخ (اول 500 کاراکتر):
HTTP/1.1 400 Bad Request
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
x-powered-by: PHP/8.2.31
set-cookie: PHPSESSID=lav4o9m8nqhbkilhbmp8jvr25b; path=/
expires: Thu, 19 Nov 1981 08:52:00 GMT
cache-control: no-store, no-cache, must-revalidate
pragma: no-cache
content-type: application/json; charset=utf-8
access-control-allow-origin: *
access-control-allow-methods: POST, GET, OPTIONS
access-control-allow-headers: Content-Type, X-CSRF-Token
content-length: 53
date: Sun, 12 Jul
✅ api.php پاسخ می‌دهد (400: اکشن نامعتبر) - این طبیعی است چون action ارسال نشده.
💡 7. جمع‌بندی و راهکار قطعی