. */ // Apache $modules = [ 'mod_rewrite' => [ 'server' => 'HTTP_MOD_REWRITE', 'description' => tr('Fornisce un sistema di riscrittura URL basato su regole predefinite'), ], ]; if (function_exists('apache_get_modules')) { $available_modules = apache_get_modules(); } $apache = []; foreach ($modules as $name => $values) { $description = $values['description']; $status = isset($available_modules) ? in_array($name, $available_modules) : $_SERVER[$values['server']] == 'On'; $apache[] = [ 'name' => $name, 'description' => $description, 'status' => $status, 'type' => tr('Modulo'), ]; } //PHP $settings = [ 'php_version' => [ 'type' => 'version', 'description' => '7.3.x - 8.0.x, consigliato almeno 7.4.x', 'minimum' => '7.3.0', 'maximum' => '8.0.99', ], 'zip' => [ 'type' => 'ext', 'description' => tr('Permette di leggere e scrivere gli archivi compressi ZIP e i file al loro interno'), ], 'mbstring' => [ 'type' => 'ext', 'description' => tr('Permette di gestire i caratteri dello standard UTF-8'), ], 'pdo_mysql' => [ 'type' => 'ext', 'description' => tr('Permette di effettuare la connessione al database MySQL'), ], 'dom' => [ 'type' => 'ext', 'description' => tr('Permette la gestione dei file standard per la Fatturazione Elettronica'), ], 'xsl' => [ 'type' => 'ext', 'description' => tr('Permette di visualizzazione grafica della Fattura Elettronica'), ], 'openssl' => [ 'type' => 'ext', 'description' => tr("Permette l'utilizzo di funzioni crittografiche simmetriche e asimmetriche"), ], 'intl' => [ 'type' => 'ext', 'description' => tr("Permette l'automazione della conversione dei numeri"), ], 'curl' => [ 'type' => 'ext', 'description' => tr('Permette la comunicazione con servizi esterni'), ], 'soap' => [ 'type' => 'ext', 'description' => tr('Permette la comunicazione con servizi esterni, quali il database europeo delle Partite IVA (facoltativo)'), ], 'gd' => [ 'type' => 'ext', 'description' => tr('Permette la creazione dell\'immagine della firma per il rapportino d\'intervento (facoltativo)'), ], 'fileinfo' => [ 'type' => 'ext', 'description' => tr('Permette la creazione dell\'immagine della firma per il rapportino d\'intervento (facoltativo)'), ], //'display_errors' => [ // 'type' => 'value', // 'description' => true, //], 'upload_max_filesize' => [ 'type' => 'value', 'description' => '>32M', ], 'post_max_size' => [ 'type' => 'value', 'description' => '>32M', ], 'max_input_vars' => [ 'type' => 'value', 'description' => '>5000', ], ]; $php = []; foreach ($settings as $name => $values) { $description = $values['description']; if ($values['type'] == 'version') { $description = tr('Valore consigliato: _VALUE_ (Valore attuale: _PHP_VERSION_)', [ '_VALUE_' => $description, '_PHP_VERSION_' => phpversion(), ]); $status = ((version_compare(phpversion(), $values['minimum'], ">=") && version_compare(phpversion(), $values['maximum'], "<=")) ? 1 : 0); } elseif ($values['type'] == 'ext') { $status = extension_loaded($name); } else { $ini = str_replace(['k', 'M'], ['000', '000000'], ini_get($name)); $real = str_replace(['k', 'M'], ['000', '000000'], $description); if (string_starts_with($real, '>')) { $status = $ini >= substr($real, 1); } elseif (string_starts_with($real, '<')) { $status = $ini <= substr($real, 1); } else { $status = ($real == $ini); } if (is_bool($description)) { $description = !empty($description) ? 'On' : 'Off'; } else { $description = str_replace(['>', '<'], '', $description); } $description = tr('Valore consigliato: _VALUE_ (Valore attuale: _INI_)', [ '_VALUE_' => $description, '_INI_' => ini_get($name), ]); } $type = ($values['type'] == 'ext') ? tr('Estensione') : tr('Impostazione'); if ($values['type'] == 'ext'){ $type = tr('Estensione'); }elseif ($values['type'] == 'version') { $type = tr('Versione'); }else{ $type = tr('Impostazione'); } $php[] = [ 'name' => $name, 'description' => $description, 'status' => $status, 'type' => $type, ]; } // MySQL if ($database->isInstalled()){ $db = [ 'mysql_version' => [ 'type' => 'version', 'description' => '5.7.x - 8.0.x', 'minimum' => '5.7.0', 'maximum' => '8.0.99', ], ]; foreach (App::getConfig()['db_options'] as $n => $v){ switch ($n){ case 'sort_buffer_size': $db[$n] = [ 'type' => 'value', 'description' => '>4M', ]; break; } } } foreach ($db as $name => $values) { $description = $values['description']; if ($values['type'] == 'version') { $type = tr('Versione'); $description = tr('Valore consigliato: _VALUE_ (Valore attuale: _MYSQL_VERSION_)', [ '_VALUE_' => $description, '_MYSQL_VERSION_' => $database->getMySQLVersion(), ]); $status = ((version_compare($database->getMySQLVersion(), $values['minimum'], ">=") && version_compare($database->getMySQLVersion(), $values['maximum'], "<=")) ? 1 : 0); } else{ $type = tr('Impostazione'); $inc = str_replace(['k', 'M'], ['000', '000000'], App::getConfig()['db_options'][$name]); $real = str_replace(['k', 'M'], ['000', '000000'], $description); if (string_starts_with($real, '>')) { $status = $inc >= substr($real, 1); } elseif (string_starts_with($real, '<')) { $status = $inc <= substr($real, 1); } else { $status = ($real == $inc); } if (is_bool($description)) { $description = !empty($description) ? 'On' : 'Off'; } else { $description = str_replace(['>', '<'], '', $description); } $description = tr('Valore consigliato: _VALUE_ (Valore attuale: _INI_)', [ '_VALUE_' => $description, '_INI_' => App::getConfig()['db_options'][$name], ]); } $mysql[] = [ 'name' => $name, 'description' => $description, 'status' => $status, 'type' => $type, ]; } // Percorsi di servizio $dirs_to_check = [ 'backup' => tr('Necessario per il salvataggio dei backup'), 'files' => tr('Necessario per il salvataggio di file inseriti dagli utenti'), 'files/temp' => tr('Necessario per la generazione delle stampe'), 'logs' => tr('Necessario per la gestione dei file di log'), ]; $directories = []; foreach ($dirs_to_check as $name => $description) { $status = is_writable(base_dir().DIRECTORY_SEPARATOR.$name); $directories[] = [ 'name' => $name, 'description' => $description, 'status' => $status, 'type' => tr('Cartella'), ]; } // File di servizio $files_to_check = [ 'manifest.json' => tr('Necessario per l\'aggiunta a schermata home da terminale'), 'database_5_7.json' => tr('Necessario per il controllo integrità con database MySQL 5.7.x'), 'database.json' => tr('Necessario per il controllo integrità con database MySQL 8.0.x'), 'checksum.json' => tr('Necessario per il controllo integrità dei files del gestionale'), ]; $files = []; foreach ($files_to_check as $name => $description) { $status = is_writable(base_dir().DIRECTORY_SEPARATOR.$name); $files[] = [ 'name' => $name, 'description' => $description, 'status' => $status, 'type' => tr('File'), ]; } $requirements = [ tr('Apache') => $apache, tr('PHP (_VERSION_ _SUPPORTED_)', [ '_VERSION_' => phpversion(), '_SUPPORTED_' => ( ( version_compare(phpversion(), $settings['php_version']['minimum'], ">=") && version_compare(phpversion(), $settings['php_version']['maximum'], "<=") ) ? '' : ' '.tr('versioni supportate:').' '.$settings['php_version']['description'].'') ]) => $php, tr('MySQL') => $mysql, tr('Percorsi di servizio') => $directories, tr('File di servizio') => $files, ]; if (!$database->isInstalled() || empty($mysql)){ unset($requirements['MySQL']); } // Tabelle di riepilogo foreach ($requirements as $key => $values) { $statuses = array_column($values, 'status'); $general_status = true; foreach ($statuses as $status) { $general_status &= $status; } echo '

'.$key.'

'; if ($general_status) { echo '
'; } echo '
'; foreach ($values as $value) { echo ' '; } echo '
'.$value['type'].' '.$value['name'].' '.$value['description'].'
'; }