ComusThumbz Documentation
Admin Login

Rozwiązywanie problemów z ComusThumbz


Przegląd

Ten przewodnik konsoliduje informacje dotyczące rozwiązywania problemów dla całego CMS ComusThumbz, obejmujące zarówno panel administracyjny (ct/admin/) i na pierwszych stronach publicznych (korzeń projektu). Kwestie są organizowane według kategorii z objawami, przyczynami i rozwiązaniami.

Wskazówka: Przed nurkowaniem w konkretnych kwestiach, należy przejść przez listę kontrolną Quick Diagnostic poniżej, aby zidentyfikować najczęstsze problemy.


Szybka lista kontrolna diagnostyczna

Przeprowadź te kontrole w porządku, gdy napotkasz jakiekolwiek problemy:

  1. Dziennik błędów PHP - Sprawdź ct/logs/ i dziennik błędów PHP serwera dla ostatnich błędów
  2. Miejsca pracy na wronie - Weryfikacja pracy cron są uruchomione (większość "danych nie aktualizacji" problemy)
  3. Uprawnienia do pliku - Web server musi mieć dostęp do odczytu / zapisu uploads/, ct/logs/, ct/dat/
  4. Podłączenie do bazy danych - Test z https://yourdomain.com/tools/simpletest.php?key=comus2025
  5. Zdrowie API - Test z https://yourdomain.com/ct/api/v1/features
  6. Przełączniki - Wyłączone funkcje są najczęstszą przyczyną "strona nie pokazuje"
  7. Konsola przeglądarki - Sprawdź błędy JavaScript (F12 - > Konsola)
  8. Karta sieciowa - Sprawdzić, czy nie padły wnioski API (F12 - > Sieć)

Błędy serwera i PHP

Blank Page / 500 Błąd serwera wewnętrznego

Błąd:
Objawy: Strona pokazuje całkowicie puste lub zwraca HTTP 500 bez widocznych błędów.

Często Przyczyny:

  1. declare(stricttypes=1) umieszczenie - To musi być pierwsza linijka. . Jakiekolwiek białe spacje, znak BOM, lub kod zanim spowoduje błąd śmiertelny.
  1. Błąd składni PHP - Sprawdź dziennik błędów:
tail -50 /var/log/php/error.log
  1. Brak pliku include - A requireonce dla pliku, który nie istnieje:
grep -r "requireonce" ct/admin/yourpage.php
  1. Błąd wyświetlania wyłączony - Tymczasowo włączyć do debugowania:
iniset('displayerrors', 1);
   errorreporting(EALL);

Roztwór: Zaznacz najpierw dziennik błędów PHP. Jeśli puste, włącz displayerrors tymczasowo, aby zobaczyć rzeczywisty błąd.

Błąd administracyjny Singleton

Błąd:
Objawy: Fatal error: Cannot instantiate AdminLanguage lub podobny błąd 500 na stronach administratora.

Przyczyna: Stosowanie new AdminLanguage() zamiast wzoru singleton.

Napraw:

// WRONG

$lang = new AdminLanguage();


// CORRECT
$lang = AdminLanguage::getInstance();

Wyczerpany limit pamięci

Błąd:
Objawy: Fatal error: Allowed memory size of X bytes exhausted

Wspólne wyzwalacze:

  • Duże przesyłanie plików wideo
  • Przetwarzanie dużych galerii obrazu
  • Operacje luzem na rekordach 400K + cam

Roztwór: Zwiększ limit pamięci PHP:

; php.ini

memorylimit = 512M        ; Minimum recommended

uploadmaxfilesize = 2G    ; For video uploads

postmaxsize = 2G          ; Must be >= uploadmaxfilesize

Lub skrypt per-:

iniset('memorylimit', '512M');

Max Czas realizacji przekroczony

Błąd:
Objawy: Fatal error: Maximum execution time of 30 seconds exceeded

Wspólne wyzwalacze:

  • Roboty w zakresie obróbki wideo cron
  • Duże zapytania w bazie danych
  • Zewnętrzne wywołania API timing out

Roztwór:

; php.ini

maxexecutiontime = 300    ; 5 minutes for web requests

Dla cron jobs, set unlimited:

settimelimit(0);

Błędy w pozwoleniu na plik

Błąd:
Objawy: Permission denied błędy podczas pisania plików lub tworzenia katalogów.

Wymagane uprawnienia:

KatalogZezwolenieCel
uploads/775Wysyłanie użytkowników, awatary, zawartość
uploads/videos/original/775Surowe pliki wideo
uploads/ftpuploads/775Wczytywanie wsadu FTP
ct/logs/775Rejestry zastosowań
ct/dat/775Pliki konfiguracyjne
assets/images/755Obrazy statyczne
Napraw:
chown -R www-data:www-data uploads/ ct/logs/ ct/dat/
chmod -R 775 uploads/ ct/logs/ ct/dat/

Problemy z bazami danych

Połączenie z bazą danych nie powiodło się

Błąd:
Objawy: Strony nie ładują, API zwraca 500 błędów, "Połączenie odrzucone" w dziennikach.

Diagnoza:

  1. Test z szybkim narzędziem bazy danych:

https://yourdomain.com/tools/simpletest.php?key=comus2025

  1. Weryfikacja uwierzytelniania ct/dat/config.inc.php:
$dbhost = 'localhost';
   $dbuser = 'admincomus';
   $dbpasswd = 'yourpassword';
   $db = 'admincomus';
  1. Zaznacz uruchomiony MySQL:
systemctl status mysql

Roztwór: Sprawdzić, czy usługa MySQL jest uruchomiona, a referencje pasują do konfiguracji bazy danych.

Zamki stołowe i zapytania blokujące

Błąd:
Objawy: API wywołuje timeout, ale bezpośrednie zapytania w bazie danych są szybkie. Strony wiszą przez 30-60 sekund.

Diagnoza:

  1. Uruchom narzędzie stanu MySQL:
https://yourdomain.com/tools/mysqlstatus.php?key=comus2025

  1. Sprawdź, czy nie ma wątpliwości:
SHOW FULL PROCESSLIST;
Szukaj zapytań trwających dłużej niż 30 sekund.
  1. Użyj kontrolera blokady bazy danych do analizy blokady InnoDB:
https://yourdomain.com/tools/dblockinspector.php?key=comus2025

Roztwór:

  1. Wyłącz zapytanie blokujące:

KILL ;

  1. Lub za pomocą narzędzia debugowania:
https://yourdomain.com/tools/mysqlstatus.php?key=comus2025&kill=PROCESSID

Często winowajca: W apicron.php marksiteperformersoffline() funkcja aktualizuje wszystkich wykonawców na raz. To zostało naprawione z zaznaczonymi aktualizacjami (1000 rzędów na raz z pauzami 10ms).

Powolne zapytania

Błąd:
Objawy: Określone strony ładują się powoli, szczególnie wykonawcy kamery lub wyświetlania wideo.

Diagnoza:

-- Check table locks

SHOW OPEN TABLES WHERE Inuse > 0;


-- Analiza wydajności tabeli
ANALIZA TABLE tblCamsperformers;
ANALIZA TABELA TBLVideo;


-- Check index usage
SHOW INDEX FROM tblCamsPerformers;
SHOW INDEX FROM tblVideos;

Roztwór:

  1. Weryfikacja indeksów istnieje w kolumnach często zadawanych pytań
  2. Stosowanie EXPLAIN w sprawie powolnych zapytań w celu identyfikacji brakujących indeksów
  3. Sprawdź, czy APCu cache działa (php -m | grep apcu)
  4. Dla twórców kamery, zastosowanie ?fast=1 pomijanie zapytań COUNT

Polecenia debugowania SQL

Konfiguracja wymagana:
Szybkie odniesienie do ręcznego debugowania bazy danych:

-- Show all running queries
SHOW FULL PROCESSLIST;

-- Zabij konkretne zapytanie
KILL 123;


-- Zabić wszystkie połączenia snu starsze niż 30 sekund
SELECT CONCAT ("KILL", id ";")
Z informacjiSchema.proceslist
Gdzie komenda = 'Śpij' I czas > 30;


-- Sprawdź zamki stołowe
Pokaż otwarte table gdzie
stosowanie > 0;


-- Check InnoDB status for deadlocks
SHOW ENGINE INNODB STATUS;


Przetwarzanie wideo

Filmy utknęły w 'pending'

Błąd:
Objawy: Filmy przesłane, ale nigdy nie przetwarzane. Status pozostaje na czas nieokreślony.

To najczęstszy problem wideo. Sprawdź je w kolejności:

  1. Roboty na wrotkach nieuruchomione - Procesor wideo działa zgodnie z harmonogramem:
# Must be in crontab
  • php / path / to / ct / admin / cron / ftpwideoprocesor.php

   /5     php /path/to/ct/admin/cron/videoprocessor.php
  1. Zły plikformat ścieżki w bazie danych - Najczęstszy błąd danych:
-- Check filepath format
   SELECT videoid, filepath, status FROM tblVideos WHERE status='pending';

Ścieżka pliku MUSI być: uploads/videos/original/{filename}

NIE tylko nazwę pliku, i NIE w tym ct/ Prefiks.

  1. Naprawiono nieprawidłowe ścieżki plików:
