<?php
error_reporting(E_ALL);
set_time_limit(30);
header('Content-Type: application/json');

if (!isset($_GET['token']) || $_GET['token'] !== 'c72c6ea66caba45ffc94274b3b75bebe') {
    http_response_code(403);
    echo json_encode(['error' => 'Forbidden']);
    exit;
}

$results = [];

// 1. PHP version
$results['php_version'] = PHP_VERSION;

// 2. exec() available
$disabledFunctions = array_map('trim', explode(',', ini_get('disable_functions')));
$results['exec_disabled'] = in_array('exec', $disabledFunctions) || in_array('shell_exec', $disabledFunctions);
$results['exec_test'] = null;
if (!$results['exec_disabled']) {
    $out = [];
    exec('echo hello_from_exec', $out, $code);
    $results['exec_test'] = ($code === 0 && isset($out[0]) && trim($out[0]) === 'hello_from_exec') ? 'ok' : 'failed (code '.$code.')';
}

// 3. mysqldump available
$results['mysqldump'] = null;
if (!$results['exec_disabled']) {
    $out2 = [];
    exec('which mysqldump 2>/dev/null', $out2, $c2);
    if ($c2 === 0 && !empty($out2[0])) {
        $results['mysqldump'] = trim($out2[0]);
    } else {
        // try common paths
        foreach (['/usr/bin/mysqldump', '/usr/local/bin/mysqldump', '/opt/cpanel/ea-mysql80/root/usr/bin/mysqldump'] as $p) {
            if (file_exists($p) && is_executable($p)) {
                $results['mysqldump'] = $p;
                break;
            }
        }
        if (!$results['mysqldump']) $results['mysqldump'] = 'not_found';
    }
}

// 4. mysql (import) available
$results['mysql_cli'] = null;
if (!$results['exec_disabled']) {
    $out3 = [];
    exec('which mysql 2>/dev/null', $out3, $c3);
    if ($c3 === 0 && !empty($out3[0])) {
        $results['mysql_cli'] = trim($out3[0]);
    } else {
        foreach (['/usr/bin/mysql', '/usr/local/bin/mysql', '/opt/cpanel/ea-mysql80/root/usr/bin/mysql'] as $p) {
            if (file_exists($p) && is_executable($p)) { $results['mysql_cli'] = $p; break; }
        }
        if (!$results['mysql_cli']) $results['mysql_cli'] = 'not_found';
    }
}

// 5. ZipArchive
$results['zip_archive'] = class_exists('ZipArchive');

// 6. PDO MySQL
$results['pdo_mysql'] = in_array('mysql', PDO::getAvailableDrivers());

// 7. cURL
$results['curl'] = function_exists('curl_init');

// 8. curl SSL (can we reach external HTTPS?)
$results['curl_ssl'] = null;
if (function_exists('curl_init')) {
    $ch = curl_init('https://example.com');
    curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10, CURLOPT_SSL_VERIFYPEER => false]);
    $resp = curl_exec($ch);
    $results['curl_ssl'] = ($resp !== false) ? 'ok' : curl_error($ch);
    curl_close($ch);
}

// 9. tmp dir writable
$tmpDir = sys_get_temp_dir();
$results['tmp_dir'] = $tmpDir;
$results['tmp_writable'] = is_writable($tmpDir);

// 10. Memory limit
$results['memory_limit'] = ini_get('memory_limit');

// 11. max_execution_time
$results['max_execution_time'] = ini_get('max_execution_time');

// Self-delete
@unlink(__FILE__);

echo json_encode(['success' => true, 'probe' => $results]);
