Functions.class.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. <?php
  2. /*
  3. @nom: constant
  4. @auteur: Idleman (http://blog.idleman.fr)
  5. @description: Classe de stockage des fonctions utiles (toutes disponibles en static)
  6. */
  7. class Functions
  8. {
  9. private $id;
  10. public $debug=0;
  11. /**
  12. * Securise la variable utilisateur entrée en parametre
  13. * @author Valentin
  14. * @param<String> variable a sécuriser
  15. * @param<Integer> niveau de securisation
  16. * @return<String> variable securisée
  17. */
  18. public static function secure($var,$level = 1){
  19. $var = htmlspecialchars($var, ENT_QUOTES, "UTF-8");
  20. if($level<1)$var = mysqli_real_escape_string($var);
  21. if($level<2)$var = addslashes($var);
  22. return $var;
  23. }
  24. /**
  25. * Return l'environnement/serveur sur lequel on se situe, permet de changer les
  26. * connexions bdd en fonction de la dev, la préprod ou la prod
  27. */
  28. public static function whereImI(){
  29. $maps = array (
  30. 'LOCAL'=>array('localhost','127.0.0.1','0.0.0.1','::0.0.0.0'),
  31. 'LAN'=>array('192.168.10.','valentin'),
  32. 'PWAN'=>array('test.sys1.fr'),
  33. 'WAN'=>array('www.sys1.fr'),
  34. );
  35. $return = 'UNKNOWN';
  36. foreach($maps as $map=>$values){
  37. foreach($values as $ip){
  38. $pos = strpos(strtolower($_SERVER['HTTP_HOST']),$ip);
  39. if ($pos!==false){
  40. $return = $map;
  41. }
  42. }
  43. }
  44. return $return;
  45. }
  46. public static function isLocal($perimeter='LOCAL'){
  47. $return = false;
  48. $localTab = array('localhost','127.0.0.1','0.0.0.1','::0.0.0.0');
  49. $lanTab = array('192.168.10.','valentin');
  50. switch($perimeter){
  51. case 'LOCAL':
  52. foreach($localTab as $ip){
  53. $pos = strpos(strtolower($_SERVER['HTTP_HOST']),$ip);
  54. if ($pos!==false){
  55. $return = true;
  56. }
  57. }
  58. break;
  59. case 'LAN':
  60. foreach($lanTab as $ip){
  61. $pos = strpos(strtolower($_SERVER['HTTP_HOST']),$ip);
  62. if ($pos!==false){
  63. $return = true;
  64. }
  65. }
  66. break;
  67. case 'ALL':
  68. foreach($localTab as $ip){
  69. $pos = strpos(strtolower($_SERVER['HTTP_HOST']),$ip);
  70. if ($pos!==false){
  71. $return = true;
  72. }
  73. }
  74. foreach($lanTab as $ip){
  75. $pos = strpos(strtolower($_SERVER['HTTP_HOST']),$ip);
  76. if ($pos!==false){
  77. $return = true;
  78. }
  79. }
  80. break;
  81. }
  82. return $return;
  83. }
  84. /**
  85. * Convertis la chaine passée en timestamp quel que soit sont format
  86. * (prend en charge les formats type dd-mm-yyy , dd/mm/yyy, yyyy/mm/ddd...)
  87. */
  88. public static function toTime($string){
  89. $string = str_replace('/','-',$string);
  90. $string = str_replace('\\','-',$string);
  91. $string = str_replace('Janvier','Jan',$string);
  92. $string = str_replace('Fevrier','Feb',$string);
  93. $string = str_replace('Mars','Mar',$string);
  94. $string = str_replace('Avril','Apr',$string);
  95. $string = str_replace('Mai','May',$string);
  96. $string = str_replace('Juin','Jun',$string);
  97. $string = str_replace('Juillet','Jul',$string);
  98. $string = str_replace('Aout','Aug',$string);
  99. $string = str_replace('Septembre','Sept',$string);
  100. $string = str_replace('Octobre','Oct',$string);
  101. $string = str_replace('Novembre','Nov',$string);
  102. $string = str_replace('Decembre','Dec',$string);
  103. return strtotime($string);
  104. }
  105. /**
  106. * Recupere l'ip de l'internaute courant
  107. * @author Valentin
  108. * @return<String> ip de l'utilisateur
  109. */
  110. public static function getIP(){
  111. if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
  112. $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];}
  113. elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
  114. $ip = $_SERVER['HTTP_CLIENT_IP'];}
  115. else{ $ip = $_SERVER['REMOTE_ADDR'];}
  116. return $ip;
  117. }
  118. /**
  119. * Retourne une version tronquée au bout de $limit caracteres de la chaine fournie
  120. * @author Valentin
  121. * @param<String> message a tronquer
  122. * @param<Integer> limite de caracteres
  123. * @return<String> chaine tronquée
  124. */
  125. public static function truncate($msg,$limit){
  126. $str = html_entity_decode($msg, ENT_QUOTES, 'UTF-8');
  127. $count = preg_match_all('/\X/u', $str);
  128. if($count<=$limit){
  129. return $msg;
  130. }
  131. $fin='…' ;
  132. $nb=$limit-1;
  133. return htmlentities(mb_substr($str, 0, $nb, 'UTF-8').$fin);
  134. }
  135. function getExtension($fileName){
  136. $dot = explode('.',$fileName);
  137. return $dot[sizeof($dot)-1];
  138. }
  139. /**
  140. * Definis si la chaine fournie est existante dans la reference fournie ou non
  141. * @param unknown_type $string
  142. * @param unknown_type $reference
  143. * @return false si aucune occurence du string, true dans le cas contraire
  144. */
  145. public static function contain($string,$reference){
  146. $return = true;
  147. $pos = strpos($reference,$string);
  148. if ($pos === false) {
  149. $return = false;
  150. }
  151. return strtolower($return);
  152. }
  153. /**
  154. * Définis si la chaine passée en parametre est une url ou non
  155. */
  156. public static function isUrl($url){
  157. $return =false;
  158. if (preg_match('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i', $url)) {
  159. $return =true;
  160. }
  161. return $return;
  162. }
  163. /**
  164. * Définis si la chaine passée en parametre est une couleur héxadécimale ou non
  165. */
  166. public static function isColor($color){
  167. $return =false;
  168. if (preg_match('/^#(?:(?:[a-fd]{3}){1,2})$/i', $color)) {
  169. $return =true;
  170. }
  171. return $return;
  172. }
  173. /**
  174. * Définis si la chaine passée en parametre est un mail ou non
  175. */
  176. public static function isMail($mail){
  177. $return =false;
  178. if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
  179. $return =true;
  180. }
  181. return $return;
  182. }
  183. /**
  184. * Définis si la chaine passée en parametre est une IP ou non
  185. */
  186. public static function isIp($ip){
  187. $return =false;
  188. if (preg_match('^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$',$ip)) {
  189. $return =true;
  190. }
  191. return $return;
  192. }
  193. public static function sourceName($string){
  194. $name = strtolower($string);
  195. $name = str_replace(' ','-',$name);
  196. $name = str_replace('&#039;','-',$name);
  197. $name = str_replace('\'','-',$name);
  198. $name = str_replace(',','-',$name);
  199. $name = str_replace(':','-',$name);
  200. $name = str_replace('&agrave;','a',$name);
  201. $name = trim($name);
  202. $name = html_entity_decode($name,null,'UTF-8');
  203. return $name;
  204. }
  205. public static function makeCookie($name, $value, $expire='') {
  206. if($expire == '') {
  207. setcookie($name, $value, mktime(0,0,0, date("d"),
  208. date("m"), (date("Y")+1)),'/');
  209. }else {
  210. setcookie($name, '', mktime(0,0,0, date("d"),
  211. date("m"), (date("Y")-1)),'/');
  212. }
  213. }
  214. public static function destroyCookie($name){
  215. Fonction::makeCookie($name,'',time()-3600);
  216. unset($_COOKIE[$name]);
  217. }
  218. public static function wordwrap($str, $width = 75, $break = "\n", $cut = false)
  219. {
  220. $str = html_entity_decode($str);
  221. $str = htmlentities (wordwrap($str,$width,$break,$cut));
  222. $str = str_replace('&lt;br/&gt;','<br/>',$str);
  223. $str = str_replace('&amp;','&',$str);
  224. return $str;
  225. }
  226. public static function createFile($filePath,$content){
  227. $fichier = fopen($filePath,"w+");
  228. $fwriteResult = fwrite($fichier,$content);
  229. fclose($fichier);
  230. }
  231. public static function convertFileSize($bytes)
  232. {
  233. if($bytes<1024){
  234. return round(($bytes / 1024), 2).' o';
  235. }elseif(1024<$bytes && $bytes<1048576){
  236. return round(($bytes / 1024), 2).' ko';
  237. }elseif(1048576<$bytes && $bytes<1073741824){
  238. return round(($bytes / 1024)/1024, 2).' Mo';
  239. }elseif(1073741824<$bytes){
  240. return round(($bytes / 1024)/1024/1024, 2).' Go';
  241. }
  242. }
  243. public static function hexaValue($str){
  244. $code = dechex(crc32($str));
  245. $code = substr($code, 0, 6);
  246. return $code;
  247. }
  248. public static function scanRecursiveDir($dir){
  249. $files = scandir($dir);
  250. $allFiles = array();
  251. foreach($files as $file){
  252. if($file!='.' && $file!='..'){
  253. if(is_dir($dir.$file)){
  254. $allFiles = array_merge($allFiles,Fonction::scanRecursiveDir($dir.$file));
  255. }else{
  256. $allFiles[]=str_replace('//','/',$dir.'/'.$file);
  257. }
  258. }
  259. }
  260. return $allFiles;
  261. }
  262. /** Permet la sortie directe de texte à l'écran, sans tampon.
  263. Source : http://php.net/manual/fr/function.flush.php
  264. */
  265. public static function triggerDirectOutput() {
  266. // La ligne de commande n'en a pas besoin.
  267. if ('cli'==php_sapi_name()) return;
  268. if (function_exists('apache_setenv')) {
  269. /* Selon l'hébergeur la fonction peut être désactivée. Alors Php
  270. arrête le programme avec l'erreur :
  271. "PHP Fatal error: Call to undefined function apache_setenv()".
  272. */
  273. @apache_setenv('no-gzip', 1);
  274. }
  275. @ini_set('zlib.output_compression', 0);
  276. @ini_set('implicit_flush', 1);
  277. for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
  278. ob_implicit_flush(1);
  279. }
  280. public static function relativePath($from, $to, $ps = '/') {
  281. $arFrom = explode($ps, rtrim($from, $ps));
  282. $arTo = explode($ps, rtrim($to, $ps));
  283. while(count($arFrom) && count($arTo) && ($arFrom[0] == $arTo[0])) {
  284. array_shift($arFrom);
  285. array_shift($arTo);
  286. }
  287. return str_pad("", count($arFrom) * 3, '..'.$ps).implode($ps, $arTo);
  288. }
  289. // Nettoyage de l'url avant la mise en base
  290. public static function clean_url( $url ) {
  291. $url = str_replace('&amp;', '&', $url);
  292. return $url;
  293. }
  294. /**
  295. * Méthode de test de connexion.
  296. * @return true si ok
  297. * @param server
  298. * @param login
  299. * @param pass
  300. * @param db facultatif, si précisé alors tente de la séléctionner
  301. */
  302. public static function testDb($server, $login, $pass, $db=null) {
  303. /* Méthode hors des classes dédiées aux BDD afin de supporter le moins
  304. de dépendances possibles. En particulier, pas besoin que le fichier
  305. de configuration existe. */
  306. $link = mysqli_connect($server, $login, $pass, $db);
  307. if (false===$link) return false;
  308. mysqli_close($link);
  309. return true;
  310. }
  311. /**
  312. * @return boolean
  313. */
  314. public static function isAjaxCall() {
  315. return !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
  316. }
  317. /**
  318. * Charge dans la portée locale des variables de $_REQUEST
  319. * Ex: chargeVarRequest('liste', 'var') créera $liste et $var venant de $_REQUEST
  320. */
  321. public static function chargeVarRequest() {
  322. foreach (func_get_args() as $arg) {
  323. global ${$arg};
  324. if (array_key_exists($arg, $_REQUEST)) {
  325. $valeur = $_REQUEST[$arg];
  326. } else {
  327. $valeur = '';
  328. }
  329. ${$arg} = $valeur;
  330. }
  331. }
  332. /**
  333. * Vide le contenu du cache de RainTpl
  334. *
  335. */
  336. public static function purgeRaintplCache() {
  337. $directory = raintpl::$cache_dir;
  338. if ($directory) {
  339. $files = glob($directory.'*.rtpl.php');
  340. if ($files) {
  341. foreach($files as $file) {
  342. if (!unlink($file)) {
  343. error_log("Leed: cannot unlink '$file'");
  344. }
  345. }
  346. } else {
  347. error_log('Leed: Raintpl, no file cached: '.$directory.' '.getcwd());
  348. }
  349. } else {
  350. error_log('Leed: Raintpl cache directory not set!');
  351. }
  352. }
  353. }
  354. ?>