-- Fix paths that are just filenames
   UPDATE tblVideos
   SET filepath = CONCAT('uploads/videos/original/', filepath)
   WHERE filepath NOT LIKE 'uploads/%'
     AND filepath NOT LIKE '%/%'
     AND status = 'pending';
  1. Wyczyść zablokowaną kolejkę przetwarzania:
DELETE FROM tblVideoProcessingJobs
   WHERE videoid IN (SELECT videoid FROM tblVideos WHERE status = 'pending');
  1. Weryfikacja pliku istnieje na dysku:
ls -la /path/to/ct/uploads/videos/original/

FFmpeg / FFsonder Nie znaleziono

Błąd:
Objawy: Przetwarzanie wideo nie powiodło się z "FFmpeg nie znaleziono" lub "FFsonder nie znaleziono" w dziennikach.

Diagnoza:

which ffmpeg

which ffprobe

ffmpeg -version

Roztwór:

  1. Zainstaluj FFmpeg:

sudo apt install ffmpeg    # Debian/Ubuntu

  1. Sprawdź ścieżki w konfigu dopasować rzeczywiste lokalizacje:
// ct/dat/config.inc.php
   $ffmpegpath = '/usr/bin/ffmpeg';
   $ffprobepath = '/usr/bin/ffprobe';
  1. Upewnij się, że PHP może wykonywać polecenia powłoki:
// Check if exec() is disabled
   vardump(functionexists('exec'));

Błędy przetwarzania wideo

Błąd:
Objawy: Filmy zmieniają status 'błędu' po próbie przetwarzania.

Diagnoza:

  1. Sprawdź dzienniki przetwarzania:

tail -100 ct/logs/videoprocessor/.log

  1. Sprawdź zapis wideo:
SELECT videoid, filepath, status, errormessage
   FROM tblVideos WHERE status = 'error'
   ORDER BY videoid DESC LIMIT 10;

Częste przyczyny:

  • Plik źródłowy przerwany
  • Nieobsługiwany kodek
  • Niewystarczająca powierzchnia dysku
  • Wersja FFmpeg zbyt stara (potrzeba 4.0 +)

Roztwór: Napraw przyczynę, a następnie zresetuj wideo do ponownego przetwarzania:

UPDATE tblVideos SET status = 'pending', errormessage = NULL

WHERE videoid = ;

HLS Streaming nie działa

Błąd:
Objawy: Gracz wideo pokazuje błąd lub wraca do MP4. HLS .m3u8 pliki nie ładowane.

Diagnoza:

  1. Sprawdź, czy pliki HLS zostały wygenerowane:

SELECT videoid, hlspath FROM tblVideoFiles WHERE videoid = ;

  1. Weryfikacja listy odtwarzania jest dostępna:
curl -I https://cdn.example.com/videos/{shard}/{id}/hls/master.m3u8
  1. Check MIME type configuration. Your web server must serve .m3u8 as application/vnd.apple.mpegurl:
# Apache .htaccess
   AddType application/vnd.apple.mpegurl .m3u8
   AddType video/MP2T .ts

Solution: Verify HLS files exist on CDN, MIME types are correct, and securemedia.php token is valid.

 

Thumbnails Not Generating

 

Error:
Symptom: Videos process but have no poster image, preview, or timeline thumbnails.

 

Diagnosis:

SELECT videoid, posterpath, previewpath

FROM tblVideoFiles WHERE videoid = <ID>;

 

Common causes:

  • ImageMagick not installed (convert command needed for contact sheets)
  • FFmpeg failed during thumbnail extraction
  • CDN upload for thumbnails failed (check storage server logs)

 

Solution:

# Verify ImageMagick

which convert

convert --version

 


Reprocess thumbnails only


php ct/admin/cron/videoprocessor.php --video-id=<ID> --thumbnails-only

CDN Upload Failures

 

Error:
Symptom: Video processes locally but files don't appear on CDN storage server.

 

Diagnosis:

  1. Check storage server configuration:

SELECT  FROM tblStorageServers WHERE enabled = 1;

   SELECT  FROM tblStorageServerGroups;

 

  1. Check file location records:
SELECT  FROM tblStorageFileLocations WHERE videoid = <ID>;
  1. Verify CDN credentials and connectivity from the admin panel.

File sharding formula: floor(videoid / 1000) 1000
Example: Video ID 4321 goes to shard 4000:

https://cdn.example.com/videos/4000/4321/webmp4/web.mp4

 

Solution: Check CDN credentials, test connectivity, verify storage server group assignment.

 

Distributed Conversion Server Issues

 

Error:
Symptom: Videos not being assigned to remote conversion servers, or remote processing fails.

 

Diagnosis:

  1. Check server status:

SELECT serverid, title, statusid, currentjobs, maxconcurrentjobs,

          lastheartbeat, loadaverage

   FROM tblConversionServers WHERE statusid = 1;

 

  1. Check conversion logs:
