PHP Classes

File: system/helpers/scl.php

Recommend this page to a friend!
  Classes of Dimitri Sitchet   dFramework   system/helpers/scl.php   Download  
File: system/helpers/scl.php
Role: Example script
Content type: text/plain
Description: Example script
Class: dFramework
Framework to build PHP applications
Author: By
Last change:
Date: 4 years ago
Size: 50,390 bytes
 

Contents

Class file image Download
<?php /*** *----------- ShortCodeLib-php V3 -------------- * * * Bienenue à la bibliothèque de fonctions php "ShortCodeLib 3" * * Cette bibliothèque a été mise sur pied pour faciliter le développement des projets php * * ---- @Auteur : Sitchet Tomkeu Dimitric - Elève Ingénieur des travaux informatique option Génie Loiciel * ---- @Contact : (+237) 691 88 95 87 - 673 40 66 61 / dev.dimitrisitchet@gmail.com * ---- @Licence : Creative Commons 4.0 * Vous êtes libre d'utiliser, de modifier et de partager cette bibliothèque à * condition expresse de respecter toutes les conditions ci-dessous * 1 - CC-BY : En utilisant, en modifiant, ou en partageant ce code, vous * reconnaissez qu'il a été crée par Sitchet Tomkeu Dimitric * 2 - CC-SA : Pour partager ce code, vous devez le faire suivant les mêmes * conditions d'utilisation sus énumerées. Le nom de son auteur doit * apparaitre dans toutes les copies. * * ---- Nouveautés V3.0 : * Par Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> le 09/05/2019 * 1) Ajout de la fonction scl_cypher() qui crypte et decrypte une chaine par simple substitution (ancienne fonctionnalite de scl_hash) * 2) Modification de la fonction scl_hash() en fonction de hashage a sens unique * * ---- Nouveautés V3.0.1 : * Par Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> le 10/05/2019 * 1) Modification de la fonction scl_include() pour gerer les inclusions faibles et fortes * * ---- Nouveautés V3.2 : * Par Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> le 13/08/2019 * 1) Ajout de la fonction scl_byte2size() qui renvoie le nombre de kb, mo, gb en fonction du nombre de byte passé en parametre * 2) Ajout de la fonction scl_int2letter() qui transforme un chiffre en lettre * * ---- Nouveautés V3.2.1 : * Par Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> le 15/08/2019 * 1) Modification de la fonction scl_debug() pour adopter une mise en page plus moderne * * ---- Nouveautés V3.3 : * Par Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> le 12/01/2020 * 1) Ajout de la fonction scl_shortenStr() qui tronque une chaine en ajoutant les mots de fin ***/ /** * ------- FUNCTION SCL_UPLOAD() -------- * @author Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> * * @brief Cette fonction permet de récupérer un fichier envoyer par formulaire * @return mixed renvoie true si tous s'est bien passé et en cas d'erreur, renvoie un tableau contenant le code de l'erreur et le message par defaut * @param array $input la super globale $_FILE['nom'] qui permet de récupérer toutes les informations concernant le fichier. * @param string $path le dossier du serveur où l'on souhaite ranger le fichier * @param int [$size] la taille maximale en Ko du fichier pouvant être téléchargé * @param string [$type] représente le type de fichier pouvant être téléchargé * Cette fonction prend en charge 6 types de fichier (image, video, audio, doc, zip, et web) * mais le type par défaut est 'all' pour spécifier que les 6 types ci-dessus (24 extensions) sont pris en compte * @param string [$output] le nom avec lequel le fichier sera enregistré. */ function scl_upLoad($input, $path = '', $size = 2500000, $type = '', $output = '') { // taille par défaut $size = (empty($size) OR !is_numeric($size)) ? 2500000 : $size; // Le dossier par defaut est la racine $path = (!empty($path) AND !file_exists($path)) ? '' : htmlspecialchars($path); if (!is_array($input)) { return array(0, 'Entrée non valide'); } if (empty($input['tmp_name']) OR empty($input['name']) OR empty($input['size'])) { return array(1, 'Informations d\'entrées incomplètes'); } if ($input['size'] > $size) { return array(2, 'Fichier trop volumineux'); } /* vérification du type et définition des extensions autorisées */ if ($type == 'image') { $extensions = array('jpg', 'jpeg', 'png', 'gif'); } else if ($type == 'audio') { $extensions = array('mp3', 'wav', 'mpeg'); } else if ($type == 'video') { $extensions = array('mp4', 'avi', 'ogv', 'webm', 'flv', 'mov'); } else if ($type == 'doc') { $extensions = array('txt', 'doc', 'docx', 'pdf'); } else if ($type == 'web') { $extensions = array('htm', 'html', 'css', 'xml', 'js', 'json'); } else if ($type == 'db') { $extensions = array('sql', 'vcf'); } else if ($type == 'zip') { $extensions = array('zip', 'rar'); } else { // Si on veut travailler avec une(plusieurs) extensions spécifique du même type if (preg_match('#^(image|audio|video|doc|web|db|zip){1}/(.*?)$#i', $type)) { $extensions = explode('/', $type)[1]; if (empty($extensions)) { // Si il n y'a rien après le slash switch (explode('/', $type)[0]) { case 'image' : $extensions = array('jpg', 'jpeg', 'png', 'gif'); break; case 'audio' : $extensions = array('mp3', 'wav', 'mpeg'); break; case 'video' : $extensions = array('mp4', 'avi', 'ogv', 'webm', 'flv', 'mov'); break; case 'doc' : $extensions = array('txt', 'doc', 'docx', 'pdf'); break; case 'web' : $extensions = array('htm', 'html', 'css', 'xml', 'js', 'json'); break; case 'db' : $extensions = array('sql', 'vcf'); break; case 'zip' : $extensions = array('zip', 'rar'); break; } } else if (count(explode(',', $extensions)) < 2) { $extensions = array(explode(',', $extensions)[0]); // Si il y'a une seule extension } else { $ext = explode(',', $extensions); $extensions = array(); // Si il y'a plusieurs extensions foreach ($ext AS $ex) { $extensions[] = $ex; } } } else { $extensions = array( 'jpg', 'jpeg', 'png', 'gif', 'mp3', 'wav', 'mpeg', 'mp4', 'avi', 'ogv', 'webm', 'flv', 'mov', 'txt', 'doc', 'docx', 'pdf', 'htm', 'html', 'css', 'xml', 'js', 'json', 'sql', 'vcf', 'zip', 'rar' ); } } if (!in_array(strtolower(pathinfo($input['name'])['extension']), $extensions)) { return array(3, 'Extension non prise en charge'); } /* vérification de la valeur du nom d'enregistrement ($output) -- $extension = '0.' signifie qu'on ne change pas l'extension du fichier tandis que $extension = '1.' signifie qu'on change. donc nous sommes dans le cas où le '.extension' a été spécifié -- NB: ne pas confondre $extensions et $extension. l'un représente les différents extension autorisés et l'autre vérifie si l'extension originale du fichier doit être modifié ou non */ if (empty($output)) // Si on ne defini pas le nom de sortie... { // on enregistre le fichier avec la date et l'heure courante $output = 'scl_' . date('Ymd') . '-' . date('His'); $extension = '0.'; } else // Si on defini le nom de sortie... { if (!empty(explode('.', $output)[1]) AND in_array(strtolower(explode('.', $output)[1]), $extensions)) // Si l'extension est presente dans ce nom et est valide... { $out = explode('.', $output); $output = $out[0]; // On enregistre le fichier avec le nom specifié $extension = '1.' . $out[1]; // On enregistre le fichier avec l'extension specifié (changement d'extension) } else // Sinon...on enregistre le fichier avec le nom specifié mais en conservant son extension { $output = str_replace('.', '', $output); $output = str_replace(',', '', $output); $output = str_replace(';', '', $output); $extension = '0.'; } } // si on a prévu modifier l'extension du fichier if (explode('.', $extension)[0] == 1) { $extension = explode('.', $extension)[1]; // l'extension est le celui specifié } else { $extension = strtolower(pathinfo($input['name'])['extension']); // 'extension est celui de départ } // si le fichier n'a pas été téléchargé if (!move_uploaded_file($input['tmp_name'], $path . $output . '.' . $extension)) { return array(4, 'Erreur de téléversement'); } return true; } /** * ------- FUNCTION SCL_MINIMIZEIMG() -------- * @author Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail> * * @brief Cette fonction permet diminuer les dimensions d'une image * @return mixed renvoie true si tous s'est bien passé et en cas d'erreur, renvoie un tableau contenant le code de l'erreur et le message par defaut * * @param string $src la source de l'image a redimentionner. * @param array|int [$size] le tableau contenant les nouvelles dimensions ou la dimension unique(hauteur = largeur). * @param bool [$relative] specifie si on redimensionne la photo proportionnellement aux dimensions initiales */ function scl_minimizeImg($src, $size = array(), $relative = false) { // Si le fichier n'existe pas if (!file_exists($src)) { return array(0, 'Fichier inexistant'); } // Si on n'envoi pas un tableau ou un nombre comme tailles if (empty($size) OR (!is_array($size) AND !is_int($size))) { return array(1, 'Mauvaises dimensions de redimensionnement'); } // Si on envoie un tableau comme $size if (is_array($size)) { // Si le tableau n'a pas 1 ou deux element if (count($size) < 1 OR count($size) > 2) { return array(2, 'Violation du nombre de dimension'); } // Si l'un des element du tableau n'est pas un nombre if (!is_int($size[0]) OR (!empty($size[1]) AND !is_int($size[1]))) { return array(3, 'Type de dimension inconnu'); } } // Les nouvelles dimensions $dimensions = array('x' => 0, 'y' => 0); if (is_int($size)) { $dimensions['x'] = $size; $dimensions['y'] = $size; } else { if (count($size) == 1) { $dimensions['x'] = $size[0]; $dimensions['y'] = $size[0]; } else { $dimensions['x'] = $size[0]; $dimensions['y'] = $size[1]; } } if (preg_match('#\.jpe?g$#i', $src)) { $source = imagecreatefromjpeg($src); } if (preg_match('#\.png$#i', $src)) { $source = imagecreatefrompng($src); } if (preg_match('#\.gif$#i', $src)) { $source = imagecreatefromgif($src); } // Les dimensions de l'image source $l_s = imagesx($source); // Largeur $h_s = imagesy($source); // Hauteur // Les dimensions de la destination if ($relative) { $l_d = ($dimensions['x'] / 100) * $l_s; $h_d = ($dimensions['y'] / 100) * $h_s; } else { $l_d = ($dimensions['x'] <= 10) ? $l_s : $dimensions['x']; // Largeur $h_d = ($dimensions['y'] <= 10) ? $h_s : $dimensions['y']; // Hauteur } // On crée la miniature vide $destination = imagecreatetruecolor($l_d, $h_d); // On crée la miniature imagecopyresampled($destination, $source, 0, 0, 0, 0, $l_d, $h_d, $l_s, $h_s); // On enregistre la miniature if (preg_match('#\.jpe?g$#i', $src)) { $result = imagejpeg($destination, $src); } if (preg_match('#\.png$#i', $src)) { $result = imagepng($destination, $src); } if (preg_match('#\.gif$#i', $src)) { $result = imagegif($destination, $src); } return ($result == true) ? true : array(5, 'Erreur lors du redimensionnement'); } /** * ------- FUNCTION SCL_GENERATEKEYS() -------- * @author Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> * * @brief Cette fonction permet de une chaine aléatoirement * @return string * * @param int [$nbr] le nombre de caractères de la clé. * @param int [$type] le type de clé à generer. */ function scl_generateKeys($nbr = 8, $type = 0) { /* Valeurs par défaut */ $nbr = (empty($nbr)) ? 8 : (int)$nbr; $nbr = (!is_int($nbr)) ? 8 : (int)$nbr; $nbr = ($nbr < 3 OR $nbr > 64) ? 8 : (int)$nbr; switch ($type) { case 1 : $chars = range('a', 'z'); break; // Caractères alphabetique minuscules case 2 : $chars = range('A', 'Z'); break; // Caractères alphabetique majuscules case 3 : $chars = range(0, 9); break; // Caractères numerique case 4 : $chars = array_merge(range('a', 'z'), range('A', 'Z')); break; // Caractères alphabetique case 5 : $chars = array_merge(range(0, 9), range('a', 'z')); break; // Caractères numerique et alphabetique minuscules case 6 : $chars = array_merge(range(0, 9), range('A', 'Z')); break; // Caractères numerique et alphabetique majuscules default : $chars = array_merge(range(0, 9), range('a', 'z'), range('A', 'Z')); break; // Tous les caractères } $return = ''; // Valeur de retour $nb_char = count($chars); // On compte le nombre de caractères disponible for ($i = 0; $i < $nbr; $i++) { // On tire un nombre au hasard parmi toutes les indexes de caracteres et on affiche le caracteres corespondant $return .= $chars[rand(0, ($nb_char - 1))]; } return $return; } /** * ------- FUNCTION SCL_DATE() -------- * @author Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> * @brief Cette fonction permet de formater une date * @return string * * @param string $date la date à formater * @param string [$format] le format de sortie * @param bool [$interval] specifie si l'interval va etre donné (true) ou pas (false) * @param string [$fuseau] le fuseau horaire */ function scl_date($date, $format = 'D, d M Y', $interval = true, $fuseau = 'Europe/Paris') { /* Valeurs par défaut */ $format = (empty($format) OR !is_string($format)) ? 'D, d M Y' : htmlspecialchars(trim($format)); // Le format de sortie, par défaut = D, d M Y $fuseau = (empty($fuseau) OR !is_string($fuseau)) ? 'Europe/Paris' : htmlspecialchars(trim($fuseau)); // fuseau horaire $interval = (!is_bool($interval)) ? true : $interval; // Specifie si on gere les intervales ou pas $interval = ($interval == false) ? false : true; // Specifie si on gere les intervales ou pas $date = new DateTime($date); // On contruit la date // Si on ne gere pas les intervales if ($interval == false) { //On renvoie la date formatée et dans le fuseau correspondant return $date->setTimezone(new DateTimeZone($fuseau))->format($format); } // Si on gere les intervales $maintenant = new DateTime(date('Y-m-d H:i:s')); // recupere la date actuelle // On place les date dans le fuseau horaire souhaité $maintenant->setTimezone(new DateTimeZone($fuseau)); $date->setTimezone(new DateTimeZone($fuseau)); $dif = $maintenant->diff($date)->format('%d'); if ($dif < 0 OR $dif > 3) { // Si sa fait plus de 3 jours ou la date n'est pas encore arriver $return = $date->setTimezone(new DateTimeZone($fuseau))->format($format); } else if ($dif > 1) { $return = $maintenant->diff($date)->format('There is %d days'); } else if ($dif == 1) { $return = 'Yesterday at ' . $date->format('H') . 'h'; } else { // Si c'est aujourd'hui $dif = $maintenant->diff($date)->format('%h'); if ($dif < 0) { // Si l'heure est par hasard negatif, on renvoie la data normalement $return = $date->setTimezone(new DateTimeZone($fuseau))->format($format); } else if ($dif > 1) { $return = $maintenant->diff($date)->format('There is %h hours'); } else { $dif = $maintenant->diff($date)->format('%i'); if ($dif < 0) { $return = $date->setTimezone(new DateTimeZone($fuseau))->format($format); } else if ($dif > 1) { $return = $maintenant->diff($date)->format('There is a %i minutes'); } else { $dif = $maintenant->diff($date)->format('%s'); if ($dif < 0) { $return = $date->setTimezone(new DateTimeZone($fuseau))->format($format); } else if ($dif >= 10) { $return = $maintenant->diff($date)->format('There is %s seconds'); } else { $return = 'Now'; } } } } if ($maintenant->diff($date)->format('%y') >= 1 OR $maintenant->diff($date)->format('%m') >= 1) { return $date->setTimezone(new DateTimeZone($fuseau))->format($format); } if ($maintenant->format('d') < $date->format('d') AND $maintenant->format('y-m') <= $date->format('y-m')) { return $date->setTimezone(new DateTimeZone($fuseau))->format($format); } if ($maintenant < $date) { $dif = $date->diff($maintenant)->format('%y'); if ($dif > 1) { return $date->diff($maintenant)->format('In %y years'); } $dif = $date->diff($maintenant)->format('%m'); if ($dif > 1) { return $date->diff($maintenant)->format('In %m months'); } $dif = $date->diff($maintenant)->format('%d'); if ($dif > 1) { return $date->diff($maintenant)->format('In %d days'); } $dif = $date->diff($maintenant)->format('%h'); if ($dif < 0) { return $date->setTimezone(new DateTimeZone($fuseau))->format($format); } else if ($dif >= 1) { return $date->diff($maintenant)->format('In %h hours'); } $dif = $date->diff($maintenant)->format('%i'); if ($dif < 0) { return $date->setTimezone(new DateTimeZone($fuseau))->format($format); } else if ($dif >= 1) { return $date->diff($maintenant)->format('In %i minutes'); } else { return $date->setTimezone(new DateTimeZone($fuseau))->format($format); } } return $return; } /** * ------- FUNCTION SCL_TRANSLATE_DATE() -------- * @author Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail> * @brief Cette fonction permet de traduire une date en une autre langue formater une date * @return string * * @param string $date la date à traduire * @param string> [$lang] la langue de sortie */ function scl_translate_date($date, $lang = 'en') { $lang = strtolower($lang); if ($lang == 'fr') { $date = preg_replace('#^Now?#iSu', 'Maintenant', $date); $date = preg_replace('#^There is(\s?a)?#iSu', 'Il y a', $date); $date = preg_replace('#^Yesterday at#iSu', 'Hier à', $date); $date = preg_replace('#^In#iSu', 'Dans', $date); $date = preg_replace('#years#iSu', 'ans', $date); $date = preg_replace('#months#iSu', 'mois', $date); $date = preg_replace('#days#iSu', 'jours', $date); $date = preg_replace('#hours#iSu', 'heures', $date); $date = preg_replace('#seconds#iSu', 'secondes', $date); $date = preg_replace('#Monday#iSu', 'Lundi', $date); $date = preg_replace('#Mon#iSu', 'Lun', $date); $date = preg_replace('#Tuesday#iSu', 'Mardi', $date); $date = preg_replace('#Tue#iSu', 'Mar', $date); $date = preg_replace('#Wednesday#iSu', 'Mercredi', $date); $date = preg_replace('#Wed#iSu', 'Mer', $date); $date = preg_replace('#Thursday#iSu', 'Jeudi', $date); $date = preg_replace('#Thu#iSu', 'Jeu', $date); $date = preg_replace('#Friday#iSu', 'Vendredi', $date); $date = preg_replace('#Fri#iSu', 'Ven', $date); $date = preg_replace('#Saturday#iSu', 'Samedi', $date); $date = preg_replace('#Sat#iSu', 'Sam', $date); $date = preg_replace('#Sunday#iSu', 'Dimanche', $date); $date = preg_replace('#Sun#iSu', 'Dim', $date); $date = preg_replace('#January#iSu', 'Janvier', $date); $date = preg_replace('#Jan#iSu', 'Jan', $date); $date = preg_replace('#February#iSu', 'Févier', $date); $date = preg_replace('#Feb#iSu', 'Fev', $date); $date = preg_replace('#March#iSu', 'Mars', $date); $date = preg_replace('#Mar#iSu', 'Mar', $date); $date = preg_replace('#April#iSu', 'Avril', $date); $date = preg_replace('#Apr#iSu', 'Avr', $date); $date = preg_replace('#May#iSu', 'Mai', $date); $date = preg_replace('#June#iSu', 'Juin', $date); $date = preg_replace('#Jun#iSu', 'Juin', $date); $date = preg_replace('#July#iSu', 'Juillet', $date); $date = preg_replace('#July?#iSu', 'Jui', $date); $date = preg_replace('#August#iSu', 'Août', $date); $date = preg_replace('#Aug#iSu', 'Août', $date); $date = preg_replace('#September#iSu', 'Septembre', $date); $date = preg_replace('#Sept?#iSu', 'Sept', $date); $date = preg_replace('#October#iSu', 'Octobre', $date); $date = preg_replace('#Oct#iSu', 'Oct', $date); $date = preg_replace('#November#iSu', 'Novembre', $date); $date = preg_replace('#Nov#iSu', 'Nov', $date); $date = preg_replace('#December#iSu', 'Décembre', $date); $date = preg_replace('#Dec#iSu', 'Déc', $date); } return $date; } /** * ------- FUNCTION SCL_HASH() -------- * @author Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> * @brief Cette fonction permet d'hasher une chaine * @return string * * @param string $str la chaine caractères qu'on veut hasher * @param int [$lenght] la longueur de la chaine a sortir */ function scl_hash($str, $lenght = 128, $key = '') { // Valeur par defaut $lenght = (empty($lenght) OR !is_int($lenght)) ? 128 : $lenght; // Valeurs minimale et maximale pour le haché $lenght = ($lenght < 50) ? 50 : $lenght; $lenght = ($lenght > 200) ? 200 : $lenght; $str = trim(htmlspecialchars($str)); // On echappe la chaine et on supprime les espaces de debut et de fin $code = strlen($str); // On recupere la logueur de la chaine $code = ($code * 200) * ($code / 50); // afin de creer un code // Le sel $sel1 = strlen($str); $sel2 = strlen($code); $sel = strlen($str . $code); // Le hashage commence ici $texte_hash_1 = hash('sha256', 'scl_' . $sel1 . $str . $sel2); // Premier hash avec le sha256 $texte_hash_2 = hash('sha512', $texte_hash_1 . $sel . '_hash'); // Deuxieme hash avec le sha512 // On divise les deux hash en 2 parties egales $texte_hash_1_1 = substr($texte_hash_1, 0, 32); $texte_hash_1_2 = substr($texte_hash_1, -32); // Les parties du premier hashé $texte_hash_2_1 = substr($texte_hash_2, 0, 64); $texte_hash_2_2 = substr($texte_hash_2, -64); // Les parties du deuxieme hashé $final = $texte_hash_1_1 . 'ec' . $texte_hash_2_1 . 'af' . $texte_hash_1_2 . '84' . $texte_hash_2_2 . '5f'; // On additionne les deux hashés en ajoutant un sel statique pour atteindre les 200 caract // On renvoi le hash avec la longueur souhaité return substr($final, 0, $lenght); } /** * ------- FUNCTION SCL_CYPHER() -------- * @author Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> * @brief Cette fonction permet d'encrypter et de decrypter une chaine de caracteres * @return string * * @param string $str la chaine caractères qu'on veut encrypter ou decrypter * @param string [$action] l'action qu'on veut effectuer (encrypter/decrypter). * @param int [$repeat] le nombre de fois qu'on repete l'action */ function scl_cypher($str, $action = 'encrypt', $repeat = 0) { /*Valeur par defaut */ $action = strtolower($action); $action = ($action != 'decrypt') ? 'encrypt' : 'decrypt'; $repeat = (!is_int($repeat) OR $repeat < 1) ? 0 : $repeat; $chars = ''; //Les differents caractères entrés $size = strlen($str); for ($i = $size; $i > 1; $i--) { // On separes chaque caracteres du mot independament $chars .= substr($str, 0, 1) . ' '; $str = substr($str, 1); } if (strlen($str) <> 0) { $chars .= $str; } else { $chars = substr($chars, 0, strlen($chars) - 1); } //Les entrées / sorties $inputs = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ); $outputs = array( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ); $chars = explode(' ', $chars); // On transforme la chaine précédement créée en tableau $return = ''; // On parcours tout le dit tableau (ie. on recupere les caracteres un a un) foreach ($chars As $val) { // Si le caractère est encryptable ou decryptable if (in_array($val, $inputs) AND in_array($val, $outputs)) { // Si on veut encrypter if ($action == 'encrypt') { $num = array_search($val, $inputs); // On recupere l'index de la lettre $return .= $outputs[$num]; // et on ajoute le caractère d'encryptage correspondant } // sinon, on veut decrypter else { $num = array_search($val, $outputs); // On recupere l'index de la lettre $return .= $inputs[$num]; // et on ajoute le caractère de décryptage correspondant } } //Sinon else { $return .= $val; // On le laisse comme il est } } for ($i = 0; $i < $repeat; $i++) { $return = scl_cypher($return, $action); } return $return; // On renvoie la chaine encrypter ou decrypter } /** * ------- FUNCTION SCL_CRYPT() -------- * @author Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> * @param string $str la chaine caractères qu'on veut e * @brief Cette fonction permet d'encrypter et de decrypter une chaine de caracteres * @return string *ncrypter ou decrypter * @param string $key la clé de chiffrement * @param string [$action] l'action qu'on veut effectuer (encrypter/decrypter). */ function scl_crypt($str, $key, $action = 'encrypt') { /*Valeur par defaut */ $action = strtolower($action); $action = ($action != 'decrypt') ? 'encrypt' : 'decrypt'; $return = ''; // La valeur retournée /* On protège la clé pour eviter les failles */ $code = strlen($key); $code = ($code * 4) * ($code / 3); $key = sha1(strlen($key) . $key . strlen($key . $code)); $key .= md5($code . $key . $code); $letter = -1; $str = ($action == 'encrypt') ? $str : base64_decode($str); $strlen = strlen($str); // Nombre de caractère de la chaine à traiter for ($i = 0; $i < $strlen; $i++) { $letter++; if ($letter > 31) { $letter = 0; } if ($action == 'encrypt') { $neword = ord($str[$i]) + ord($key[$letter]); if ($neword > 255) { $neword -= 256; } } else { $neword = ord($str[$i]) - ord($key[$letter]); if ($neword < 1) { $neword += 256; } } $return .= chr($neword); } $return = ($action == 'encrypt') ? base64_encode($return) : $return; return $return; // On renvoie la chaine encrypter ou decrypter } /** * ------- FUNCTION SCL_TRUNCATE() -------- * @author Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> * @brief Cette fonction permet de couper une chaine de caractere * @return string * * @param string $str la chaine caractères qu'on veut couper * @param int $size est la longueur finale de la chaine apres la coupure * @param bool [$suspension] specifie si on ajoute les points de suspension à la fin (true) ou pas (false). */ function scl_truncate($str, $size, $suspension = false) { /*Valeur par defaut */ $str = htmlspecialchars($str); // On protege la chaine $size = (!is_numeric($size)) ? strlen($str) : $size; // Taille à couper $lenght = strlen($str); // longueur de la chaine if ($lenght > $size) { // Si la longueur initiale de la chaine est superieur à la taille qu'on veut $str = substr($str, 0, $size); // On coupe la chaine if ($suspension === true) { $str .= '...'; // On ajoute les suspension } } return $str; // On renvoie la chaine couper } /** * ------- FUNCTION SCL_SHORTENSTR() -------- * @author Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> * @brief Cette fonction permet de couper une chaine de caractere * @return string * * @param string $str la chaine caractères qu'on veut couper * @param int $max est la longueur finale de la chaine apres la coupure * @param string [$sep] Le separateur entre le debut et la fin de la chaine * @param int [$width] Le nombre de fois qu'on doit repeter le separateur * * @example * echo scl_shortenStr("J'aime le PHP et j'ose croire que cette fonction vous sera utile", 34); // J'aime le PHP et...vous sera utile */ function scl_shortenStr($str, $max, $sep = '.', $width = 3) { /*Valeur par defaut */ $str = htmlspecialchars($str); // On protege la chaine $max = (!is_numeric($max)) ? strlen($str) : $max; // Taille à couper $length = strlen($str); // Nombre de caractères if ($length > $max) { $too_much_length = $length - $max + $width; // Nombre de caractères en trop if ($max < $width) { // Dans le cas où la largeur max est inférieur à la largeur du séparateur $width = $max; } $start = ceil($length / 2 - $too_much_length / 2); $str = substr($str, 0, $start) . str_repeat($sep, $width) . substr($str, floor($start + $too_much_length)); } return $str; } /** * ------- FUNCTION SCL_CLEANER() -------- * @author Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> * * @brief Cette fonction permet de suprimer les espace en debut et fin d'une chaine tout en echappant les entités html * @return string * * @param string $str la chaine caractères qu'on veut netoyer */ function scl_cleaner(&$str) { if (is_array($str)) { foreach ($str As $key => $value) { if (is_string($value)) { $str[$key] = trim(htmlspecialchars($value)); } if (is_array($value)) { foreach ($value As $cle => $valeur) { $str[$key][$cle] = scl_cleaner($valeur); } } } } if (is_string($str)) { $str = trim(htmlspecialchars($str)); } return $str; // On renvoie la chaine netoyer } /** * ------- FUNCTION SCL_INCLUDE() -------- * @author Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> * * @brief Cette fonction permet inclure un fichier de maniere securiser dans une page web * @return void * * @param string $file le fichier a inclure * @param array|null $data * @param bool $exception * */ function scl_include($file, $data = array(), $exception = false) { $file = trim(htmlspecialchars($file)); if (is_file($file) AND file_exists($file)) { extract((array)$data); include_once($file); } else if ($exception) { die('SCL EXCEPTION : The file &laquo; <b>' . $file . '</b> &raquo; don\'t exist !'); } return; } /** * ------- FUNCTION SCL_DEBUG() -------- * @author Dimitric Sitchet Tomkeu <dev.dimitrisitchet@gmail.com> * * @brief Cette fonction permet de debuger une ou plusieurs variable * @return void * * @param mixed $var * @param bool $style specifie si on veut styliser le resultat ou pas (affichage classique de var_dump()) */ function scl_debug($var, $style = false) { $vars = (array) $var; if(true !== (bool) $style) { echo "<pre style=\"background:#eee;padding:1em;border:1px inset #adb5bd;border-radius:5px;font-family:monospace;margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar;\">\n"; foreach ($vars As $var) { var_dump($var); } echo "</pre>\n"; return; } echo "<pre style=\"background:#eee;padding:1em;border:1px inset #adb5bd;border-radius:5px;font-family:monospace;margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar;\">\n"; $i = 0; foreach ($vars As $var) { if($i != 0) { echo '<hr style="height:1;margin:0;margin-top:1em;" color="#ddd" size="1">'; } $i++; echo '<span style="width:auto;display:inline-block; margin-bottom: .25em; font-weight:bold;font-family:\'Lato\', candara, \'Arial Narrow\', sans-serif; color:#6c17cb; font-style:italic">'; echo ucfirst(gettype($var)); if(is_object($var)) { echo ' | '.get_class($var); } if(is_string($var)) { echo '<span style="width:auto;font-weight:lighter !important; display:inline-block; padding-left:.5em; color:crimson">(lenght : '.strlen($var).')</span>'; } if(is_array($var)) { echo '<span style="width:auto;font-weight:lighter !important; display:inline-block; padding-left:.5em; color:crimson">(lenght : '.count($var).')</span>'; } echo "</span>"; if(is_null($var)) { echo "\n\tNULL"; } else if(is_string($var) OR is_numeric($var)) { echo "\n\t".$var; } else if(is_bool($var)) { echo (true === $var) ? "\n\ttrue" : "\n\tfalse"; } else if(is_array($var) OR is_object($var)) { if(empty($var)) { echo "\n\tempty"; } else { foreach($var As $key => $value) { echo "\n\t<span style=\"width:auto;display:inline-block; margin: .25em; 0\">"; echo "<b>".$key."</b> => "; if(is_array($value) OR is_object($value)) { scl_debug($value); } else { if(is_bool($value)) { echo (true === $value) ? 'true' : 'false'; } else { echo $value; } echo '<span style="auto;font-weight:lighter !important; display:inline-block; padding-left:.5em; color:#eb7c55">['.ucfirst(gettype($value)); if(is_string($value)) { echo '('.strlen($value).')'; } echo ']</span>'; } echo "</span>"; } } } } echo "</pre>"; return; } /* ------------------------------------------------------------------------- */ /** * ------- FUNCTION SCL_BYTE2SIZE() -------- * * @brief Cette fonction donne le poids en byte, kb, mb en fonction du nombre de byte passé en parametre * @return string * * @param int $bytes * @param int $format * @param int $precision */ function scl_byte2size($bytes, $format = 1024, $precision = 2) { $unit = array('B','KB','MB'); return @round($bytes / pow($format, ($i = floor(log($bytes, 1024)))), $precision).' '.$unit[$i]; } /** * ------- FUNCTION SCL_MOVESPECIALCHAR() -------- * * @brief Cette fonction permet d'enlever tous les caractères spéciaux (accents, points...) dans une chaine * @return string * * @param string $str est chaine à traiter. * @param bool [$leaveSpecialChar] specifie si on veut laisser les ponctuations (.,?/:) (true) ou les remplacer par les tirets (false) * @param bool [$UpperToLower] specifie si on veut laisser les majuscules (false) ou les transformer en minuscules (true) * @param array [$specialChars] La liste des caracteres speciaux a gerer */ function scl_moveSpecialChar($str, $leaveSpecialChar = false, $UpperToLower = true, $specialChars = array()) { /* Valeurs par défaut */ $leaveSpecialChar = ($leaveSpecialChar != false) ? true : false; $UpperToLower = ($UpperToLower != false) ? true : false; // transformer les caractères accentués en entités HTML $str = htmlentities($str, ENT_NOQUOTES); // remplacer les entités HTML pour avoir juste le premier caractères non accentués. Exemple : "&ecute;" => "e", "&Ecute;" => "E", "à" => "a" ... $str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str); // Remplacer les ligatures tel que : ?, Æ ... . Exemple "?" => "oe" $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // Supprimer tout le reste $str = preg_replace('#&[^;]+;#', '', $str); // Si on ne veut pas avoir les caractères spéciaux if ($leaveSpecialChar == false) { // Caractères spéciaux à modifier en tirets $specialChars = array_merge(array( ' ', '?', '!', '.', ',', ':', ';', "'", '"', '/', '\\', '*', '+', '=', '%', '[', ']', '(', ')', '{', '}', '<', '>', '&', '$', '^', '@', 'µ', '£', '§', ), $specialChars); $str = str_replace($specialChars, '-', $str); } $modifStr = true; while ($modifStr == true) { $modifStr = false; // On modifie tous les << -- >> par un seul << - >> if (preg_match('#--#iSu', $str)) { $str = str_replace('--', '-', $str); $modifStr = true; } // Si le dernier caractère est un tiret, on le supprime if (preg_match('#(-)+$#iSu', $str)) { $str = substr($str, 0, (strlen($str) - 1)); $modifStr = true; } } if ($UpperToLower == true) { // Si on veut transformer les majuscules en minuscules $str = strtolower($str); } return $str; } /** * ------- FUNCTION SCL_MOVEDUPLICATECHAR() -------- * * @brief Cette fonction permet d'enlever tous les caractères doublées dans une chaine * @return string * * @param string $str est la chaine à traiter. */ function scl_moveDuplicateChar($str) { for ($ascii = 95; $ascii <= 123; $ascii++) { // le chiffre 3 permet de controler qu'il y a 3 fois de suite le meme caractère $str = preg_replace('#' . chr($ascii) . '{3,}#', chr($ascii), $str); } return $str; } /** * ------- FUNCTION SCL_SPLITINT() -------- * * @brief Cette fonction permet de segmenter un nombre * @return string|void * * @param float|int $nbr le nombre qu'on veut segmenter. * @param int [$pas] le pas de segmentation. * @param string [$separateur] le separateur des segments. */ function scl_splitInt($nbr, $pas = 3, $separateur = ' ') { /* Valeurs par défaut */ if (!is_numeric($nbr)) { return; } $pas = (!empty($pas) AND is_int($pas)) ? $pas : 3; $separateur = (in_array($separateur, array(' ', ',', '-', '/'))) ? $separateur : ' '; $return = ''; // Valeur renvoyée $nombre = explode('.', $nbr); $nbr = $nombre[0]; $virgule = (!empty($nombre[1])) ? '.' . $nombre[1] : ''; $lenght = strlen($nbr); // nombre de chiffre $nbr = strrev($nbr); // on inverse le nombre while ($lenght > $pas) { // On coupe le nombre après 3 ($pas) chiffres à partir de debut et on le stocke dans $return $return .= substr($nbr, 0, $pas) . $separateur; $nbr = substr($nbr, $pas); // On enleve les 3 ($pas) premier chiffres du nombre $lenght = $lenght - $pas; // Le nombre de chiffr du nombre diminue donc de 3 ($pas) } if (strlen($nbr) <> 0) { $return .= $nbr; } else { $return = substr($return, 0, strlen($return) - 1); } // On inverse encore le nombre pour revenir à la valeur initiale et on le retourne return strrev($return) . '' . $virgule; } /** * ------- FUNCTION SCL_GETTAGS() -------- * * @brief Cette fonction permet de generer les mots clés d'un contenu * @return string * * @param string $content le contenu à partir duquel on va generer les mots clés. * @param int [$nb_tags] le nombre de mots clés à generer. * @param bool [$relief] specifie si les mots clés renvoyés doivent avoir une taille proportionnelle à leur frequence d'apparition (true) ou pas (false). * @param null|file|array [$mots_a_banir] specifie une liste de mot a banir dans la recherche */ function scl_getTags($content, $nb_tags = 10, $relief = false, $mots_a_bannir = null) { /* Valeurs par défaut */ $nb_tags = (empty($nb_tags)) ? 10 : (int)$nb_tags; $relief = ($relief != true) ? false : true; if (is_file($mots_a_bannir) AND file_exists($mots_a_bannir)) { $mots_a_bannir = file_get_contents($mots_a_bannir); $mots_a_bannir = explode("\n", $mots_a_bannir); } $mots_a_bannir = array_merge(array( #---------------Pronoms--------------- 'ELLE', 'ELLES', 'CETTE', 'IL', 'ILS', 'LUI', 'NOUS', 'VOUS', 'EUX', 'MOI', 'JE', 'TU', #---------------Verbes etre et avoir--------------- 'SOMMES', 'ETES', 'SONT', 'ETAIS', 'ETAIS', 'ETAIT', 'ETIONS', 'ETIEZ', 'ETAIENT', 'FUMES', 'FUTES', 'FURENT', 'SERAI', 'SERAS', 'SERA', 'SERONS', 'SEREZ', 'SERONT', 'SOIS', 'SOIT', 'SOYONS', 'SOYEZ', 'SOIENT', 'FUSSE', 'FUSSES', 'FUT', 'FUSSIONS', 'FUSSIEZ', 'FUSSENT', 'AVONS', 'AVEZ', 'AVAIS', 'AVAIT', 'AVIONS', 'AVIEZ', 'AVAIENT', 'AURAI', 'AURAS', 'AURA', 'AURONS', 'AUREZ', 'AURONT', 'AURAIS', 'AURAIS', 'AURAIT', 'AURIONS', 'AURIEZ', 'AURAIENT', #---------------Mot de liaison--------------- 'DANS', 'AVEC', 'AFIN', 'POUR', 'DONT', 'COMME', 'SELON', 'APRES', 'ENSUITE', 'QUAND', 'QUANT', 'PUIS', 'ENFIN', 'MAIS', 'CEPENDANT', 'TOUTEFOIS', 'NEANMOINS', 'POURTANT', 'SINON', 'SEULEMENT', 'MALGRE', 'QUOIQUE', 'TANDIS', 'ALORS', 'CERTES', 'EVIDEMMENT', 'EVIDENT', 'AINSI', 'SOIT', 'DONC', 'TOUT', 'TOUS', #---------------Caracteres HTML--------------- 'AGRAVE', 'EACUTE', 'NBSP', ), (array)$mots_a_bannir); foreach ($mots_a_bannir As $banni) { $content = preg_replace('#' . $banni . '#iSu', '', $content); //Supprime les mots à bannir } $content = preg_replace("#[^[:alpha:]]#", ' ', $content); //On ne garde que les chaines contenant des caractères $content = preg_replace('#(\s|\b)[\w]{1,3}\s#i', ' ', $content); //On supprime les chaines inférieurs à 3 caractrèes $content = preg_replace('/\s\s+/', ' ', $content); //Supprime les doubles espaces $content = explode(" ", $content); // On recupere chaque mot (separer de l'autre mot par un espace) $nb_words = count($content); // On compte le nombre de mots du contenu $content = array_count_values($content); //Construit un tableau avec le nombre d'occurences de chaques mots arsort($content); //Tri le tableau par valeur décroissante en gardant les index $tags = array_slice($content, 0, $nb_tags, true); //Coupe le tableau pour n'obtenir que le nombre de mots souhaité foreach ($tags as &$value) { //Utilisation de & pour modifier la valeur $value = round((($value / $nb_words) * 100), 2); } $render_array = array(); foreach ($tags as $key => $value) { // Si on veut voir en relief c'est-a-dire avec des taille qui dependent du nombre d'apparition des tags if ($relief == true) { $size = 6; $size = $size + $size * $value; //Calcul de la taille du tag en fonction de sa fréquence d'apparition $render_array[] = "<span style='font-size:" . $size . "px' class='tag'>" . strtoupper($key) . "</span> "; } else { $render_array[] = $key . " "; } } srand((float)microtime() * 1000000); shuffle($render_array); //On mélange aléatoirement le tableau $return = ''; // La variable de retour foreach ($render_array as $value) { $return .= $value; } return $return; } /** * ------- FUNCTION SCL_INT2LETTER() -------- * * @brief Cette fonction convertie un entier en lettre (ex: 12 => douze) * @credit { Author: zied9b | Url: http://codes-sources.commentcamarche.net/source/51285-chiffres-en-lettres} * @return string * * @param int $int */ function scl_int2letter($int) { $int_val= intval($int); $real_val = intval(round($int - intval($int), 2) * 1000); if($int_val == 0) { return 'Zero'; } $return = ''; $dix_c = intval($real_val%100/10); $cent_c = intval($real_val%1000/100); $unite[1] = $int_val%10; $dix[1] = intval($int_val%100/10); $cent[1] =intval($int_val%1000/100); $unite[2]=intval($int_val%10000/1000); $dix[2] = intval($int_val%100000/10000); $cent[2] = intval($int_val%1000000/100000); $unite[3] = intval($int_val%10000000/1000000); $dix[3] = intval($int_val%100000000/10000000); $cent[3] = intval($int_val%1000000000/100000000); $chif = array('', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf', 'dix', 'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize', 'dix sept', 'dix huit', 'dix neuf'); $trio_c=''; for($i=1; $i<=3; $i++) { $prim[$i]=''; $secon[$i]=''; $trio[$i]=''; if($dix[$i]==0) { $secon[$i]=''; $prim[$i]=$chif[$unite[$i]]; } else if($dix[$i]==1) { $secon[$i]=''; $prim[$i]=$chif[($unite[$i]+10)]; } else if($dix[$i]==2) { if($unite[$i]==1) { $secon[$i]='vingt et'; $prim[$i]=$chif[$unite[$i]]; } else { $secon[$i]='vingt'; $prim[$i]=$chif[$unite[$i]]; } } else if($dix[$i]==3) { if($unite[$i]==1) { $secon[$i]='trente et'; $prim[$i]=$chif[$unite[$i]]; } else { $secon[$i]='trente'; $prim[$i]=$chif[$unite[$i]]; } } else if($dix[$i]==4) { if($unite[$i]==1) { $secon[$i]='quarante et'; $prim[$i]=$chif[$unite[$i]]; } else { $secon[$i]='quarante'; $prim[$i]=$chif[$unite[$i]]; } } else if($dix[$i]==5) { if($unite[$i]==1) { $secon[$i]='cinquante et'; $prim[$i]=$chif[$unite[$i]]; } else { $secon[$i]='cinquante'; $prim[$i]=$chif[$unite[$i]]; } } else if($dix[$i]==6) { if($unite[$i]==1) { $secon[$i]='soixante et'; $prim[$i]=$chif[$unite[$i]]; } else { $secon[$i]='soixante'; $prim[$i]=$chif[$unite[$i]]; } } else if($dix[$i]==7) { if($unite[$i]==1) { $secon[$i]='soixante et'; $prim[$i]=$chif[$unite[$i]+10]; } else { $secon[$i]='soixante'; $prim[$i]=$chif[$unite[$i]+10]; } } else if($dix[$i]==8) { if($unite[$i]==1) { $secon[$i]='quatre-vingts et'; $prim[$i]=$chif[$unite[$i]]; } else { $secon[$i]='quatre-vingt'; $prim[$i]=$chif[$unite[$i]]; } } else if($dix[$i]==9) { if($unite[$i]==1) { $secon[$i]='quatre-vingts et'; $prim[$i]=$chif[$unite[$i]+10]; } else { $secon[$i]='quatre-vingts'; $prim[$i]=$chif[$unite[$i]+10]; } } if($cent[$i]==1) { $trio[$i]='cent'; } else if($cent[$i]!=0 || $cent[$i]!='') { $trio[$i] = $chif[$cent[$i]] .' cents'; } } $chif2=array('', 'dix', 'vingt', 'trente', 'quarante', 'cinquante', 'soixante', 'soixante-dix', 'quatre-vingts', 'quatre-vingts dix'); $secon_c=$chif2[$dix_c]; if($cent_c==1) { $trio_c='cent'; } else if($cent_c!=0 || $cent_c!='') { $trio_c = $chif[$cent_c] .' cents'; } if(($cent[3]==0 || $cent[3]=='') && ($dix[3]==0 || $dix[3]=='') && ($unite[3]==1)) { $return .= $trio[3]. ' ' .$secon[3]. ' ' . $prim[3]. ' million '; } else if(($cent[3]!=0 && $cent[3]!='') || ($dix[3]!=0 && $dix[3]!='') || ($unite[3]!=0 && $unite[3]!='')) { $return .= $trio[3]. ' ' .$secon[3]. ' ' . $prim[3]. ' millions '; } else { $return .= $trio[3]. ' ' .$secon[3]. ' ' . $prim[3]; } if(($cent[2]==0 || $cent[2]=='') && ($dix[2]==0 || $dix[2]=='') && ($unite[2]==1)) { $return .= ' mille '; } else if(($cent[2]!=0 && $cent[2]!='') || ($dix[2]!=0 && $dix[2]!='') || ($unite[2]!=0 && $unite[2]!='')) { $return .= $trio[2]. ' ' .$secon[2]. ' ' . $prim[2]. ' milles '; } else { $return .= $trio[2]. ' ' .$secon[2]. ' ' . $prim[2]; } $return .= $trio[1]. ' ' .$secon[1]. ' ' . $prim[1]; if(!($cent_c=='0' || $cent_c=='') || !($dix_c=='0' || $dix_c=='')) { $return .= $trio_c. ' ' .$secon_c; } return trim($return); }