403Webshell
Server IP : 35.80.110.71  /  Your IP : 216.73.216.221
Web Server : Apache/2.4.58 (Ubuntu)
System : Linux ip-172-31-21-44 6.17.0-1019-aws #19~24.04.1-Ubuntu SMP Tue Jun 23 18:53:06 UTC 2026 x86_64
User : ubuntu ( 1000)
PHP Version : 8.3.31
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /proc/2798582/cwd/scripts/analysis/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /proc/2798582/cwd/scripts/analysis/analyze-blog-content.php
<?php

/**
 * Blog Content Analysis Script
 *
 * Analyzes blog posts for code-to-prose ratio and identifies
 * posts that need more textual context around code blocks.
 *
 * Usage: php scripts/analysis/analyze-blog-content.php [--verbose] [--json]
 */
$blogDir = __DIR__.'/../database/seeders/Content/blog';
$verbose = in_array('--verbose', $argv);
$jsonOutput = in_array('--json', $argv);

$results = [];

// Get all blog files 01-100
$files = glob($blogDir.'/*.md');
$targetFiles = [];

foreach ($files as $file) {
    $basename = basename($file);
    // Extract number from filename (e.g., "01-laravel-12-whats-new.md" -> 1)
    if (preg_match('/^(\d+)-/', $basename, $matches)) {
        $num = (int) $matches[1];
        if ($num >= 1 && $num <= 100) {
            $targetFiles[$num] = $file;
        }
    }
}

ksort($targetFiles);

foreach ($targetFiles as $num => $file) {
    $content = file_get_contents($file);
    $lines = explode("\n", $content);

    $totalLines = count($lines);
    $codeLines = 0;
    $proseLines = 0;
    $inCodeBlock = false;
    $codeBlocks = [];
    $currentCodeBlock = [];
    $consecutiveCodeBlocks = 0;
    $maxConsecutiveCodeBlocks = 0;
    $lastWasCode = false;
    $proseBetweenBlocks = 0;

    foreach ($lines as $lineNum => $line) {
        $trimmed = trim($line);

        // Check for code block markers
        if (preg_match('/^```/', $trimmed)) {
            if (! $inCodeBlock) {
                // Starting a code block
                $inCodeBlock = true;
                $currentCodeBlock = ['start' => $lineNum, 'lines' => 0];

                if ($lastWasCode && $proseBetweenBlocks < 2) {
                    $consecutiveCodeBlocks++;
                } else {
                    $maxConsecutiveCodeBlocks = max($maxConsecutiveCodeBlocks, $consecutiveCodeBlocks);
                    $consecutiveCodeBlocks = 1;
                }
                $proseBetweenBlocks = 0;
            } else {
                // Ending a code block
                $inCodeBlock = false;
                $currentCodeBlock['end'] = $lineNum;
                $codeBlocks[] = $currentCodeBlock;
                $lastWasCode = true;
            }

            continue;
        }

        if ($inCodeBlock) {
            $codeLines++;
            $currentCodeBlock['lines']++;
        } else {
            // Count non-empty prose lines
            if (! empty($trimmed) && ! preg_match('/^#{1,6}\s/', $trimmed)) {
                $proseLines++;
                if ($lastWasCode) {
                    $proseBetweenBlocks++;
                }
            }

            // Reset lastWasCode after significant prose
            if ($proseBetweenBlocks >= 3) {
                $lastWasCode = false;
            }
        }
    }

    $maxConsecutiveCodeBlocks = max($maxConsecutiveCodeBlocks, $consecutiveCodeBlocks);

    // Calculate metrics
    $totalContent = $codeLines + $proseLines;
    $codeRatio = $totalContent > 0 ? round(($codeLines / $totalContent) * 100, 1) : 0;

    // Determine severity
    $severity = 'OK';
    $issues = [];

    if ($codeRatio > 70) {
        $severity = 'MAJOR';
        $issues[] = "Code ratio {$codeRatio}% (>70%)";
    } elseif ($codeRatio > 60) {
        $severity = 'MODERATE';
        $issues[] = "Code ratio {$codeRatio}% (>60%)";
    }

    if ($maxConsecutiveCodeBlocks >= 3) {
        if ($severity === 'OK') {
            $severity = 'MODERATE';
        }
        $issues[] = "{$maxConsecutiveCodeBlocks} consecutive code blocks";
    } elseif ($maxConsecutiveCodeBlocks >= 2) {
        $issues[] = "{$maxConsecutiveCodeBlocks} consecutive code blocks (minor)";
    }

    // Check for large code blocks with no surrounding prose
    $largeCodeBlocks = array_filter($codeBlocks, fn ($b) => $b['lines'] > 20);
    if (count($largeCodeBlocks) >= 3) {
        if ($severity === 'OK') {
            $severity = 'MINOR';
        }
        $issues[] = count($largeCodeBlocks).' large code blocks (>20 lines)';
    }

    $results[] = [
        'file' => basename($file),
        'number' => $num,
        'total_lines' => $totalLines,
        'code_lines' => $codeLines,
        'prose_lines' => $proseLines,
        'code_ratio' => $codeRatio,
        'code_blocks' => count($codeBlocks),
        'max_consecutive' => $maxConsecutiveCodeBlocks,
        'severity' => $severity,
        'issues' => $issues,
    ];
}

// Output results
if ($jsonOutput) {
    echo json_encode($results, JSON_PRETTY_PRINT)."\n";
} else {
    // Summary
    $major = array_filter($results, fn ($r) => $r['severity'] === 'MAJOR');
    $moderate = array_filter($results, fn ($r) => $r['severity'] === 'MODERATE');
    $minor = array_filter($results, fn ($r) => $r['severity'] === 'MINOR');
    $ok = array_filter($results, fn ($r) => $r['severity'] === 'OK');

    echo "=== Blog Content Analysis Report ===\n\n";
    echo "Summary:\n";
    echo '  MAJOR enhancement needed: '.count($major)."\n";
    echo '  MODERATE enhancement needed: '.count($moderate)."\n";
    echo '  MINOR tweaks needed: '.count($minor)."\n";
    echo '  OK (no changes needed): '.count($ok)."\n";
    echo "\n";

    // List blogs needing work
    if (count($major) > 0) {
        echo "=== MAJOR (Code ratio >70%) ===\n";
        foreach ($major as $r) {
            printf("  %03d: %s\n", $r['number'], $r['file']);
            printf("       Code: %d%% | Blocks: %d | Issues: %s\n",
                $r['code_ratio'], $r['code_blocks'], implode(', ', $r['issues']));
        }
        echo "\n";
    }

    if (count($moderate) > 0) {
        echo "=== MODERATE (Code ratio >60% or 3+ consecutive blocks) ===\n";
        foreach ($moderate as $r) {
            printf("  %03d: %s\n", $r['number'], $r['file']);
            printf("       Code: %d%% | Blocks: %d | Issues: %s\n",
                $r['code_ratio'], $r['code_blocks'], implode(', ', $r['issues']));
        }
        echo "\n";
    }

    if ($verbose && count($minor) > 0) {
        echo "=== MINOR ===\n";
        foreach ($minor as $r) {
            printf("  %03d: %s\n", $r['number'], $r['file']);
            printf("       Code: %d%% | Issues: %s\n",
                $r['code_ratio'], implode(', ', $r['issues']));
        }
        echo "\n";
    }

    if ($verbose) {
        echo "=== OK (No changes needed) ===\n";
        foreach ($ok as $r) {
            printf("  %03d: %s (Code: %d%%)\n", $r['number'], $r['file'], $r['code_ratio']);
        }
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit