<?php
$disable_functions_str = ini_get("disable_functions");
if (!$disable_functions_str) {
    exit("ok\n");
}

$functions_required = [
    "pcntl_",
    "posix_",
    "stream_",
];

$has_disbaled_functions = false;
foreach ($functions_required as $func) {
    if (strpos($disable_functions_str, $func) !== false) {
        $has_disbaled_functions = true;
        break;
    }
}

if (!$has_disbaled_functions) {
    exit("ok\n");
}

$disable_functions = explode(",", $disable_functions_str);
$disable_functions_removed = [];
foreach ($disable_functions as $index => $func) {
    $func = trim($func);
    foreach ($functions_required as $func_prefix) {
        if (strpos($func, $func_prefix) === 0) {
            $disable_functions_removed[$func] = $func;
            unset($disable_functions[$index]);
        }
    }
}

$php_ini_file = php_ini_loaded_file();
if (!$php_ini_file || !is_file($php_ini_file)) {
    exit("$php_ini_file not found\n");
}

$php_ini_content = file_get_contents($php_ini_file);
if (!$php_ini_content) {
    exit("$php_ini_file content empty\n");
}

$new_disable_functions_str = implode(",", $disable_functions);
$php_ini_content = preg_replace("/\ndisable_functions *?=[^\n]+/", "\ndisable_functions = $new_disable_functions_str", $php_ini_content);

file_put_contents($php_ini_file, $php_ini_content);

foreach ($disable_functions_removed as $func) {
    echo DIRECTORY_SEPARATOR === "/" ? str_pad($func, 30) . " \033[32;40m [enabled] \033[0m\r\n" : str_pad($func, 30) . " [enabled]\r\n";
}

echo "\r\nsuccess\r\n";