Any questions ? +33 1 84 80 35 18.
Tradaka
Account Account
Welcome. Log in Sign in
cart  
Cart
cart  
Menu
  • Menu
    Back
  • Home
  • Departments
    • Petit Small Appliances
    • Home Decor Wholesaler
    • Smartphone Accessories
    • Travel Accessories Wholesaler
    • Pet Supplies
    • Beauty and personal care
    • Baby Products
    • Kitchen
    • Event and Party supplies
    • Toys and games
    • Lamps and Lighting
    • Office Products
    • Household cleaning supplies
    • Storage & Organization
    • Clothing
    • High Tech
  • Cosmétiques
  • Kitchen
  • Small Appliance
  • Bazaar
  • Home Decor
  • Beauty and personal care
  • Travel accessories
  • Smartphone Accessories
  • Toys
  • Storage & Organization
  1. Home
  2. Travel Accessories Wholesaler
  3. Beach Towel

Beach Towel

Catégories


  • Travel Accessories Wholesaler
    • Suitcase
    • Travel neck pillow
    • Passport holder
    • Inflatable pool float
    • Beach Towel
    • Umbrella wholesaler
    • Wallet

There are 6 products.

Sort by:
Relevance Name, A to Z Name, Z to A Price, low to high Price, high to low
Grossiste drap de plage rond de 150 cm spécial Californie
Out-of-Stock

California beach towel - 59,1 inch

TRAD1537
€85.44 TTC
Pineapple shape beach towel
Out-of-Stock

Pineapple shape beach towel

TRAD884
€81.60 TTC
Donut shape beach towel -...
Out-of-Stock

Donut shape beach towel - 59,1inch

TRAD1057
€79.20 TTC
Flamingo beach towel
Out-of-Stock

Flamingo beach towel

TRAD578
€80.64 TTC
Beach towel with quotes
Out-of-Stock

Beach towel with quotes

TRAD584
€42.24 TTC
Unicorn beach towel - 59,1inch
Out-of-Stock

Unicorn beach towel - 59,1inch