SELECT  FROM tblConversionServerLogs
   WHERE loglevel IN ('WARNING', 'ERROR')
   ORDER BY createdat DESC LIMIT 20;
  1. Verify settings:
SELECT  FROM tblSettings WHERE settinggroup = 'videoprocessing';

Solution:

  • Ensure conversionuseremoteservers is set to 1
  • Verify remote server SSH/FTP connectivity
  • Check that FFmpeg is installed on remote servers
  • Verify conversionfallbacktolocal is 1 for automatic fallback

 


API Issues

API Authentication Failures

 

Error:
Symptom: API returns 401 Unauthorized or "Invalid token" errors.

 

Common causes:

  1. Wrong user ID column - tblCMSUsers uses id, NOT userid:
-- CORRECT
   SELECT id, username, accountstatus FROM tblCMSUsers WHERE id = 123;

-- WRONG (column doesn't exist)
SELECT userid FROM tblCMSUsers;

 

  1. Wrong status column - tblCMSUsers uses accountstatus, NOT status:
-- CORRECT
   WHERE accountstatus = 'active'

-- WRONG
WHERE status = 'active'

 

  1. JWT token expired - Tokens have an expiration time. Re-authenticate:
POST /ct/api/v1/auth/login
  1. JWT secret mismatch - Verify in config:
$jwtsecret = md5($domain . $licensekey);

API Calls Failing from JavaScript

 

Error:
Symptom: Frontend pages can't load data. Browser console shows fetch errors.

 

Diagnosis:

  1. Check ApiClient base URL:

// Browser console

   const api = new ApiClient();

   console.log(api.baseUrl);

 

  1. Check Network tab (F12) for the failing request - note the URL, status code, and response body.
  1. Verify the endpoint exists in the router:
  • File: ct/api/v1/index.php
  • 90+ endpoints defined
  1. Check JWT token:
console.log(localStorage.getItem('authtoken'));

Solution: Verify base URL detection, check endpoint exists in router, verify authentication token if endpoint requires auth.

 

API Returns Empty Data

 

Error:
Symptom: API returns {"success": true, "data": []} with no content.

 

Diagnosis:

  1. Check if data exists in the database:

SELECT COUNT() FROM tblVideos WHERE status = 'active';

   SELECT COUNT() FROM tblCamsPerformers WHERE status = 1 AND enabled = 1;

 

  1. Check feature toggles - some API endpoints return empty when features are disabled.
  1. Check query parameters - pagination offset may be beyond available data.

Solution: Verify data exists in the database and feature toggles are enabled.

 

CORS Errors

 

Error:
Symptom: Browser console shows Access-Control-Allow-Origin errors.

 

Cause: API and frontend on different domains or ports.

Solution: Ensure the API sets proper CORS headers:

header('Access-Control-Allow-Origin: https://yourdomain.com');

header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');

header('Access-Control-Allow-Headers: Content-Type, Authorization');

 

Or in .htaccess:

Header set Access-Control-Allow-Origin "https://yourdomain.com"

 


Frontend Issues

Features Not Showing / All Disabled

 

Error:
Symptom: Pages redirect with "feature disabled" message, or navigation items are missing.

 

Diagnosis:

  1. Test the features API endpoint:

curl https://yourdomain.com/ct/api/v1/features

 

  1. Check feature cache - APCu may have stale data:
// Clear APCu cache
   apcuclearcache();
  1. Check featurehelper.php - all features default to enabled if not found in database.
  1. Verify feature settings in admin panel: Admin Panel -> Feature Toggles

Solution: Clear APCu cache, verify feature settings in admin panel, check that the API is reachable.

 

Translations Not Loading

 

Error:
Symptom: Translation keys displayed instead of text (e.g., videos.title instead of "Videos").

 

Diagnosis:

  1. Verify lang/en.json exists and is valid JSON:
php -r "jsondecode(filegetcontents('lang/en.json')); echo jsonlasterrormsg();"

 

  1. Check file permissions (must be readable by web server).
  1. Verify the translation key exists in the JSON:
# Search for a specific key
   grep -o '"videos"' lang/en.json
  1. Check for typos in nested keys - videos.sortby.videoid requires all parent keys to exist.

Solution: Validate JSON syntax, check file permissions, verify key path exists in the translation file.

 

CSS Styles Not Applying

 

Error:
Symptom: Page looks unstyled or broken layout.

 

Rules:

  1. Only use assets/css/style.css - no external CSS frameworks (Bootstrap, Tailwind, etc.)
  2. Check for specificity conflicts with Style Manager overrides (Phase 12)
  3. Verify the stylesheet is loaded in includes/header.php
  4. Check browser cache - append ?v=timestamp to stylesheet URL

 

Solution:

// Force cache bust

<link rel="stylesheet" href="assets/css/style.css?v=<?= time() ?>">

 

Dark Mode Not Working

 

Error:
Symptom: Dark mode toggle doesn't change the page appearance.

 

Diagnosis:

  1. Check featuredarkmode is enabled in feature toggles
  2. Verify localStorage is available:

console.log(localStorage.getItem('comusdarkmode'));

  1. Confirm body.dark-mode CSS rules exist in assets/css/style.css
  2. Check that both body and html elements get the class:

document.body.classList.contains('dark-mode');

   document.documentElement.classList.contains('dark-mode');

 

Solution: Enable the feature toggle, clear localStorage, verify CSS dark mode rules exist.

 

Video Player Not Loading

 

Error:
Symptom: Video player area is blank, shows error, or spinner never completes.

 

Diagnosis:

Check browser Network tab for /ct/api/v1/videos/{id} requestVerify video data is returned with valid URLsCheck access control - user may lack permission (free/premium/VIP)For HLS: verify HLS.js is loaded and browser supports it
  1. Check securemedia.php token generation:

GET /securemedia.php?token=...&type=video&id=...

 

Solution: Check API response, verify access control, ensure HLS.js or native HLS support is available, verify media token is valid.

 

Click Tracking Not Working

 

Error:
Symptom: External links not being tracked, or affiliate revenue is missing.

 

Critical rule: ALL external links MUST route through click.php. Direct links incur a 100% skim penalty.

Correct format:

// PHP

$url = sprintf('click.php?url=%s&type=video&id=%d',

    urlencode($externalurl), $videoid);

 


// JavaScript
const url = click.php?url=${encodeURIComponent(externalUrl)}&type=${type}&id=${id};

 

Diagnosis:

  1. Check that click.php exists at the project root
  2. Verify tblClickTracking is receiving records:

SELECT  FROM tblClickTracking ORDER BY clickid DESC LIMIT 10;

  1. Check tblContentClicks for aggregated counts

 

Solution: Audit all external links to ensure they use click.php. Use browser DevTools to verify link href attributes.

 

SEO Meta Tags Missing

 

Error:
Symptom: Social media shares show generic or missing preview data. Search engines don't index properly.

 

Cause: SEO data must be loaded BEFORE header.php is included.

Correct order:

// 1. Load config and API helper FIRST

requireonce DIR . '/ct/dat/config.inc.php';

requireonce DIR . '/includes/InternalApiHelper.php';

 


// 2. Fetch data for SEO
$api = InternalApiHelper::getInstance();
$videoData = $api->getVideoForSeo($videoId);


// 3. NOW include header (generates meta tags from loaded data)
requireonce DIR . '/includes/header.php';

 

Diagnosis:

View page source and check for <meta property="og:title"> tagsUse Facebook/Twitter debugger tools to validate Open Graph tags
  • Check ct/dat/seosettings.json for template configuration

 

Solution: Ensure SEO data is loaded before header, verify SeoHelper.php and InternalApiHelper.php are working.

 


Cam Performers System

No Performers Appearing

 

Error:
Symptom: Cam performers page is empty, no performer cards shown.

 

Diagnosis (in order):

  1. Check cron jobs are running:

php ct/admin/cronupdatecams.php

  1. Verify API credentials in Admin -> Cam Settings
  2. Check tblCamsSites for enabled sites:

SELECT recordnum, name, enabled FROM tblCamsSites WHERE enabled = 1;

  1. Verify featurelivecams is enabled in feature toggles
  2. Check logs:

tail -50 ct/logs/cron-update.log

  1. Test the internal API directly:
GET /ct/api/v1/cams/online?perpage=1&fast=1

 

Solution: Enable cron jobs, verify API credentials, enable the feature toggle.

 

All Performers Showing Offline

 

Error:
Symptom: Performers exist but all show as offline.

 

Diagnosis:

  1. Run the cron update manually:

php ct/admin/cronupdatecams.php

  1. Check if external API is responding:

curl --location 'https://performersext-api.pcvdaa.com/performers-ext/?token=<TOKEN>&gender=f&live=true&size=1&page=1' \

   --header 'x-api-key: <APIKEY>' \

   --header 'User-Agent: ComusThumbz/1.0'

  1. Verify API token hasn't expired
  2. Check database for online performers:
SELECT COUNT() FROM tblCamsPerformers WHERE status = 1;

 

Solution: Run cron manually, verify external API credentials are valid.

 

External API 403 Forbidden

 

Error:
Symptom: External CrakRevenue API returns {"message": "Forbidden"} or HTML error page.

 

Causes:

  1. Missing or invalid x-api-key header
  2. Missing User-Agent header (returns HTML error page)
  3. API key revoked by CrakRevenue

 

Diagnosis:

-- Check stored API credentials

SELECT recordnum, name, apiData, parameters FROM tblCamsSites WHERE enabled = 1;

 

Solution: Verify x-api-key (stored in tblCamsSites.apiData) and ensure requests include a User-Agent header. Contact CrakRevenue if key was revoked.

 

External API 401 Unauthorized

 

Error:
Symptom: External API returns {"message": "Unauthorized: brands not allowed"} or similar.

 

Causes:

  1. Invalid or missing token parameter
  2. Requesting brands not authorized for your token
  3. Token is domain-bound and being used from wrong domain

 

Diagnosis:

-- Check token values

SELECT recordnum, name, parameters, brand FROM tblCamsSites WHERE enabled = 1;

 

Solution: Verify token (stored in tblCamsSites.parameters), ensure you only request authorized brands, verify token is for your domain.

 

Slow Cam Performers Page

 

Error:
Symptom: Cam performers page takes 5+ seconds to load.

 

Diagnosis:

  1. Use the debug panel: add ?debug=1 to the URL to see timing breakdown
  2. Use the full debug tool:
https://yourdomain.com/tools/camperformersdebug.php?key=comus2025

 

Optimization checklist:

  1. Enable fast mode - ensure frontend uses ?fast=1 parameter
  2. Check APCu is installed and enabled:

php -m | grep apcu

  1. Verify stats cache cron is running:

/2     php /path/to/ct/admin/cron/updatecamperformerstats.php

  1. Reduce perpage to 24 or less
  2. Check for blocking database queries (see Table Locks)

 

Three-layer caching strategy:

  • Layer 1: APCu in-memory cache (30s TTL)
  • Layer 2: Database stats cache (tblCamsPerformersStatsCache)
  • Layer 3: Fast mode (skip COUNT queries entirely)

 

Solution: Enable all three caching layers and verify cron jobs are running.

 

Affiliate Revenue Missing

 

Error:
Symptom: Clicks on cam performers not tracking, affiliate commissions not appearing.

 

Cause: External performer links not routed through click.php.

Required format:

$clickurl = sprintf('click.php?url=%s&type=camperformer&id=%d',

    urlencode($performer['chatroomurl']), $performer['performerid']);

 

Also verify:

  • Affiliate ID is present in the roomUrl from the external API
  • tblClickTracking is recording cam performer clicks
  • Performer chatroomurl contains valid affiliate tracking parameters

 

Solution: Audit all performer links to ensure click.php routing. Verify affiliate ID in room URLs.

 


Live Streaming (LiveKit)

LiveKit Server Not Starting

 

Error:
Symptom: Docker container won't start or crashes immediately.

 

Diagnosis:

# Check container status

docker ps -a | grep livekit

 


Check logs


docker logs livekit

Verify Docker is running


systemctl status docker

Common causes:

  1. Port conflicts (7880, 7881, 40000-40100 already in use)
  2. Invalid livekit-config.yaml syntax
  3. Docker not installed or not running
  4. Insufficient permissions

 

Solution:

# Check port availability

ss -tlnp | grep 7880

 


Restart container


docker restart livekit

Or recreate


docker rm -f livekit
docker run -d --name livekit --network host \
  -v $(pwd)/livekit-config.yaml:/livekit.yaml:ro \
  livekit/livekit-server:latest --config /livekit.yaml

Stream Not Connecting

 

Error:
Symptom: Creator clicks "Start Streaming" but video never appears. Viewers see loading spinner.

 

Diagnosis:

  1. Check LiveKit config in ct/dat/config.inc.php:

define('LIVEKITHOST', 'wss://yourdomain.com/livekit/');

   define('LIVEKITAPIKEY', 'yourkey');

   define('LIVEKITAPISECRET', 'yoursecret');

 

  1. Verify WebSocket connection from browser:
  • Open browser console (F12)
  • Look for WebSocket connection errors
  • Check if wss:// URL is accessible
  1. Verify firewall rules:
sudo ufw status | grep -E "7880|7881|40000"

Required ports:

  • 7880 - WebSocket signaling
  • 7881 - TCP media
  • 40000-40100 - UDP media (WebRTC)

 

Solution: Verify LiveKit credentials match between config and server, check firewall ports, ensure SSL is configured for wss://.

 

High Latency / Buffering

 

Error:
Symptom: Live stream has noticeable delay (>2 seconds) or frequent buffering.

 

Causes:

  1. UDP ports blocked - WebRTC falls back to TCP (higher latency)
  2. Server overloaded
  3. Client bandwidth insufficient

 

Solution:

  1. Ensure UDP ports 40000-40100 are open
  2. Check server load:

top -bn1 | head -5
  1. Verify nodeip in livekit-config.yaml matches your public IP

 

Chat Not Working

 

Error:
Symptom: Chat messages not sending or not appearing for other viewers.

 

Diagnosis:

  1. Check tblLiveStreamChat for recent messages:
SELECT  FROM tblLiveStreamChat ORDER BY id DESC LIMIT 10;

  1. Verify WebSocket connection in browser console
  2. Check that the stream ID is valid in tblLiveStreams

 

Solution: Verify stream exists, WebSocket is connected, and chat API endpoint is responding.

 


Creator Monetization

Tips Not Processing

 

Error:
Symptom: Tips sent but not appearing in creator's balance or transaction history.

 

Diagnosis:

-- Check recent token transactions

SELECT  FROM tblTokenTransactions ORDER BY createdat DESC LIMIT 10;

 


-- Check creator tips
SELECT
FROM tblCreatorTips ORDER BY created
at DESC LIMIT 10;


-- Check user token balance
SELECT id, username, tokenbalance FROM tblCMSUsers WHERE id = <USERID>;

 

Common causes:

  • Insufficient token balance
  • Creator profile not verified
  • API endpoint error (check response)

 

Solution: Verify sender has sufficient tokens, creator profile is active, and POST /tips/send returns success.

 

Earnings Not Aggregating

 

Error:
Symptom: Creator earnings dashboard shows $0 despite receiving tips/subscriptions.

 

Cause: Earnings aggregation cron job not running.

Required cron:

     php /path/to/ct/admin/cron/aggregatecreatorearnings.php

 

Diagnosis:

-- Check daily earnings records

SELECT  FROM tblCreatorEarningsDaily

WHERE creatorid = <ID>

ORDER BY earningdate DESC LIMIT 10;

 


-- Check if raw transactions exist
SELECT SUM(amount) as total
FROM tblTokenTransactions
WHERE recipientid = <ID> AND createdat >= CURDATE();

 

Solution: Ensure the aggregatecreatorearnings.php cron job is running every minute.

 

Creator Posts Not Displaying

 

Error:
Symptom: Creator wall is empty or posts aren't visible.

 

Diagnosis:

  1. Check featurecreatorposts is enabled
  2. Verify posts exist:

SELECT  FROM tblCreatorPosts WHERE creatorid = <ID> ORDER BY createdat DESC LIMIT 10;

  1. Check post visibility settings (public vs subscriber-only vs PPV)
  2. Verify media uploads if post contains images/video:
SELECT  FROM tblCreatorPostMedia WHERE postid = <POSTID>;

 

Solution: Enable the feature toggle, verify posts exist in the database, check access control for post visibility.

 

Subscription Issues

 

Error:
Symptom: Subscriptions not activating, or subscribers can't access content.

 

Diagnosis:

-- Check active subscriptions

SELECT  FROM tblCreatorSubscriptions

WHERE subscriberid = <USERID> AND status = 'active';

 


-- Check subscription packages
SELECT
FROM tblCreatorSubscriptionPackages WHERE creatorid = <CREATORID>;

 

Solution: Verify featuresubscriptions is enabled, check payment processing, verify subscription record status.

 


Authentication & Users

Login Fails

 

Error:
Symptom: Login form returns error or redirects back without logging in.

 

Diagnosis:

  1. Test the auth API directly:

POST /ct/api/v1/auth/login

   {"username": "test", "password": "test"}

 

  1. Check user account status:
SELECT id, username, accountstatus, emailverified
   FROM tblCMSUsers WHERE username = 'testuser';

Remember: column is accountstatus, NOT status.

  1. Check if account is locked, suspended, or unverified.

Solution: Verify account exists, is active (accountstatus = 'active'), and email is verified if required.

 

Session Issues

 

Error:
Symptom: User logged in via API but pages don't recognize session. Constant redirects to login.

 

Diagnosis:

  1. Check auth/setsession.php is being called after login
  2. Verify session cookie is being set:

document.cookie  // Check for PHP session cookie

  1. Check PHP session configuration:
vardump(sessionstatus());  // Should be PHPSESSIONACTIVE

   vardump($SESSION);         // Should contain user data

 

Solution: Ensure setsession.php is called after API login returns JWT token. Verify session cookie domain matches.

 

2FA Problems

 

Error:
Symptom: Two-factor authentication code rejected, or 2FA setup fails.

 

Diagnosis:

  1. Check feature2fa is enabled
  2. Verify server time is accurate (TOTP codes are time-based):

date

   timedatectl status

  1. Time drift of >30 seconds will cause code rejection.

 

Solution: Sync server time with NTP, verify 2FA secret is stored correctly.

 


Cron Jobs

Verifying Cron Jobs Are Running

 

Configuration Required:
Check if cron jobs are configured:

 

crontab -l

Check if they've run recently:

# Check video processor logs
ls -la ct/logs/videoprocessor/

Check last modification of log files


stat ct/logs/cron-update.log

Test a cron job manually:

php ct/admin/cron/videoprocessor.php

echo $?  # 0 = success

 

Required Cron Schedule

 

Configuration Required:
The following cron jobs must be running for full system operation:

 

# Video Processing (CRITICAL)
  • php /path/to/ct/admin/cron/ftpvideoprocessor.php

/5     php /path/to/ct/admin/cron/videoprocessor.php
/5     php /path/to/ct/admin/cron/conversionpoller.php

Cam Performers


/5     php /path/to/ct/admin/cronupdatecams.php
/2     php /path/to/ct/admin/cron/updatecamperformerstats.php
0 3      php /path/to/ct/admin/cron/maintenancecamperformers.php

Creator Monetization


  • php /path/to/ct/admin/cron/aggregatecreatorearnings.php

Site Maintenance


0 0      php /path/to/ct/admin/cron/generatesitemap.php
0 1      php /path/to/ct/admin/cron/sitecron.php

Impact of missing cron jobs:

Missing Cron Impact
videoprocessor.php Videos stuck at 'pending' forever
ftpvideoprocessor.php FTP uploads never processed
cronupdatecams.php Cam performer data goes stale
updatecamperformerstats.php Stats cache outdated, slow page loads
aggregatecreatorearnings.php Creator earnings show $0
generatesitemap.php Search engines can't discover new content

Debug Tools Reference

 

Note:
All debug tools require the security key parameter: ?key=comus2025

 

Tool URL Purpose
simpletest.php /tools/simpletest.php?key=comus2025 Quick database connectivity test
camperformersdebug.php /tools/camperformersdebug.php?key=comus2025 Full cam API chain test (MySQL, sites API, online API, direct DB)
mysqlstatus.php /tools/mysqlstatus.php?key=comus2025 MySQL status + kill blocking queries
dblockinspector.php /tools/dblockinspector.php?key=comus2025 InnoDB lock analysis, metadata locks, deadlocks
baredbtest.php /tools/baredbtest.php?key=comus2025 Ultra-minimal database connection test

Kill a blocking query via URL:

https://yourdomain.com/tools/mysqlstatus.php?key=comus2025&kill=PROCESSID

Cam performers debug panel:

https://yourdomain.com/camperformers.php?debug=1


Shows: API URL, TTFB, download time, JSON parse time, DOM render time.

 


Log File Locations

Log Location Contains
Video Processor ct/logs/videoprocessor/ FFmpeg output, processing status, errors
Cron Updates ct/logs/cron-update.log Cam performer sync logs
API Errors ct/logs/api/ REST API error responses
PHP Errors /var/log/php/error.log (server-specific) PHP fatal errors, warnings
Apache/Nginx /var/log/apache2/error.log or /var/log/nginx/error.log Web server errors
LiveKit docker logs livekit Streaming server logs

Common SQL Fixes

 

Configuration Required:
Frequently-used SQL commands for fixing common data issues:

 

-- Fix videos with incorrect filepath (just filename, missing path)
UPDATE tblVideos
SET filepath = CONCAT('uploads/videos/original/', filepath)
WHERE filepath NOT LIKE 'uploads/%'
  AND filepath NOT LIKE '%/%'
  AND status IN ('pending', 'error');

-- Reset errored videos for reprocessing
UPDATE tblVideos SET status = 'pending', errormessage = NULL
WHERE status = 'error' AND video
id IN (1, 2, 3);


-- Clear stuck processing jobs
DELETE FROM tblVideoProcessingJobs
WHERE videoid IN (SELECT videoid FROM tblVideos WHERE status = 'pending');


-- Check cam performer online counts by site
SELECT s.name, COUNT(p.performerid) as onlinecount
FROM tblCamsPerformers p
JOIN tblCamsSites s ON p.site = s.recordnum
WHERE p.status = 1 AND p.enabled = 1
GROUP BY s.name;


-- Check feature toggle status
SELECT setting
key, settingvalue
FROM tblSettings
WHERE setting
key LIKE 'feature%'
ORDER BY setting
key;


-- Check recent click tracking
SELECT type, COUNT() as clicks, MAX(createdat) as lastclick
FROM tblClickTracking
GROUP BY type ORDER BY clicks DESC;


-- Find users with authentication issues
SELECT id, username, accountstatus, emailverified, lastlogin
FROM tblCMSUsers
WHERE account
status != 'active'
ORDER BY id DESC LIMIT 20;


-- Check storage server health
SELECT serverid, servername, servertype, enabled,
last
check, lasterror
FROM tblStorageServers;


-- Verify creator earnings aggregation
SELECT creator
id, earningdate, totaltips, totalsubscriptions,
total
ppv, totalearnings
FROM tblCreatorEarningsDaily
ORDER BY earning
date DESC LIMIT 20;