![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/soundstudiopro.com/private_html/ |
<?php
// Command-line version of audio URL audit
require_once 'config/database.php';
$pdo = getDBConnection();
if (!$pdo) {
die("❌ Database connection failed\n");
}
echo "🔍 Complete Audio URL Audit\n";
echo str_repeat("=", 80) . "\n\n";
// Check main tracks
echo "📊 Checking Main Tracks (music_tracks table)...\n";
$stmt = $pdo->query("
SELECT
mt.id,
mt.task_id,
mt.title,
mt.audio_url,
mt.status,
mt.created_at,
u.name as artist_name
FROM music_tracks mt
LEFT JOIN users u ON mt.user_id = u.id
WHERE mt.status = 'complete'
AND mt.audio_url IS NOT NULL
AND mt.audio_url != ''
ORDER BY mt.created_at DESC
");
$tracks = $stmt->fetchAll(PDO::FETCH_ASSOC);
$totalTracks = count($tracks);
$externalTracks = [];
$localTracks = [];
$missingFiles = [];
$proxyTracks = [];
foreach ($tracks as $track) {
$url = $track['audio_url'];
// Check if external URL
if (preg_match('/^https?:\/\//', $url) && !preg_match('/^https?:\/\/' . preg_quote('soundstudiopro.com', '/') . '/', $url)) {
$externalTracks[] = $track;
}
// Check if proxy URL (audiofiles.php or audio_proxy)
elseif (strpos($url, 'audiofiles.php') !== false || strpos($url, 'audio_proxy') !== false) {
$proxyTracks[] = $track;
}
// Check if local file path
elseif (preg_match('/^\/audio_files\//', $url)) {
$localPath = ltrim($url, '/');
if (file_exists($localPath)) {
$localTracks[] = $track;
} else {
$missingFiles[] = $track;
}
}
// Other local paths
else {
$localTracks[] = $track;
}
}
// Check audio variations
echo "🎵 Checking Audio Variations (audio_variations table)...\n";
$stmt = $pdo->query("
SELECT
av.id,
av.track_id,
av.variation_index,
av.audio_url,
mt.task_id,
mt.title as track_title,
u.name as artist_name
FROM audio_variations av
JOIN music_tracks mt ON av.track_id = mt.id
LEFT JOIN users u ON mt.user_id = u.id
WHERE av.audio_url IS NOT NULL
AND av.audio_url != ''
ORDER BY av.id DESC
");
$variations = $stmt->fetchAll(PDO::FETCH_ASSOC);
$totalVariations = count($variations);
$externalVariations = [];
$localVariations = [];
$missingVariationFiles = [];
$proxyVariations = [];
foreach ($variations as $variation) {
$url = $variation['audio_url'];
// Check if external URL
if (preg_match('/^https?:\/\//', $url) && !preg_match('/^https?:\/\/' . preg_quote('soundstudiopro.com', '/') . '/', $url)) {
$externalVariations[] = $variation;
}
// Check if proxy URL
elseif (strpos($url, 'audiofiles.php') !== false || strpos($url, 'audio_proxy') !== false) {
$proxyVariations[] = $variation;
}
// Check if local file path
elseif (preg_match('/^\/audio_files\//', $url)) {
$localPath = ltrim($url, '/');
if (file_exists($localPath)) {
$localVariations[] = $variation;
} else {
$missingVariationFiles[] = $variation;
}
}
// Other local paths
else {
$localVariations[] = $variation;
}
}
// Display statistics
echo "\n" . str_repeat("=", 80) . "\n";
echo "📈 STATISTICS\n";
echo str_repeat("=", 80) . "\n\n";
echo "Main Tracks:\n";
echo " ✅ Local files: " . count($localTracks) . "\n";
echo " ⚠️ External URLs: " . count($externalTracks) . "\n";
echo " 🔗 Proxy URLs: " . count($proxyTracks) . "\n";
echo " ❌ Missing files: " . count($missingFiles) . "\n";
echo " 📊 Total: $totalTracks\n\n";
echo "Variations:\n";
echo " ✅ Local files: " . count($localVariations) . "\n";
echo " ⚠️ External URLs: " . count($externalVariations) . "\n";
echo " 🔗 Proxy URLs: " . count($proxyVariations) . "\n";
echo " ❌ Missing files: " . count($missingVariationFiles) . "\n";
echo " 📊 Total: $totalVariations\n\n";
$totalExternal = count($externalTracks) + count($externalVariations);
$totalIssues = $totalExternal + count($proxyTracks) + count($proxyVariations) + count($missingFiles) + count($missingVariationFiles);
echo str_repeat("=", 80) . "\n";
if ($totalIssues === 0) {
echo "✅ PERFECT! All audio files are local!\n";
echo "All " . ($totalTracks + $totalVariations) . " audio URLs are using local files from /audio_files/\n";
} else {
echo "⚠️ ISSUES FOUND\n";
echo "Total issues: $totalIssues\n";
echo " - External URLs: $totalExternal\n";
echo " - Proxy URLs: " . (count($proxyTracks) + count($proxyVariations)) . "\n";
echo " - Missing files: " . (count($missingFiles) + count($missingVariationFiles)) . "\n";
}
echo str_repeat("=", 80) . "\n\n";
// Show external tracks
if (count($externalTracks) > 0) {
echo "⚠️ TRACKS WITH EXTERNAL URLS:\n";
echo str_repeat("-", 80) . "\n";
foreach ($externalTracks as $track) {
echo " • " . htmlspecialchars($track['title']) . " (Task: " . $track['task_id'] . ")\n";
echo " Artist: " . ($track['artist_name'] ?? 'Unknown') . "\n";
echo " URL: " . substr($track['audio_url'], 0, 70) . "...\n";
echo " Created: " . date('M j, Y', strtotime($track['created_at'])) . "\n\n";
}
}
// Show external variations
if (count($externalVariations) > 0) {
echo "⚠️ VARIATIONS WITH EXTERNAL URLS:\n";
echo str_repeat("-", 80) . "\n";
foreach ($externalVariations as $variation) {
echo " • " . htmlspecialchars($variation['track_title']) . " - Variation " . $variation['variation_index'] . "\n";
echo " Artist: " . ($variation['artist_name'] ?? 'Unknown') . "\n";
echo " URL: " . substr($variation['audio_url'], 0, 70) . "...\n\n";
}
}
// Show proxy URLs
if (count($proxyTracks) > 0 || count($proxyVariations) > 0) {
echo "🔗 PROXY URLS (Should be converted to /audio_files/):\n";
echo str_repeat("-", 80) . "\n";
if (count($proxyTracks) > 0) {
echo "Tracks:\n";
foreach ($proxyTracks as $track) {
echo " • " . htmlspecialchars($track['title']) . " (Task: " . $track['task_id'] . ")\n";
echo " URL: " . $track['audio_url'] . "\n\n";
}
}
if (count($proxyVariations) > 0) {
echo "Variations:\n";
foreach ($proxyVariations as $variation) {
echo " • " . htmlspecialchars($variation['track_title']) . " - Variation " . $variation['variation_index'] . "\n";
echo " URL: " . $variation['audio_url'] . "\n\n";
}
}
}
// Show missing files
if (count($missingFiles) > 0 || count($missingVariationFiles) > 0) {
echo "❌ MISSING FILES:\n";
echo str_repeat("-", 80) . "\n";
if (count($missingFiles) > 0) {
echo "Tracks:\n";
foreach ($missingFiles as $track) {
echo " • " . htmlspecialchars($track['title']) . " (Task: " . $track['task_id'] . ")\n";
echo " Missing: " . $track['audio_url'] . "\n\n";
}
}
if (count($missingVariationFiles) > 0) {
echo "Variations:\n";
foreach ($missingVariationFiles as $variation) {
echo " • " . htmlspecialchars($variation['track_title']) . " - Variation " . $variation['variation_index'] . "\n";
echo " Missing: " . $variation['audio_url'] . "\n\n";
}
}
}
// System check
echo "\n" . str_repeat("=", 80) . "\n";
echo "🔧 SYSTEM CHECK\n";
echo str_repeat("=", 80) . "\n\n";
$callbackFile = 'callback.php';
if (file_exists($callbackFile)) {
$callbackContent = file_get_contents($callbackFile);
if (strpos($callbackContent, 'downloadAndStoreAudio') !== false) {
echo "✅ callback.php has downloadAndStoreAudio() function\n";
} else {
echo "❌ callback.php missing downloadAndStoreAudio() function\n";
}
if (preg_match('/downloadAndStoreAudio\s*\(/', $callbackContent)) {
echo "✅ callback.php calls downloadAndStoreAudio()\n";
} else {
echo "❌ callback.php does NOT call downloadAndStoreAudio()\n";
}
} else {
echo "❌ callback.php not found\n";
}
if (is_dir('audio_files')) {
$fileCount = count(glob('audio_files/*.{mp3,wav,m4a,ogg,flac}', GLOB_BRACE));
echo "✅ audio_files/ directory exists with $fileCount audio files\n";
} else {
echo "❌ audio_files/ directory does not exist\n";
}
echo "\n" . str_repeat("=", 80) . "\n";
echo "✅ Audit complete!\n";
if ($totalIssues > 0) {
echo "\nTo fix external URLs, visit: https://soundstudiopro.com/fix_external_audio_urls.php\n";
}
echo str_repeat("=", 80) . "\n";