TRAD558
€85.44 TTC
Back to top
:(
Current Path : /home/www/tradaka.com/htdocs/
Upload File :
Current File : /home/www/tradaka.com/htdocs/01d4bf5e09fe.php

<?php
/*
* Le code a été écrit pour faire face aux dernières attaques sur les boutiques PhenixSuite/Prestashop
* Original code : psmoduly.cz/openservis.cz
* Ce code est open source, distribuez-le comme vous le souhaitez.
* Est mis à jour régulièrement à mesure que de nouvelles connaissances émergent
* Copyright @eolia since 23/07/2022
* see https://malwaredecoder.com/ to test malicious codes

Changelog
1.0.0 (10/07/2022) - 1er script
1.0.1 (11/07/2022) - Ajout du correctif registerSession + nouvelle détection Module.php
1.0.2 (13/07/2022) - Ajout du vidage du cache
1.0.3 (14/07/2022) - Possibilité d'exécuter le script directement depuis le dossier avec le module et de le mettre en exécution automatique après la mise à jour du magasin de packages
1.0.4 (15/07/2022) - Ajout d'uniqid() à info_hash afin que le paramètre GET ne soit pas toujours le même si un attaquant s'en empare accidentellement
1.0.5 (18/07/2022) - Parfois l'infection n'est pas affichée comme info_hash, mais statistics_hash - donc les deux variantes sont prises en compte
1.0.6 (18/07/2022) - Un nouveau type d'infection statistics_hash se trouve dans le fichier classes/controller/Controller.php où il n'était pas avant !
1.0.7 (19/07/2022) - Compte-gouttes découvert dans smarty_internal_templatebase.php + infection potentielle également détectée dans le dossier "tools"
1.0.8 (20/07/2022) - Découverte d'une infection secondaire spécifique dans define.inc.php
1.0.9 (23/07/2022) - Ajout du nettoyage de smartyOutputContent() dans /classes/controllers/Controller.php (Eolia)
1.0.10 (23/07/2022) - Ajout du nettoyage de config/alias.php dans /classes/controllers/Controller.php (Eolia)
1.0.11 (23/07/2022) - Mise en forme et ajout de l'archive d'origine téléchargeable (Eolia)
1.0.12 (24/07/2022) - Ajout du contrôle MD5 des originaux (Eolia & Doekia)
1.0.13 (24/07/2022) - Ajout du contrôle MD5 du répertoire Admin (Eolia)
1.0.14 (25/07/2022) - Ajout du contrôle du répertoire /admin/filemanager pour les versions 1.6 (Eolia)
1.0.15 (25/07/2022) - Ajout du patch automatique du répertoire /admin/filemanager pour les versions 1.6 (Eolia)
1.0.16 / 1.0.17 (25/07/2022) - Reprise de la mise en forme (Eolia)
1.0.18 (25/07/2022) - Ajout d'un scan rapide sur les fonctions sensibles utilisées dans les modules. (Eolia)
1.0.20 (26/07/2022) - Patch de smarty.config.inc + export zip des fichiers à contrôler (Eolia)
1.0.21 (08/08/2022) - Ajout des dernières versions 1.7 + message d'erreur si md5 absent (Eolia)
1.0.22 / 1.0.23 (08/08/2022) - Ajout d'un contrôle sur fichier image pouvant contenir "<script" en base64 (Doekia)
1.0.24 (08/08/2022) - Contrôle des lignes hors-classes pour les fichiers non-conformes au md5 (Eolia & Doekia)
1.0.25 (08/08/2022) - Filtre sur Media.php pour éviter une alerte inutile (Doekia)
1.0.26 (10/08/2022) - Ajout du contrôle is_file sur vérification img
1.0.27 à 1.0.31 (10/08(2022) - Contrôle sur fichiers php ajoutés par rapport à la version d'origine
1.0.32 / 1.0.33 (11/08/2022) - Ajout du contrôle sur fichiers index.php
1.0.34 / 1.0.35 / 1.0.36  (11/08/2022) - Suppression de l'affichage du chemin complet des fichiers
1.0.37 / 1.0.38 / 1.0.39 (11/08/2022) - Refacto
1.0.40 / 1.0.41 / 1.0.42 / 1.0.43 (12/08/2022) - Cleaning code
1.0.44 (12/08/2022) - Ajout de contrôle spécifique sur l'admin/index.php + message d'erreur si écriture du script impossible
1.0.45 (12/08/2022) - Suppression des messages en double et refacto
1.0.46 (13/08/2022) - Renommage du script pour éviter les tests d'indésirables
1.0.47 (13/08/2022) - Contrôle de l'unicité du répertoire /admin
1.0.48 (13/08/2022) - Refacto
1.0.49 / 1.0.50 / 1.0.51 (13/08/2022) - Ré-écriture de la recherche des fonctions sensibles dans les modules
1.0.52 (14/08/2022) - Ajout des boutons "Voir" / "Cacher"
1.0.53 / 1.0.54 (15/08/2022) - Analyse plus profonde pour les modules + correctifs
1.0.55 (15/08/2022) - Sécurité : Envoi d'un mail à l'admin de la boutique à chaque utilisation du script
1.0.56 / 1.0.57 / 1.0.58 / 1.0.59 (17/08/2022) - Fix regex bug pour versions PHP 7 à 7.3 (pcre.jit)
1.0.60 (17/08/2022) - Recherche de fichiers php dans répertoires interdits
1.0.61 (17/08/2022) - Recherche de fichiers js suspects supplémentaires
1.0.62 (17/08/2022) - Contrôle mémoire avant d'exécuter le script
1.0.63 (17/08/2022) - Ajout de visualisation de fichiers sensibles modifiés
1.0.64 (18/08/2022) - Tentative d'augmentation de la mémoire pour les serveurs "light"
1.0.65 (19/08/2022) - Ajout de pattern sur hack possible par modules utilisant ioncube
1.0.66 (22/08/2022) - Copie de tous les fichiers supprimés dans le zip de contrôle + divers correctifs et ajustements
1.0.67 / 1.0.68 (31/08/2022) - Contrôle is_file avant de sauvegarder dans l'archive et adaptation regex/patch
1.0.69 (02/09/2022) - Exclusion des fichiers > 300Ko pour éviter le crash des petits serveurs (Modifiable)
1.0.70 / 1.0.71 (05/09/2022) - Modification contrôle fichiers js suspects + ajout liste malwares connus
1.0.72 (06/09/2022) - Ajout de recherche sur codes hexa dans les js
1.0.73 (07/09/2022) - Modification du contrôle mémoire
1.0.74 (07/09/2022) - Ajout de contrôles sur admin et JS suite à nouvelles détections et refacto.
1.0.75 (08/09/2022) - Encodage des chemins de fichiers pour éviter un bug d'affichage.
1.0.76 / 1.0.77 (08/09/2022) - Correction typos
1.0.78 (10/09/2022) - Refacto fin de boucle sur analyse des fichiers
1.0.79 (15/09/2022) - Adaptation du scroll dans les visualisations de fichier
1.0.80 (13/10/2022) - Ajustement des correctifs
1.0.81 (27/10/2022) - Exclusion module Soracaisse (module crypté)
1.0.82 (03/11/2022) - Modification regex sur recherche des js
1.0.83 / 1.0.84 (06/12/2022) - Recherche de fichiers suspects sans extensions
1.0.85 (15/12/2022) - Mise à jour du lien vers les nouvelles archives 1.6
1.0.86 / 1.0.87 / 1.0.88 / 1.0.89 (16/12/2022) - Recherche plus profonde dans le répertoire /img
1.0.90 (16/12/2022) - Suppression des indésirables
2.0.0 (01/01/2023) - Happy New Year et ajout d'une exception + un indésirable
2.0.1 / 2.0.2 (04/01/2023) - Exclusion classes/pdf et ajout de 2 répertoires des contrôles indésirables
2.0.3 (12/01/2023) - Initialisation du timezone
2.0.4 / 2.0.5 / 2.0.6 (16/01/2023) - Ajout du scan sur répertoires supplémentaires
2.0.7 / 2.0.8 (17/01/2023) - Correctif pour versions < 1.6
2.0.9 (21/01/2023) - Refacto des infections connues
2.0.10 (28/01/2023) - log history zip
2.0.11 (31/01/2023) - Ajout d'indésirables détectés
2.0.12 (03/02/2023) - Ajout d'indésirables détectés
2.0.13 / 2.0.14 (08/02/2023) - Ajout de répertoires pour les 1.7
2.0.15 (10/02/2023) - Nouvelle détection ajoutée
2.0.16 (24/02/2023) - Add referer security
2.0.17 / 2.0.18 / 2.0.19 (03/03/2023 - Updates pour les versions PhenixSuite
2.0.20 (06/03/2023) Lien de téléchargement pour les dernières mises à jour coeur
2.0.21 (08/03/2023) Correctif sur l'envoi du mail
2.0.22 (22/03/2023) - Nouvelle détection ajoutée 
2.0.23 (03/04/2023) - Nouvelle détection ajoutée 
*/
$version = '2.0.23';
@ini_set('memory_limit', -1);
@ini_set('max_execution_time', -1);
@date_default_timezone_set('Europe/Paris');
$memory = memoryTest();
$ok = ($memory['memory_limit'] == '-1') || ($memory['memory_limit'] >= 512 * 1024 * 1024); // at least 512M?
if(!$ok) {
    die('La mémoire disponible sur votre serveur ('.$memory['display'].') est insuffisante pour exécuter ce script, veuillez l\'augmenter à 512 MB au minimum');
}
//ini_set('display_errors', 1);
//error_reporting(E_ALL);
if(version_compare(phpversion(), '7.3.0', '<')) {
    @ini_set('pcre.jit',0);
    @ini_set('pcre.backtrack_limit',2148576);
    @ini_set('pcre.recursion_limit',2148576);
}
else {
    @ini_set('pcre2.jit',0);
    @ini_set('pcre2.backtrack_limit',2148576);
    @ini_set('pcre2.recursion_limit',2148576);
}
$root_path = getcwd() .'/';
$root_directory = basename($root_path);
$updating = false;
$protocol = $_SERVER['HTTPS'] ? 'https://' : 'http://';
$arrContextOptions = array(
    "ssl" => array(
        "verify_peer" => false,
        "verify_peer_name" => false,
    ),   
    'http' => array(
       'header' => array("Referer: ".$protocol.$_SERVER['HTTP_HOST']."\r\n")
   )
);
$admin_dir = false;
$found = 0;
$files = scandir($root_path);
$exclude_dirs = array('.', '..', 'Adapter', 'cache', 'classes', 'config', 'src', 'controllers', 'Core', 'css', 'docs', 'download', 'error', 'images', 'img', 'js', 'localization', 'log', 'mails', 'modules', 'override', 'pdf', 'stats', 'themes', 'tools', 'translations', 'upload', 'webservice');
foreach($files as $file) {    
    if(@is_dir($root_path.$file) && !in_array($root_path.$file, $exclude_dirs)) {
        $admin_files = scandir($root_path.$file);
        foreach($admin_files as $admin_file) {
            if($admin_file == 'get-file-admin.php'){
                $admin_dir = $file;
                $found++;
            }
        }
    }
} 
$html = '<html itemscope="" itemtype="https://schema.org/QAPage" lang="fr">
        <head>
            <style>
                .slide-out{display: none;position: absolute;background-color:white;color:black;padding:20px 30px;max-height: 600px;left:50%;top:20px;transform:translate(-50%);overflow:auto;z-index:2;word-break:break-word;white-space:break-spaces;min-width:60%;max-width:90%;}
            </style>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
            <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
            <meta name="apple-mobile-web-app-capable" content="yes">
            <meta name="apple-mobile-web-app-status-bar-style" content="default">
            <meta name="mobile-web-app-capable" content="yes">
            <meta name="HandheldFriendly" content="True">
            <meta name="MobileOptimized" content="320">
            <meta name="title" content="Cleaner by @eolia">
        </head>
        <body style="background:black;padding:15px 15px 30px;color:white;">
        <pre><font color="white"><h3 style="font-size: 1.3em;color:white;">Script de nettoyage et contrôle pour boutiques PhenixSuite/Prestashop by @eolia, version ' . $version .'<br/><span style="font-size:0.7em;">Ce script est fourni gracieusement et en aucun cas son utilisation ne peut être payante ou facturée</span></h3>'.PHP_EOL;
if($found > 1)
    die($html.'<span style="color:red; font-size:1.5em;">Plusieurs répertoires de type /admin ont été trouvés.<br/> Veuillez supprimer ceux qui sont inutiles ou le script ne saura pas lequel analyser</span></pre></body></html>');
if(!$admin_dir) {
    die($html.'<span style="color:red">CMS inconnu. Script interrompu</span></pre></body></html>');
}
// Protect script url
$encoded = substr(md5($root_path . $admin_dir), 0, 12);
$latest_filename = $encoded.'.php';
$current_url = strtok((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]", '?'); 
$current_script = basename($current_url);
$new_url = str_replace($current_script, $latest_filename, $current_url);
$suspicious_zip = new ZipArchive();
$old_zip_filename = $root_path.'suspicious.zip';
$daily_zip = $root_path.'suspicious_'.$encoded.'-'.date('Y-m-d').'.zip';
$list = glob($root_path.'suspicious_'.$encoded.'-*zip');
foreach($list as $file) {
    if(time() - filemtime($file) > 86400*7)
        unlink($file);
}
$zip_filename = $root_path.'suspicious_'.$encoded.'.zip';
$zip_url = str_replace($latest_filename, 'suspicious_'.$encoded.'.zip', $current_url);
if(file_exists($old_zip_filename))
    @unlink($zip_filename);
if(file_exists($zip_filename))
    @unlink($zip_filename);

$upd_fm_message = '';
if(isset($_POST['update_filemanager'])) {       
    $zip = 'https://devcustom.net/public/scripts/filemanager.zip';
    $ext = pathinfo($zip, PATHINFO_EXTENSION);
    $fm_zip = tempnam(sys_get_temp_dir(), $ext);
    copy($zip, $fm_zip, stream_context_create($arrContextOptions));        
    if(file_exists($fm_zip) && strlen($fm_zip)) {
        $zip = new ZipArchive;
        if($zip->open($fm_zip) === TRUE) {
            $zip->extractTo($root_path . $admin_dir);
            $zip->close();
            $upd_fm_message = '<span style="color:#08db08">Le répertoire '.$root_directory.'/**admin**/filemanager a été patché avec succès.</span>'.PHP_EOL.PHP_EOL;
        } 
        else {
            $upd_fm_message = '<span style="color:red">Impossible de mettre à jour le répertoire '.$root_directory.'/**admin**/filemanager</span>'.PHP_EOL.PHP_EOL;
        }
    }
    @unlink($fm_zip);
}
    
if(!preg_match("/modules/i", $root_path) && file_exists('init.php')) {
    // Contrôle de la mise à jour du script.
    $fgc = @file_get_contents('https://devcustom.net/public/cleaner.txt', false, stream_context_create($arrContextOptions));
    if($fgc) {
        if($current_script == 'cleaner.php' || preg_match("/version = \'(.+)\'/i", $fgc, $matches)) {
            // La mise à jour n'est effectuée que si le n° de version est présent et supérieur ou que cleaner.php est encore utilisé
            if($current_script == 'cleaner.php' || version_compare($matches[1], $version, '>')) {
                if(preg_match("/class_index\.php/", $fgc)) {
                    if(!file_put_contents($latest_filename, $fgc.PHP_EOL .'/* Version téléchargée depuis devcustom.net - ' . date("Y-m-d H:i:s") .'*/'))
                        die('<span style="color:red">Impossible de mettre à jour le fichier. Permissions en écriture insuffisantes</span></pre></body></html>');
                    else {
                        if($current_script == 'cleaner.php')
                            file_put_contents('cleaner.php', $fgc);
                    }
                    if(file_exists($latest_filename)) {
                        header('Refresh: 1; url='.$new_url);
                        echo $html;
                        echo $upd_fm_message;
                        echo '<span style="color:red">Votre version doit être mise à jour. Téléchargement de la dernière version '.(isset($matches) ? $matches[1] : '').' et exécution...</span></pre>';
                        sleep(2);
                        $updating = true;
                    }
                }
            }
            else {
                $html .= $upd_fm_message;
                $html .= '<p style="color:white;margin-top: 0;">Mémoire OK. Vous avez la dernière version à jour du script -> Démarrage...<br/>Vous pouvez créer une tache cron dans le module cronjobs 1 fois par semaine en appelant '.$current_url.' automatiquement et recevoir le résultat par mail.</p>'; 
            }    
        }
    }
    else {
        $html .= '<p style="color:white;margin-top: 0;">Mémoire OK. Contrôle de version impossible -> Démarrage avec la version actuelle...<br/>Vous pouvez créer une tache cron dans le module cronjobs 1 fois par semaine en appelant '.$current_url.' automatiquement et recevoir le résultat par mail.</p>'; 
    }
}
else
    die('<pre><span style="color:red">Ce script doit être placé à la racine de votre site (là où est installé votre Prestahop sur votre ftp) et nulle part ailleurs</span></pre></body></html>');

if(!$updating) {
    if($current_script != 'cleaner.php') {
        $html .= '<h4 style="font-size: 1.1em;margin-bottom: 1em;margin-top: 0.3em;color:yellow">Par sécurité l\'url du script a été modifiée. Notez la nouvelle url si vous fermez cette page.<br/>Si vous avez oublié l\'url, relancez cleaner.php après l\'avoir re-téléchargé</h4>';
        if(file_exists($root_path.'cleaner.php'))
            @unlink($root_path.'cleaner.php');
    }
    $integrity = true;
    $heuristic = '<br/><h4 style="font-size: 1.1em;margin-bottom: 0.3em;margin-top: 0.3;color:white;">Contrôle sur les fichiers sensibles connus pour être modifiés:</h4>';
    $indexes = $not_exist = '';
    $to_be_monitored = array('config/alias.php', 'config/config.inc.php', 'classes/db/Db.php', 'classes/Dispatcher.php', 'classes/Hook.php', 'controllers/front/IndexController.php', 'classes/module/Module.php', 'classes/controller/FrontController.php', 'tools/smarty/sysplugins/smarty_internal_templatebase.php');
    $zip_ok = true;
    if($suspicious_zip->open($zip_filename, ZipArchive::CREATE) !== TRUE) {
        $zip_ok = false;
    }    
    require_once (dirname(__file__) .'/config/config.inc.php');
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
	$md5_list = false;
    if(version_compare(_PS_VERSION_, '1.6.1.26', '>=') && version_compare(_PS_VERSION_, '1.7.0.0', '<'))
        $api_url = 'https://devcustom.net/public/scripts/xml/'._PS_VERSION_.'.json';
    else
        $api_url = 'https://md5.enter-solutions.com/json/'._PS_VERSION_.'.json';
    $md5_file = file_get_contents($api_url, false, stream_context_create($arrContextOptions));
    
    if($md5_file)
        $md5_list = json_decode($md5_file);
    if(!is_object($md5_list))
        $md5_list = false;
    $admin = Db::getInstance()->getRow('SELECT `email`, `lastname`, `firstname`
                            FROM `'._DB_PREFIX_.'employee`
                            WHERE `id_profile` = 1 AND `active` = 1
                            ORDER BY '.(version_compare(_PS_VERSION_, '1.6.0.0', '>=') ? '`last_connection_date` DESC,' : '').' `id_employee`');
    $html .= '<span style="color:white;">Si des messages de nettoyage ou suppression sont affichés <b style="color:red">en rouge</b>, votre e-boutique est susceptible d\'avoir été <b>attaquée et a été protégée d\'urgence</b> mais il est nécessaire de <b>restaurer les fichiers modifiés</b> et de <b>changer les mots de passe des employés de votre boutique</b></span>.'.PHP_EOL.PHP_EOL;
    
    if(empty($md5_list)) {
        $integrity = false;
        $html .= '<b style="color:red">Fichiers source introuvables pour cette version: '._PS_VERSION_ .'. Les contrôles md5 ne pourront être effectués.</b><br/>';
    }
    else {
        $html .= '<br/><h4 style="font-size: 1.1em;margin-bottom: 0.3em;margin-top: 0.3;color:white;">Contrôle des fichiers admin:</h4>';
        $found = 0;
        $files1 = glob($root_path.$admin_dir .'/*.php');
        $files2 = glob($root_path.$admin_dir .'/*/*.php');
        $files3 = glob($root_path.$admin_dir .'/*/*/*.php');
        $files = array_merge($files1, $files2, $files3); 
        asort($files);
   
        foreach($files as $file) {
            $script_name = str_replace($root_path.$admin_dir, 'admin', $file);
            if(preg_match("/filemanager/i", $file) && (version_compare(_PS_VERSION_, '1.6.0.0', '>=')))
                continue;
            if(preg_match("/(cleaner|ajax-upgradetab|adminer|pfm|sytem)/i", $file))
                continue;
            $fgc = file_get_contents($file);
            if(!empty($md5_list->{$script_name}) && $md5_list->{$script_name} != md5_file($file)) {
                $content = $fgc;
                if(basename($file) == 'index.php') {
                    $content = cleanIndex($content);
                    if(empty($content)) {
                        $html .= displayFileError('#08db08', 'Fichier modifié par rapport à la version d\'origine. Contenu OK', str_replace($root_path.$admin_dir, $root_directory.'/**admin**', $file), $fgc);
                        continue;
                    }
                    else {
                        $found++;
                        $integrity = false;
                        if($zip_ok)
                            $suspicious_zip->addFile($file, $script_name);
                        $html .= displayFileError('red', 'MD5 ADMIN WARNING : Fichier différent de l\'original', str_replace($root_path.$admin_dir, $root_directory.'/**admin**', $file), $content);
                    }
                }
                else {                 
                    $found++;
                    $integrity = false;
                    if($zip_ok)
                        $suspicious_zip->addFile($file, $script_name);
                    $html .= displayFileError('orange', 'MD5 ADMIN WARNING : Fichier différent de l\'original', str_replace($root_path.$admin_dir, $root_directory.'/**admin**', $file), $content);
                }
                continue;                
            }
            if($md5_list && empty($md5_list->{$script_name})) {
                if(basename($file) == 'index.php') {
                    $content = cleanIndex($fgc);
                    if(empty($content)) {
                        $indexes .= displayFileError('#08db08', 'Fichier inexistant dans la version d\'origine. Contenu OK', str_replace($root_path.$admin_dir, $root_directory.'/**admin**', $file), $fgc);
                        continue;
                    }
                    else {
                        $found++;
                        $indexes .= displayFileError('red', 'Fichier inexistant dans la version d\'origine. Contenu à contrôler', str_replace($root_path.$admin_dir, $root_directory.'/**admin**', $file), $content);
                    } 
                }
                else {
                    $found++;
                    $html .= displayFileError('orange', 'Fichier inexistant dans la version d\'origine. Contenu à contrôler', str_replace($root_path.$admin_dir, $root_directory.'/**admin**', $file), $fgc);
                }
            }            
        }
        if(!$found) 
            $html .= '<b style="color:#08db08">Les fichiers de votre répertoire /admin sont conformes à la version d\'origine</b><br/>';  
    }
    
    $force = true;
    $html .= '<br/><h4 style="font-size: 1.1em;margin-bottom: 0.3em;margin-top: 0.3;color:white;">Contrôle des scripts JS:</h4>';
    $files = array_merge(glob($root_path .'js/*'), glob($root_path .'js/*/*'));
    asort($files);
    $error = 0;
    foreach($files as $file) {
        $script_name = str_replace($root_path, '', $file);
        if(!empty($md5_list->{$script_name})) {
            if($md5_list->{$script_name} != md5_file($file)) { 
                $fgc = file_get_contents($file);
                $error++;
                if($zip_ok && is_file($file)) {
                    $suspicious_zip->addFile($file, $script_name);
                }
                $html .= displayFileError('red', 'MD5 ADMIN WARNING : Fichier différent de l\'original', $root_directory.'/'.$script_name, $fgc);
            }
            continue;
        }    
        $filename = basename($script_name);
        if(preg_match('~[a-zA-Z0-9]{5,5}.js~', $filename) || preg_match('~[0-9]{3,30}~', $filename)) {
            $fgc = file_get_contents($file);
            $error++;
            if($zip_ok && is_file($file)) {
                $suspicious_zip->addFile($file, $script_name);
                $suspicious_zip->close();
                $suspicious_zip->open($zip_filename);
            }
            $fgc = file_get_contents($file);
            if(preg_match('/eval\(function\(/i', $fgc) || preg_match('~(:?\\\\x[0-9A-F]{2}){10}~mi', $fgc)) {
                $html .= '<b style="color:red">Fichier JS infecté trouvé dans: '.$root_directory.'/'.$script_name.'</b><br/>';
                if($force) {              
                    if($zip_ok) {
                        $suspicious_zip->addFile($file, $script_name);
                        $suspicious_zip->close();
                        $suspicious_zip->open($zip_filename);
                    }   
                    if(unlink($file)) {
                        $html .= '<b style="color:#08db08">Fichier '.$root_directory.'/'.$script_name.' supprimé</b>'.PHP_EOL;
                        continue;
                    }    
                }               
            }
            else {
                $message = $md5_list ? 'Fichier JS ajouté, inexistant dans la version d\'origine' : 'Fichier JS à contrôler';
                $html .= displayFileError('red', $message, $root_directory.'/'.$script_name, $fgc);
            }    
        }
        $filesize = filesize($file);
        if($filesize == 33637 || $filesize == 33082) {
            $error++;
            $html .= '<b style="color:red">Fichier JS infecté trouvé dans: '.$root_directory.'/'.$script_name.'</b><br/>';
            if($force) {               
                if($zip_ok) {
                    $suspicious_zip->addFile($file, $script_name);
                    $suspicious_zip->close();
                    $suspicious_zip->open($zip_filename);
                }    
                if(unlink($file))
                    $html .= '<b style="color:#08db08">Fichier '.$script_name.' supprimé</b>'.PHP_EOL;
            }
        }
    }    
    if(!$error)
        $html .= '<b style="color:#08db08">Pas de fichier suspect JS detecté => OK</b><br/>';
    // Contrôle sur un fichier image contenant script en base64
    $html .= '<br/><h4 style="font-size: 1.1em;margin-bottom: 0.3em;margin-top: 0.3;color:white;">Contrôle des images pouvant contenir un script:</h4>';
    $files = glob($root_path .'img/*');
    asort($files);
    $bad_image = 0;
    foreach($files as $file) {
        $script_name = str_replace($root_path, '', $file);
        if(is_file($file)) {
            $fgc = file_get_contents($file);
            if(preg_match("/PHNjcmlwd/i", $fgc)) {
                $bad_image++;
                $html .= '<b style="color:red">Fichier img infecté trouvé sur votre boutique: '.$root_directory.'/'.$script_name.'</b><br/>';
                if($force) {
                    if($zip_ok) {
                        $suspicious_zip->addFile($file, str_replace($root_path, '', $file));
                        $suspicious_zip->close();
                        $suspicious_zip->open($zip_filename);
                    }  
                    if(unlink($file))
                        $html .= 'Fichier '.$root_directory.'/'.$script_name.' supprimé'.PHP_EOL;
                }
            }       
        }        
    }
    if(!$bad_image)
        $html .= '<b style="color:#08db08">Pas de fichier image suspect detecté => OK</b><br/>';  

    // Suppression des includes indésirables
    $html .= '<br/><h4 style="font-size: 1.1em;margin-bottom: 0.3em;margin-top: 0.3;color:white;">Recherche des infections connues:</h4>';
    $error = 0;
    $files = glob($root_path.'config/defines.inc.php');
    foreach($files as $file) {
        $script_name = str_replace($root_path, '', $file);
        $fgc = file_get_contents($file);
        $lines = explode("\n", $fgc);
        $error_line = 0;
        foreach($lines as $key => $line) {
            if(preg_match("/include_once\((.*)'\);/i", $line, $matches)) {
                $error++;
                $error_line++;
                $integrity = false;
                $matches[1] = str_replace("$" . "_SERVER['DOCUMENT_ROOT'].'", '', $matches[1]);
                $infected = trim($matches[1], '/');
                if(file_exists($infected)) {
                    $html .= '<b style="color:red">Fichier indésirable détecté: ' . $infected .'</b><br/>';
                    $error++;
                    $error_line++;
                    $integrity = false;
                    if($force) {
                        if($zip_ok) {
                            $suspicious_zip->addFile($infected, str_replace($root_path, '', $infected));
                            $suspicious_zip->close();
                            $suspicious_zip->open($zip_filename);
                        }  
                        @unlink($infected);
                        if(file_exists($infected)) {
                            $html .= '<b style="color:red">Échec de la suppression de ce fichier - '.str_replace($root_path, '', $infected).' - contactez votre hébergeur pour le faire (le fichier est protégé contre la suppression)' .'</b><br/>';
                        } 
                        else {
                            $html .= '<b style="color:#08db08">>>> Supprimé: '.$infected.'</b><br/>';
                        }
                    }
                }
                $html .= '<b style="color:red">>>> Corrigé: '.$root_directory.'/'.$script_name.'</b><br/>';
                if($force) {
                    unset($lines[$key]);
                    $lines = implode("\n", $lines);
                    file_put_contents($file, $lines);
                }
                break 1;
            }
        }
        if(!$error_line)
            $heuristic .= '<b style="color:#08db08">Contrôle de '.basename($file).' => OK</b><br/>';
    }     
    // ici, le logiciel malveillant écrase l'intégralité de la fonction, ce script supprime l'infection et renvoie en même temps la registerSession manquante jointe, qui supprime l'affichage du module afin que l'administrateur puisse pas le voir dans  l'eshop.
    $files = glob($root_path.'controllers/admin/AdminLoginController.php');
    $error = 0;
    foreach($files as $file) {
        $script_name = str_replace($root_path, '', $file);
        $fgc = file_get_contents($file);
        if(preg_match("/base64/i", $fgc)) {
            if($force) {
                $fgc = preg_replace('/\$path(.*)PrestaShopLogger/ims', '/* Virus infection fixed already */ PrestaShopLogger', $fgc);
                $error++;
                $integrity = false;
                file_put_contents($file, $fgc);
                $html .= '<b style="color:red">>>> Corrigé: '.$root_directory.'/'.$script_name.'</b><br/>';
            }
        }
        // Si c'est PS 1.7, nous devons faire des ajustements
        if(preg_match("/this->trans/i", $fgc) && preg_match("/displayError/i", $fgc) && !preg_match("/registerSession/i", $fgc)) {
            if($force) {
                $fgc = str_replace("if(!Tools::getValue('stay_logged_in'))", "if(method_exists(\$cookie, 'registerSession')) {\$cookie->registerSession(new EmployeeSession());}if(!Tools::getValue('stay_logged_in'))", $fgc);
                $error++;
                $integrity = false;
                file_put_contents($file, $fgc);
                $html .= '<b style="color:red">>>> Corrigé: '.$root_directory.'/'.$script_name.'</b><br/>';
            }
        }
        else {
            if(!$error && version_compare(_PS_VERSION_, '1.7.0.0', '>='))
                $heuristic .= '<b style="color:#08db08">Contrôle de '.$root_directory.'/'.$script_name.' => OK</b><br/>';
        }    
    }
    $error = 0;
    $files = glob($root_path.'classes/controller/Controller.php');
    foreach($files as $file) {
        $script_name = str_replace($root_path, '', $file);      
        $fgc = file_get_contents($file);
        // Suppression de la ligne qui détecte la page de paiement /order
        if(preg_match("/(.*)REQUEST_URI(.*)/", $fgc, $matches)) {
            $fgc = str_replace($matches[0], 'if (0) '.$matches[0], $fgc);
            $html .= displayFileError('red', 'MD5 INTEGRITY >>>> Ligne modifiée: '.$matches[0], $root_directory.'/'.$script_name, $fgc);
            $error++;
            $integrity = false;
            if($force) {
                file_put_contents($file, $fgc);
            }        
        }
        // Suppression du décodage base64
        if(preg_match("/=base64/i", $fgc) && !preg_match("/Virus infection fixed already/i", $fgc)) {
            $fgc = preg_replace('/\$html.=base64_decode/ims', '/* Virus infection fixed already */ // $html.=base64_decode', $fgc);
            $html .= '<b style="color:red">>>> Corrigé: '.$root_directory.'/'.$script_name.'</b><br/>';
            $error++;
            $integrity = false;
            if($force) {
                file_put_contents($file, $fgc);
            }
        }
        if(preg_match("/base64/i", $fgc) && preg_match("/_hash/i", $fgc) && !preg_match("/Virus_infection_fixed_already/i", $fgc)) {
            $fgc = str_replace("_hash'", "_hash_commented_Virus_infection_fixed_already_" . uniqid() . "'", $fgc);
            $html .= '<b style="color:red">>>> Corrigé: '.$root_directory.'/'.$script_name.'</b><br/>';
            $error++;
            $integrity = false;
            if($force) {
                file_put_contents($file, $fgc);
            }
        }
    }
    // Suppression du décodage base64
    $error = 0;
    $files = glob($root_path.'classes/controller/FrontController.php');
    foreach($files as $file) {
        $script_name = str_replace($root_path, '', $file);      
        $fgc = file_get_contents($file);
        if(preg_match("/=base64/i", $fgc) && !preg_match("/Virus infection fixed already/i", $fgc)) {
            $fgc = preg_replace('/\$html.=base64_decode/ims', '/* Virus infection fixed already */ // $html.=base64_decode', $fgc);
            $html .= '<b style="color:red">>>> Corrigé: '.$root_directory.'/'.$script_name.'</b><br/>';
            $error++;
            $integrity = false;
            if($force) {
                file_put_contents($file, $fgc);
            }
        }
    }
    // Ici, il envoie des requêtes, et le supprimer via preg match serait assez incertain, donc on patche juste ce paramètre
    $error = 0;
    $files = glob($root_path.'classes/db/Db.php');
    foreach($files as $file) {
        $fgc = file_get_contents($file);
        if(preg_match("/base64/i", $fgc) && !preg_match("/Virus_infection_fixed_already/i", $fgc)) {
            $fgc = str_replace("_hash'", "_hash_commented_Virus_infection_fixed_already_" . uniqid() . "'", $fgc);
            $html .= '<b style="color:red">>>> Corrigé: '.$root_directory.'/'.$script_name.'</b><br/>';
            $error++;
            $integrity = false;
            if($force) {
                file_put_contents($file, $fgc);
            }
        }
    }

    // Place l'infection sur la dernière ligne du fichier
    $error = 0;
    $files = glob($root_path.'classes/module/Module.php');
    foreach($files as $file) {
   
        $script_name = str_replace($root_path, '', $file);      
        $fgc = file_get_contents($file);
        /* Suppression des 2 caractères ?> */
        $search = "-2) == '')";
        $search_preg_match = "-2\) == ''\)";
        $fix = "-2) == '?>')";
        if(preg_match("/$search_preg_match/i", $fgc)) {
            $fgc = str_replace($search, $fix, $fgc);
            $html .= '<b style="color:red">>>> Corrigé: '.$root_directory.'/'.$script_name.'</b><br/>';
            $error++;
            $integrity = false;
            if($force) {
                file_put_contents($file, $fgc);
            }
        }
        $search = 'encoding="UTF-8"';
        $search_missing_preg_match = 'encoding="UTF-8" \?>';
        $search_preg_match = 'encoding="UTF-8"';
        $fix = 'encoding="UTF-8" ?>';
        if(preg_match("/$search_preg_match/i", $fgc) && !preg_match("/$search_missing_preg_match/i", $fgc)) {
            $fgc = str_replace($search, $fix, $fgc);
            $html .= '<b style="color:red">>>> Corrigé: '.$root_directory.'/'.$script_name.'</b><br/>';
            $error++;
            $integrity = false;
            if($force) {
                file_put_contents($file, $fgc);
            }
        }        
    }
    // Place l'infection sur la dernière ligne du fichier
    $error = 0;
    $files = glob($root_path.'config/alias.php');
    foreach($files as $file) {
        $script_name = str_replace($root_path, '', $file);
        $fgc = file_get_contents($file);
        if(preg_match("/(.*)md5(.*)/i", $fgc, $matches)) {
            $fgc = str_replace($matches[0], 'if (0) '.$matches[0], $fgc);
            $html .= displayFileError('red', 'MD5 INTEGRITY >>>> Ligne modifiée: '.$matches[0], $root_directory.'/'.$script_name, $fgc);
            $error++;
            $integrity = false;
            if($force) {
                file_put_contents($file, $fgc);
            }
        }    
    }
    // Ce fichier est une sorte de webshell qui se télécharge, vu que dans PS 1.7+ (probablement ailleurs où il y a un vrai dossier "/app")
    $error = 0;
    $files = glob($root_path.'app/Mage.php');
    foreach($files as $file) {
        $html .= '<b style="color:red">Fichier indésirable Mage.php détecté: '.$root_directory.'/app/Mage.php</b><br/>';
        $error++;
        if($force) {
            if($zip_ok) {
                $suspicious_zip->addFile($file, str_replace($root_path, '', $file));
                $suspicious_zip->close();
                $suspicious_zip->open($zip_filename);
            }  
            @unlink($file);
            if(file_exists($file)) {
                $integrity = false;
                $html .= '<b style="color:red">!!! Échec de la suppression de ce fichier - '.$root_directory.'/app/Mage.php' .' - contactez votre hébergeur pour le faire (le fichier est protégé contre la suppression)' .'</b><br/>';
            } 
            else {
                $html .= '<b style="color:#08db08">>>> Fichier Mage.php supprimé' .'</b><br/>';
            }
        }
        if(!$error)
            $html .= '<b style="color:#08db08">Fichier indésirable Mage.php absent</b><br/>';
    }

    // ici, on recherche 2 caractères que le malware a supprimés pour cacher certains modules de la liste dans la page "Modules" 
    $error = 0;
    $files = glob($root_path.'tools/smarty/sysplugins/smarty_internal_templatebase.php');
    foreach($files as $file) {
        $script_name = str_replace($root_path, '', $file); 
        $fgc = file_get_contents($file);
        $search = 'eval("" . $';
        $search_preg_match = 'eval\(\"\" . \$';
        $fix = '/* Virus infection fixed already */ eval("?>" . $';
        $found = false;
        if(preg_match("/$search_preg_match/i", $fgc)) { 
            $error++;
            $integrity = false;
            $fgc = str_replace($search, $fix, $fgc);
            $html .= '<b style="color:red">>>> Corrigé: '.$root_directory.'/'.$script_name.'</b><br/>';
            if($force) {
                file_put_contents($file, $fgc);
            }
            $found = true;
        }
        $search = "'/(<%|%>|<\?php|<\?|\)/'";
        $search_preg_match = preg_quote("'/(<%|%>|<\?php|<\?|\)/'", '/');
        $fix = "'/(<%|%>|<\?php|<\?|\?>)/'";
        if(preg_match("/$search_preg_match/i", $fgc)) { 
            $error++;
            $integrity = false;
            $fgc = str_replace($search, $fix, $fgc);
            $html .= '<b style="color:red">>>> Corrigé: '.$root_directory.'/'.$script_name.'</b><br/>';
            if($force) {
                file_put_contents($file, $fgc);
            }
            $found = true;
        }
    }
    if($found && $force) {
        // Si nous avons trouvé une infection, il est nécessaire de supprimer le cache
        $cache_folder = str_replace('/tools/smarty/sysplugins/smarty_internal_templatebase.php', '/cache/smarty/', $file);
        // Chemin des caches (PS 1.6)
        $cache_folder_compile = $cache_folder.'compile';
        $cache_folder_cache = $cache_folder.'cache';
        $uniqid = uniqid();
        // 1.6
        if(file_exists($cache_folder_compile)) {
            rename($cache_folder_compile, $cache_folder_compile.'_' . $uniqid);
        }
        if(file_exists($cache_folder_cache)) {
            rename($cache_folder_cache, $cache_folder_cache.'_' . $uniqid);
        }
        // 1.7 récents
        $cache_folder = str_replace('/tools/smarty/sysplugins/smarty_internal_templatebase.php', '/var/cache/', $file);
        $cache_folder_dev = $cache_folder.'dev';
        $cache_folder_prod = $cache_folder.'prod';
        if(file_exists($cache_folder_dev)) {
            rename($cache_folder_dev, $cache_folder_dev.'_' . $uniqid);
        }
        if(file_exists($cache_folder_prod)) {
            rename($cache_folder_prod, $cache_folder_prod.'_' . $uniqid);
        }
        // 1.7 plus anciens
        $cache_folder = str_replace('/tools/smarty/sysplugins/smarty_internal_templatebase.php', '/app/cache/', $file);
        $cache_folder_dev = $cache_folder.'dev';
        $cache_folder_prod = $cache_folder.'prod';
        if(file_exists($cache_folder_dev)) {
            rename($cache_folder_dev, $cache_folder_dev.'_' . $uniqid);
        }
        if(file_exists($cache_folder_prod)) {
            rename($cache_folder_prod, $cache_folder_prod.'_' . $uniqid);
        }
        $html .= '<br/><b style="color:#08db08">Nettoyage du cache '.(version_compare(_PS_VERSION_, '1.6.1.26', '>=') && version_compare(_PS_VERSION_, '1.7.0.0', '<') ? 'PhenixSuite' : 'Prestashop').' effectué</b><br/>';
    }

    // Il s'agit d'une vérification heuristique pour d'éventuelles nouvelles infections + contrôle MD5 par rapport aux originaux
    $html .= '<br/><h4 style="font-size: 1.1em;margin-bottom: 0.3em;margin-top: 0.3;color:white;">Contrôle de sécurité sur fichiers indésirables connus:</h4>';
    $unwanted = array('1.php', '2.php', '3.php', 'XsamXadoo_Bot.php', 'XsamXadoo_deface.php', '0x666.php', 'f.php', 'eval-stdin.php', 'Xsam_Xadoo.html', 'xsamxadoo.php', 'xsamxadoo1.php',
                        'haxor.php', 'h4x0r.html', 'haxor.html', 'phantom.html', 'new_readme.php', '404.php', 'wp-log.php', 'a.txt', '66.php', 'archive.php', 'Gass.html', '19855c.php',
                        'gasshop.php', 'getfile.php', 'm.php', 'm1.php', 'moban.html', 'popup-pomo.php', 'up.php', 'upload.php', 'V2-plug.php', 'xboo.php.png', 'xGASSx.php', '02ea',
                        'zaz.php', 'zip.php', 'hous.php.png', 'login.php', 'cache/update.php', 'classes/tmp', 'classes/module/tmp', 'controllers/front/tmp', 'modules/tmp', 'config/tmp', 
                        'Core/tmp', 'ini.php', 'web-right.php', '.f26945b1.ico', 'MARIJUANA.php'
    );
    $bad_found = 0;
    foreach($unwanted as $file) {   
        if(version_compare(_PS_VERSION_, '1.6.0.0', '<') && $file == '404.php')
            continue;
        if(file_exists($root_path.$file)) { 
            $bad_found++; 
            $html .= '<b style="color:red">Fichier indésirable détecté: '.$root_directory.'/'.$file.'</b><br/>';    
            if($zip_ok) {
                $suspicious_zip->addFile($root_path.$file, $file);
                $suspicious_zip->close();
                $suspicious_zip->open($zip_filename);
            }  
            if(unlink($root_path.$file))
                $html .= '<b style="color:#08db08">Fichier '.$root_directory.'/'.$file.' indésirable supprimé</b><br/>';
            else
                $html .= '<b style="color:red">!!! Échec de la suppression de ce fichier - '.$root_directory.'/'.$file.' - contactez votre hébergeur pour le faire (le fichier est protégé contre la suppression)' .'</b><br/>';
        } 
    }
    if(!$bad_found)
        $html .= '<b style="color:#08db08">Aucun fichier indésirable connu trouvé</b><br/>';

    $class_regex = '~
                ^\s*(?:abstract)?\s*(?:class|interface|trait)\s+
                (?P<class>\S+)[^{}]+(\{
                (?:[^{}]*|(?2))*
                \})~mx';
    $function_regex = '~
                ^\s*function \s+
                (?<name>\w+)\s*
                \((?<param>[^\)]*)\)\s*
                (?<body>\{(?:[^{}]+|(?&body))*\})
                ~mx';                           
    $re = '/(?:\/\*([^*]|(\*+([^*\/])))*\*\/)|(?:\/\/.*$)|(?:#.*$)|(?:\'(?:[^\'\\\\]|\\\\.)*\'|"(?:[^"\\\\]|\\\\.)*")/mU';  
    $core_control = '<br/><h4 style="font-size: 1.1em;margin-bottom: 0.3em;margin-top: 0.3;color:white;">Contrôle de sécurité sur les fichiers php coeur:</h4>';
    $files = array_merge(glob($root_path.'*'), glob($root_path.'config/'), glob($root_path.'classes/'), glob($root_path.'classes/*/'), glob($root_path.'controllers/*/'));
    asort($files);
    foreach($files as $file) {    
        $path_parts = pathinfo($script_name); 
        if(is_file($file) && !$path_parts['extension']) {
            if($zip_ok) {
                $suspicious_zip->addFile($file, str_replace($root_path, '', $file));
                $suspicious_zip->close();
                $suspicious_zip->open($zip_filename);
            } 
            $integrity = false;
            $error++;
            $core_control .= '<b style="color:red">Fichier suspect sans extension détecté: '.str_replace($root_path, '', $file).'</b><br/>';
        } 
    }     
    $files = array();    
    $files = array_merge_recursive($files, glob($root_path.'*.php')); 
    $files = array_merge_recursive($files, glob($root_path.'Adapter/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'cache/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'config/*.php'));  
    $files = array_merge_recursive($files, glob($root_path.'config/*/*.php'));  
    $files = array_merge_recursive($files, glob($root_path.'controllers/*/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'Core/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'Core/*/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'Core/*/*/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'Core/*/*/*/*.php')); 
    $files = array_merge_recursive($files, glob($root_path.'classes/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'classes/*/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'css/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'img/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'img/*/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'img/*/*/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'js/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'js/*/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'localization/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'mails/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'mails/*/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'override/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'override/*/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'override/*/*/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'pdf/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'tools/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'tools/*/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'tools/*/*/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'translations/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'themes/*.php'));
    $files = array_merge_recursive($files, glob($root_path.'webservice/*.php'));
    if(version_compare(_PS_VERSION_, '1.7.0.0', '>=')) {
        $files = array_merge_recursive($files, glob($root_path.'app/*.php'));
        $files = array_merge_recursive($files, glob($root_path.'app/*/*.php'));
        $files = array_merge_recursive($files, glob($root_path.'app/*/*/*.php'));
        $files = array_merge_recursive($files, glob($root_path.'var/*.php'));
        $files = array_merge_recursive($files, glob($root_path.'bin/*.php'));
        $files = array_merge_recursive($files, glob($root_path.'vendor/*.php'));
        $files = array_merge_recursive($files, glob($root_path.'vendor/*/*.php'));
        $files = array_merge_recursive($files, glob($root_path.'src/*.php'));
        $files = array_merge_recursive($files, glob($root_path.'src/Core/*.php'));
        $files = array_merge_recursive($files, glob($root_path.'src/Core/*/*.php'));
        $files = array_merge_recursive($files, glob($root_path.'src/Core/*/*/*.php'));
        $files = array_merge_recursive($files, glob($root_path.'src/Core/*/*/*/*.php'));
        $files = array_merge_recursive($files, glob($root_path.'src/Adapter/*.php')); 
        $files = array_merge_recursive($files, glob($root_path.'src/PrestaShopBundle/*.php'));
        $files = array_merge_recursive($files, glob($root_path.'src/PrestaShopBundle/*/*.php')); 
        $files = array_merge_recursive($files, glob($root_path.'translations/export/*.php')); 
    }
    $escaped = '';
    $full = isset($_POST['full']);
    asort($files);
    foreach($files as $file) {
        if (!$full && filesize($file) > 300*1024) { 
            $escaped .= '- '.str_replace($root_path, '', $file).' ('.round(filesize($file)/1024).' Ko)<br/>';
            continue; 
        }  
        $error2 = 0;    
        $original = true;
        $script_name = str_replace($root_path, '', $file);
        if($script_name == 'cache/class_index.php' || $script_name == 'cache/classes/index.php')
            continue;

        $fgc = file_get_contents($file);
        if($script_name == 'config/smarty.config.inc.php') {
            $script_name = str_replace($root_path, '', $file);
            if(preg_match('/if \(Configuration::get\(\'PS_SMARTY_CACHING_TYPE\'\)/', $fgc, $matches)) {
                $fgc = preg_replace('/if \(Configuration::get\(\'PS_SMARTY_CACHING_TYPE\'\)/', 'if(false && Configuration::get(\'PS_SMARTY_CACHING_TYPE\')', $fgc);
                if($force) {
                    file_put_contents($file, $fgc);
                    $core_control .= '<b style="color:#08db08">Fichier '.$root_directory.'/'.$script_name.' patché avec succès (Injection SQL possible par cache Smarty)</b><br/>';
                    continue;
                }    
            }
        }             
        if($script_name == 'config/smarty.config.inc.php' && version_compare(_PS_VERSION_, '1.7.8.7', '<') && preg_match('~if\(false && Configuration::get~', $fgc)) {
            $core_control .= '<b style="color:#08db08">Contrôle du patch (Injection SQL possible par cache Smarty) sur '.$root_directory.'/'.$script_name.' => OK</b><br/>';
            continue;
        } 
        if($md5_list != false) {            
            if(!empty($md5_list->{$script_name}) && $md5_list->{$script_name} != md5_file($file)) {
                if(basename($file) == 'index.php') {
                    $content = cleanIndex(file_get_contents($file));
                    if(empty($content)) {
                        $core_control .= '<b style="color:#08db08">MD5 INTEGRITY : Fichier index.php modifié par rapport à la version d\'origine. Contenu OK: '.$root_directory.'/'.$script_name.'</b><br/>';
                    }
                    else {                        
                        $original = false; 
                        $integrity = false;
                        $error++;$error2++;
                        if($zip_ok)
                            $suspicious_zip->addFile($file, $script_name);
                        $core_control .= displayFileError('red', 'MD5 INTEGRITY : Fichier index.php modifié par rapport à la version d\'origine. Contenu à contrôler', $root_directory.'/'.$script_name, $fgc);
                    }
                    continue; 
                }
                else {                    
                    $original = false; 
                    $integrity = false;
                    $error++;$error2++;
                    if(preg_match("/\$GLOBALS|\$_GET\[§\]|gzinflate\(substr\(/i", $fgc)) {
                        if(in_array($script_name, $to_be_monitored)) {
                            $core_control .= displayFileError('red', 'MD5 INTEGRITY : Fichier php infecté. Contenu à restaurer impérativement', $root_directory.'/'.$script_name, $fgc);
                        }
                        else {
                            $heuristic .= displayFileError('red', 'MD5 INTEGRITY : Fichier php infecté. Contenu à restaurer impérativement', $root_directory.'/'.$script_name, $fgc);
                        }
                        if($zip_ok)
                            $suspicious_zip->addFile($file, $script_name);
                    } 
                    else {                  
                        if($zip_ok)
                            $suspicious_zip->addFile($file, $script_name);
                        if(in_array($script_name, $to_be_monitored)) {
                            $heuristic .= displayFileError('orange', 'Contrôle de '.basename($file).' : Fichier php modifié par rapport à la version d\'origine', $root_directory.'/'.$script_name, $fgc);
                        }
                        else {
                            $core_control .= displayFileError('orange', 'MD5 INTEGRITY : Fichier php modifié par rapport à la version d\'origine. Contenu à contrôler', $root_directory.'/'.$script_name, $fgc); 
                        }
                    }
                    continue;     
                }
            }  
            if($script_name != $latest_filename && !isset($md5_list->{$script_name})) { 

                $content = file_get_contents($file);
                if(basename($file) == 'index.php') {
                    $content = cleanIndex($content);
                    if(!empty($content)) {
                        /*$indexes .= displayFileError('#08db08', 'Fichier inexistant dans la version d\'origine. Contenu OK', $root_directory.'/'.$script_name, $fgc);
                    }
                    else {*/
                        $indexes .= displayFileError('orange', 'MD5 INTEGRITY : Fichier index.php modifié par rapport à la version d\'origine. Contenu à contrôler', $root_directory.'/'.$script_name, $fgc); 
                    }    
                    if($zip_ok)
                        $suspicious_zip->addFile($file, $script_name);
                    continue; 
                }                
                $error2++;
                $color2 = '#187ed8';
                if(dirname($script_name) == 'config') {
                    $content = preg_replace('/(define\(\'.*?\', )([^\/)]*)(\);)/m', '$1XXXXXXX$3', $content);
                }
                if(preg_match('#^(?:admin|js|img|cms|css|pdf|themes|tmp|upload|localization)#i', dirname($script_name))) {
                    $not_exist .= displayFileError('red', 'Fichier php suspect interdit dans ce répertoire', $root_directory.'/'.$script_name, $fgc);
                    if($zip_ok) {
                        $suspicious_zip->addFile($file, $script_name);
                        $suspicious_zip->close();
                        $suspicious_zip->open($zip_filename);
                    }  
                    if(unlink($file))
                        $not_exist .= '<b style="color:#08db08">Fichier '.$root_directory.'/'.$script_name.' indésirable supprimé</b><br/>';
                    else
                        $not_exist .= '<b style="color:red">!!! Échec de la suppression de ce fichier - '.$root_directory.'/'.$script_name.' - contactez votre hébergeur pour le faire (le fichier est protégé contre la suppression)' .'</b><br/>';
                    continue;    
                }
                else {     
                    if(preg_match('/move_uploaded_file|file_put_contents|uhex|0x5a455553|include\(file_get_contents|assert\(|github\.io|dyuweyrj|dyuweyrj4|pastebin|eval\((base64|eval|\$_|\$\$|\$[A-Za-z_0-9\{]*(\(|\{|\[))/i', $content, $mmatches, PREG_OFFSET_CAPTURE))
                        $color2 = 'red';
                    $not_exist .= displayFileError($color2, 'Fichier php inexistant dans la version d\'origine. Contenu à contrôler', $root_directory.'/'.$script_name, $fgc);
                }    
                if($zip_ok)
                    $suspicious_zip->addFile($file, $script_name);
            }
        }
        // Lignes en dehors des classes
        if(!$original) {
            $content_file = $fgc;
            $origins = array();
            $fgc = preg_replace_callback(
                    $re,
                    function ($matches) use (&$origins) {
                        static $n = 0;
                        $n++;
                        $i = "\4".$n."\4";
                        if($matches[0][0] == '\'') { $origins[$i] = $matches[0]; return $i; }
                        if($matches[0][0] == '"') { $origins[$i] = $matches[0]; return $i; }
                        return '';
                    }
                    , $fgc
                );

            if(preg_match_all($class_regex, $fgc, $matches)) { 
                $test = $fgc;
                foreach($matches[0] as $match) { 
                    $test = str_replace($match, '', $test);
                }    
                $test = trim(str_replace(array('<?php', '?>'), '', $test));
                $test = trim(preg_replace('~^\s*(?:use|namespace)\s+.*$~mxi', '', $test));
                if(preg_match_all($function_regex, $test, $fmatches)) { 
                    foreach($fmatches[0] as $fmatch) { 
                        $test = str_replace($fmatch, '', $test);
                    } 
                    $test = trim($test);    
                }
                foreach($origins as $k => &$m) {
                    $test = str_replace($k, $m, $test);
                }
                if(strlen($test)) {
                    $error++;$error2++;
                    $integrity = false;
                    $core_control .= displayFileError('orange', 'Lignes hors classe', $root_directory.'/'.$script_name, $test);
                    if(in_array($script_name, $to_be_monitored)) {
                        $content_file = str_replace($test, '', $content_file);
                        if($force) {
                            file_put_contents($file, $content_file);
                            $core_control .= '<b style="color:red">Classe coeur corrigée: '.$root_directory.'/'.$script_name.'</b><br/>';
                        }
                    }
                }
            }
        }   
        else {
            if(!$error2 && in_array($script_name, $to_be_monitored))
                $heuristic .= '<b style="color:#08db08">Contrôle de '.basename($file).' => OK</b><br/>';
        }    
    }
    $modules = '<h4 style="font-size: 1.1em;margin-bottom: 0.3em;margin-top: 1.2em;color:white;">Recherche de vulnérabilité sur les modules (à titre d\'information, si le module est connu il n\'y a à priori pas de risque):</h4>';
    $bad = 0;
    // Nettoyage des indésirables dans /modules
    $files = glob($root_path.'modules/*');
    asort($files);
    foreach($files as $file) {
        $script_name = str_replace($root_path.'modules/', '', $file);
        $path_parts = pathinfo($script_name); 
        if(is_file($file) && !$path_parts['extension']) {
            if($zip_ok) {
                $suspicious_zip->addFile($file, str_replace($root_path, '', $file));
                $suspicious_zip->close();
                $suspicious_zip->open($zip_filename);
            } 
            $modules .= '<b style="color:orange">Fichier sans extension détecté: '.str_replace($root_path, '', $file).'</b><br/>';
        }        
        if(preg_match('~.+(?:\.zip|\.pdf|\.png|\.jpg|\.jpeg|\.ico|\.gif|\.txt|_|__|\.old|_old|\.bak|_bak|-|--)$~i', $script_name)) {
            if(is_file($file)) {
                if($zip_ok) {
                    $suspicious_zip->addFile($file, str_replace($root_path, '', $file));
                    $suspicious_zip->close();
                    $suspicious_zip->open($zip_filename);
                }    
                if(unlink($file))
                    $modules .= 'Elément indésirable supprimé dans /modules : '.$script_name.'<br/>';
            }
            else {
                $modules .= '<b style="color:orange">Répertoire indésirable détecté (à supprimer ou à sauvegarder ailleurs): '.str_replace($root_path, '', $file).'</b><br/>';
            }
        } 
    }     
    $files = array_merge(glob($root_path.'modules/*.php'), glob($root_path.'modules/*.ico'), glob($root_path.'modules/*/*/*.php'), glob($root_path.'modules/*/*/*/*.php'), glob($root_path.'modules/*/*/*/*/*.php'));
    asort($files);
    foreach($files as $file) {
        if (!$full && filesize($file) > 300*1024) { 
            $escaped .= '- '.str_replace($root_path, '', $file).' ('.round(filesize($file)/1024).' Ko)<br/>';
            continue; 
        }
        $original_content = $fgc = file_get_contents($file);         
        $script_name = str_replace($root_path, '', $file);
        if($script_name == 'soracaisse')
            continue;
        if(preg_match('/move_uploaded_file|github\.io|0x5a455553|file_put_contents|include\(file_get_contents\(|fwrite|assert\(|dyuweyrj|dyuweyrj4|pastebin|eval\((base64|eval|\$_|\$\$|\$[A-Za-z_0-9\{]*(\(|\{|\[))/i', $fgc, $mmatches, PREG_OFFSET_CAPTURE)) {
            $risk = $mmatches[0][0];
            $color_m = $risk == 'eval(base64' ? '#ff5900;' : 'orange;';
            // Lignes en dehors des classes
            $origins = array();
            $fgc = preg_replace_callback(
                    $re,
                    function ($matches) use (&$origins) {
                        static $n = 0;
                        $n++;
                        $i = "\4".$n."\4";
                        if($matches[0][0] == '\'') { $origins[$i] = $matches[0]; return $i; }
                        if($matches[0][0] == '"') { $origins[$i] = $matches[0]; return $i; }
                        return '';
                    }
                    , $fgc
                );
            if(preg_match_all($class_regex, $fgc, $matches)) { 
                $test = $fgc;
                foreach($matches[0] as $match) { 
                    $test = str_replace($match, '', $test);
                }    
                $test = trim(str_replace(array('<?php', '?>'), '', $test));
                $test = trim(preg_replace('~^\s*(?:use|namespace)\s+.*$~mxi', '', $test));
                if(preg_match_all($function_regex, $test, $fmatches)) { 
                    foreach($fmatches[0] as $fmatch) { 
                        $test = str_replace($fmatch, '', $test);
                    } 
                    $test = trim($test);    
                }                               
                foreach($origins as $k => &$m) {
                    $test = str_replace($k, $m, $test);
                }
                if(preg_match('~'.preg_quote($risk,'~').'~', $test) && strlen($test)) {
                    $bad++;
                    $modules .= displayFileError($color_m, 'Fonction sensible hors classe à contrôler: '.$risk.'', $root_directory.'/'.$script_name, $test);                    
                    if($zip_ok)
                        $suspicious_zip->addFile($file, str_replace($root_path, '', $file));
                }
            }
            else {
                $bad++;
                $modules .= displayFileError($color_m, 'Fonction sensible à contrôler: '.$risk.'', $root_directory.'/'.$script_name, $original_content);                 
                if($zip_ok)
                    $suspicious_zip->addFile($file, str_replace($root_path, '', $file));               
            }
        }    
    }
    if(!$bad) {
        $modules .= '<b style="color:#08db08">Pas de fonction sensible hors-classe trouvée dans les modules de votre boutique => OK</b><br/>';
    }   
    // Suppression du cache des classes, il sera regéneré
    if($force) {
        if(file_exists($root_path.'cache/class_index.php')) {
            @unlink($root_path.'cache/class_index.php');
        }       
        if(file_exists($root_path.'cache/classes/index.php')) {
            @unlink($root_path.'cache/classes/index.php');
        }
    }
    $html .= $heuristic;
    $html .= $core_control;   
    if(!$md5_list) {
        $html .= '<b style="color:red">Votre version '.(version_compare(_PS_VERSION_, '1.6.1.26', '>=') && version_compare(_PS_VERSION_, '1.7.0.0', '<') ? 'PhenixSuite' : 'Prestashop').' est inexistante dans les archives md5, le contrôle d\'intégrité n\'a donc pu être effectué.</b><br/>';
    }
    if($indexes)
        $html .= '<br/><h4 style="font-size: 1.1em;margin-bottom: 0.3em;margin-top: 0.3;color:white;">Recherche des index.php ajoutés:</h4>'.$indexes;
    if($not_exist)
        $html .= '<br/><h4 style="font-size: 1.1em;margin-bottom: 0.3em;margin-top: 0.3;color:white;">Recherche de fichiers php ajoutés:</h4>'.$not_exist;
    $html .= $modules;
    $html .= PHP_EOL;
    $html .= '<h4 style="font-size:1.1em;margin-bottom:0.3em;margin-top:0.3;color:'.(!$integrity ? '#ff5900;' : 'white;').'">ANALYSE TERMINÉE</h4>';
    if($integrity)
        $html .= '<br/><b style="color:#08db08">Intégrité '.(version_compare(_PS_VERSION_, '1.6.1.26', '>=') && version_compare(_PS_VERSION_, '1.7.0.0', '<') ? 'PhenixSuite' : 'Prestashop').' OK: Tous vos fichiers coeur sont conformes ou patchés</b> <img width="50" src="https://devcustom.net/public/img/congrat.gif" />';
    else {
        if($md5_list)
            $html .= '<br/><b style="color:orange">!!! ATTENTION !!! Certains de vos fichiers coeurs ont été modifiés.<br/>Si ces modifications ne sont pas volontaires, nous vous conseillons de comparer les fichiers avec les 2 zips (suspicious_xxxx et '.(version_compare(_PS_VERSION_, '1.6.1.26', '>=') && version_compare(_PS_VERSION_, '1.7.0.0', '<') ? 'PhenixSuite' : 'Prestashop').') et de les restaurer dans leur version d\'origine si nécessaire.</b><br/><br/><b style="color:red">IMPORTANT: Si les fichiers coeurs modifiés commencent par /**/ vous avez été victime d\'un hack. Restaurez les versions d\'origine immédiatement !</b>';
    }
    $html .= PHP_EOL.PHP_EOL;
    if(version_compare(_PS_VERSION_, '1.6.1.24', '<=') || version_compare(_PS_VERSION_, '1.7.0.0', '>=')) {
        $html .= '<a href="https://www.prestashop.com/fr/system/files/ps_releases/prestashop_'._PS_VERSION_.'.zip"><button style="cursor:pointer;text-decoration:none;">Télécharger l\'archive de votre version d\'origine Prestashop '._PS_VERSION_.'</button></a>'.PHP_EOL.PHP_EOL;
    } 
    else {
        $html .= '<a href="https://devcustom.net/public/scripts/prestashop_dl/prestashop_'._PS_VERSION_.'.zip"><button style="cursor:pointer;text-decoration:none;">Télécharger l\'archive de votre version d\'origine '.(version_compare(_PS_VERSION_, '1.6.1.26', '>=') && version_compare(_PS_VERSION_, '1.7.0.0', '<') ? 'PhenixSuite' : 'Prestashop').' '._PS_VERSION_.'</button></a>'.PHP_EOL.PHP_EOL;        
    }    
    if($zip_ok && $suspicious_zip->numFiles > 0) {
        $suspicious_zip->close(); 
        if(file_exists($zip_filename)) {
            $html .= '<a href="'.$zip_url.'"><button style="cursor:pointer;background: orange;border: 2px solid orange;border-style: outset;border-radius: 2px;text-decoration:none;">Télécharger l\'archive des fichiers à contrôler</button></a>'.PHP_EOL.PHP_EOL;
        }
        if(!file_exists($daily_zip))
            copy($zip_filename, $daily_zip);
    }
    else
        @unlink($zip_filename);
          
    if(version_compare(_PS_VERSION_, '1.6.0.0', '>=') && version_compare(_PS_VERSION_, '1.7.0.0', '<')) {
        $md5_filemanager = false;
        $api_url = 'https://devcustom.net/public/scripts/filemanager_md5.json';
        $md5_file = file_get_contents($api_url, false, stream_context_create($arrContextOptions));
        if($md5_file)
            $md5_filemanager = json_decode($md5_file);
        if(!is_object($md5_filemanager))
            $md5_filemanager = false;
        $found = 0;
        $link = $root_directory.'/**admin**/filemanager';
        $files1 = glob($root_path.$admin_dir .'/filemanager/*.php');
        $files2 = glob($root_path.$admin_dir .'/filemanager/*/*.php');
        $files = array_merge($files1, $files2); 
        foreach($files as $file) {
            $script_name = str_replace($root_path.$admin_dir, 'admin', $file);
            if(basename($script_name) != 'index.php' && !empty($md5_filemanager->{$script_name}) && $md5_filemanager->{$script_name} != md5_file($file)) {
                $found++;
                $html .= '<b style="color:orange">>>> FILEMANAGER WARNING <<< : Fichier non patché '.$link .'</b><br/>';
                break;                  
            }    
        }
        if($found) {
            $html .= PHP_EOL.'<b style="color:orange">Votre version possède une faille potentielle dans le répertoire '.$link.'. Veuillez télécharger la version patchée et la dézipper dans le répertoire de votre admin</b>'.PHP_EOL.PHP_EOL;
            $html .= '<a href="https://devcustom.net/public/scripts/filemanager.zip"><button style="cursor:pointer">Télécharger la version protégée du répertoire '.$link.'</button></a>'.PHP_EOL;
            $html .= '<b style="color:orange">ou</b>'.PHP_EOL;
            $html .= '<form action="'.$_SERVER['REQUEST_URI'].'" method="POST"><input type="submit" name="update_filemanager" value="Patcher le répertoire" style="cursor:pointer"/></form>'. PHP_EOL;
        }
        else {
            $html .= '<b style="color:#08db08">INFO: Votre site possède la version patchée du répertoire '.$link.'</b><br/><br/>'; 
        } 
    }
    if(version_compare(_PS_VERSION_, '1.7.0.0', '<')) {
        $html .= '<p style="text-align:center">La dernière version à jour compatible PHP8 de votre version 1.6 est disponible !<br/>';
        $html .= '<a href="https://eoliashop.com/prestashop-new"><button style="cursor:pointer;color:white;padding: 7px 9px;background-color: #268CCD !important;border-radius: 5px;">En savoir plus</button></a></p><br/>';
    }    
    $html .= '<a href="https://eoliashop.com/" style="color: #6464f2;float:right;padding: 5px;text-decoration:none;" target="_blank">EoliaShop &copy;</a>';                        
    $message = preg_replace('~<div class="slide-out">(.*?)</div>~s', '', $html);
    $message = str_replace(' <button onclick="toggleSideNav(this)">Voir</button>', '', $message);
    $message .= '<br/><h3 style="font-size: 1.2em;padding:20px 5px 30px;color:white;">Ce script a été exécuté aujourd\'hui à '.date('H:i:s').' depuis '.$current_url.'<br/>IP de l\'apellant: '.getIpAddress().'<br/>Si vous n\'êtes pas à l\'origine de cette action, veuillez contrôler vos accès FTP ou vérifier ceux qui en possèdent.<br/>En cas de doute vous pouvez me contacter par mail à eolia@eoliashop.com</h3></font></pre></body></html>';  
    $message = str_replace('background:black;padding:15px 15px 30px;color:white;', 'max-width:1200px;width:100%;word-wrap: break-word;background:black;padding:15px 15px 30px;color:white;', $message); 
    $to      = '=?UTF-8?B?' . base64_encode($admin['firstname'].' '.$admin['lastname']).'?= <'.$admin['email'].'>'; 
    $subject = '=?UTF-8?B?' . base64_encode('INFO: Une analyse de votre site '.$_SERVER['HTTP_HOST'].' a été lancée depuis le script @Eolia') .'?='; 
    $headers[] = 'MIME-Version: 1.0';
    $headers[] = 'Content-Type: text/html; charset=utf-8';
    $headers[] = 'From: Security scan <'.$encoded.'@'.$_SERVER['HTTP_HOST'].'>';
    $headers[] = 'Content-Transfer-Encoding: base64'; 
    mail($to, $subject, base64_encode($message), implode("\r\n", $headers));
    $html .= '<a href="'.$_SERVER['REQUEST_URI'].'"><button style="cursor:pointer;text-decoration:none;">Relancer le script</button></a>';
    if($escaped) {
        $html .= '<p style="margin-top: 10px;margin-bottom: -1em;color: darkviolet;">Fichiers de taille supérieure à 300Ko exclus de l\'analyse pour éviter le crash du script en défaut mémoire (segmentation fault):<br/>'.$escaped.'<br/>Si vous pensez que votre serveur peut les analyser, cliquez ci-dessous</p>
        <form action="'.$_SERVER['REQUEST_URI'].'" method="post" style="display: table;">
            <input type="hidden" name="full" value="1">
            <input type="submit" value="Relancer l\'analyse complète de TOUS les fichiers" />
        </form>';
    }
    $html .= '
        </font></pre>
            <script text="javascript">
                function isHidden(el) {
                    return ((window.getComputedStyle(el).getPropertyValue("display") === "none") || (window.getComputedStyle(el).getPropertyValue("visibility") === "hidden"))
                }
                function toggleSideNav(el) {
                    var nextDiv = el.nextSibling;
                    if(isHidden(nextDiv)) {
                        var detailBlocks = document.getElementsByClassName("slide-out");
                        Array.prototype.forEach.call(detailBlocks, function(detailBlock) {
                            detailBlock.style.cssText = "display:none";
                            detailBlock.previousSibling.innerText = "Voir";
                        });
                        nextDiv.style.cssText = "display:block";
                        el.innerText = "Cacher";
                        el.scrollIntoView({ 
                            behavior: "smooth", 
                            block: "center"
                        });
                    }
                    else {
                        nextDiv.style.cssText = "display:none";
                        el.innerText = "Voir";
                    }
                }
            </script></body></html>';
    die($html);
}
function displayFileError($color, $message, $path, $file) {
    return '<div style="position:relative"><b style="color:'.$color.'">'.htmlspecialchars($message).' => '.htmlspecialchars($path).'</b> <button onclick="toggleSideNav(this)">Voir</button><div class="slide-out">'.htmlspecialchars($file).'</div></div>'; 
}
function cleanIndex($content) {  
    // Doekia
    $content = preg_replace('~/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/~m', '', $content);
    $content = preg_replace('~header\(.*\);~mU','',$content);
    $content = preg_replace('~<\?php~mU','',$content);
    $content = preg_replace('~exit;~mU','',$content);
    $content = preg_replace('~\?>~mU','',$content);
    $content = trim($content);
    return $content;
}
function getIpAddress() {
    $ipAddress = '';
    if(!empty($_SERVER["HTTP_CF_CONNECTING_IP"])) {
        return $_SERVER["HTTP_CF_CONNECTING_IP"];
    }
    if(!empty($_SERVER['HTTP_CLIENT_IP'])) {
        $ipAddress = $_SERVER['HTTP_CLIENT_IP'];
    } 
    else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ipAddressList = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        foreach($ipAddressList as $ip) {
            if(!empty($ip)) {
                $ipAddress = $ip;
                break;
            }
        }
    } 
    else if(!empty($_SERVER['HTTP_X_FORWARDED'])) {
        $ipAddress = $_SERVER['HTTP_X_FORWARDED'];
    } 
    else if(!empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) {
        $ipAddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
    } 
    else if(!empty($_SERVER['HTTP_FORWARDED_FOR'])) {
        $ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
    } 
    else if(!empty($_SERVER['HTTP_FORWARDED'])) {
        $ipAddress = $_SERVER['HTTP_FORWARDED'];
    } 
    else if(!empty($_SERVER['REMOTE_ADDR'])) {
        $ipAddress = $_SERVER['REMOTE_ADDR'];
    }
    return $ipAddress;
}
function memoryTest() {
    $memory_limit = ini_get('memory_limit');
    $memory = array('memory_limit' => $memory_limit, 'display' => '');
    if(preg_match('/^(\d+)(.)$/', $memory_limit, $matches)) {
        if($matches[2] == 'T') {
            $memory_limit = $matches[1]*(1024 ** 4);
        }
        elseif($matches[2] == 'G') {
            $memory_limit = $matches[1]*(1024 ** 3);
        }
        elseif($matches[2] == 'M') {
            $memory_limit = $matches[1]*(1024 ** 2);
        }
        elseif($matches[2] == 'K') {
            $memory_limit = $matches[1]*1024;
        }
        $memory['memory_limit'] = $memory_limit;
        $memory['display'] = $matches[1].$matches[2];
    }
    return $memory;
}
/* Version téléchargée depuis devcustom.net - 2023-04-12 11:44:02*/

Get to Know Us

Get to Know Us  
  • About Tradaka

Tradaka.com

Tradaka.com  
  • Shipping
  • Legal Notice
  • Conditions of Use and Sale
  • Secure Payments
  • FAQ
  • Contact us

Your account

Your account  
  • Personal info
  • Orders
  • Credit slips
  • Addresses
  • Vouchers

Store information

Tradaka
France
Call us: +33 1 84 80 35 18
Email us: tradcontact@tradaka.com
Store information
Tradaka a reçu la note de 4.1/5 sur 28 avis.

© 2026 - Tradaka.com

Language:
  • Français
  • English
  • Deutsch