get_microtime()    :20240425222650951035
get_guid() :_894bf4f90ad397a12c6a0161131675c4
vardump('toto') :
string(4) "toto"

-1       => 
0        => 0
1        => 1 seconde
59       => 59 secondes
60       => 1 minute
61       => 1 minute 1 seconde
3599     => 59 minutes 59 secondes
3600     => 1 heure
3601     => 1 heure 1 seconde
3660     => 1 heure 1 minute
3661     => 1 heure 1 minute 1 seconde
7202     => 2 heures 2 secondes
7320     => 2 heures 2 minutes
7322     => 2 heures 2 minutes 2 secondes
10799    => 2 heures 59 minutes 59 secondes
86400    => 1 jour
356521   => 4 jours 3 heures 2 minutes 1 seconde
<?php

/**
 * @page bibliotheque.php
 * @brief Cette page contient quelques fonctions à mettre de côté.
 *
 * @author hughes monget
 * @see http://monget.com/
 */

/**
 * Générateur de nombres aléatoires utilisant l'algorithme SHA1 sur lui-même.
 *
 * @param $int_minimum - integer - intevale
 * @param $int_maximum - integer - intevale
 * @return int - retourne un entier aléatoire dans l'intervale demandé ou un int sinon.
 */
function sha_rand($int_minimum NULL$int_maximum NULL)
{
    
// On génère une seed.
    
static $arr_raw_nombre$int_index;
    if (!
$arr_raw_nombre)
    {
        
$arr_raw_nombre sha1(uniqid(mt_rand(), TRUE).microtime().mt_rand(), TRUE);
        
$int_index      0;
    }
    
// On regénère le hash que l'on applique à lui-même.
    
if ($int_index == 5)
    {
        
// Le sha1 renvoie 160 bits soit 5 mots de 32 bits.
        
$arr_raw_nombre  sha1($arr_raw_nombreTRUE);
        
$int_index       0;
    }
    
// On extrait une valeur (aléatoire) du hash.
    
$int_valeur_aleatoire substr($arr_raw_nombre$int_index4);
    
$int_valeur_aleatoire unpack('L'$int_valeur_aleatoire);
    
$int_valeur_aleatoire reset($int_valeur_aleatoire);
    
$int_index++;
    
// On gère l'intervale demandé.
    
if (!is_null($int_minimum) && !is_null($int_maximum))
    {
        if (
$int_minimum <= $int_maximum)
        {
            
$int_valeur_aleatoire $int_minimum abs($int_valeur_aleatoire) % abs($int_maximum $int_minimum 1);
        }
    }

    return 
$int_valeur_aleatoire;
}

/** @return string - Retourne une chaîne composée de chiffres correspondant au temps courant . */
function get_microtime()
{
    static 
$int_precision 6;
    
$flo_stamp microtime(TRUE);
    return (
date('YmdHis'$flo_stamp).substr(number_format($flo_stamp$int_precision), -$int_precision));
}

/** @return string - Retourne un pseudo Globally Unique Identifier */
function get_guid()
{
    return (
'_'.md5(uniqid(mt_rand(), TRUE)));
}

/** Dump HTML de la variable passée en paramètre. */
function vardump($mixed)
{
    
ob_start(); var_dump($mixed); $var_dump trim(ob_get_clean());
    echo 
'<div style="display:block;visibility:visible">';
    echo 
'<pre style="background:#ddd;display:inline;border:1px solid red;">';
    echo 
htmlspecialchars($var_dumpENT_QUOTES);
    
//echo htmlspecialchars(var_export($mixed, TRUE), ENT_QUOTES);
    
echo '</pre>';
    echo 
'</div>';
}

/** Anti register_globlal */
foreach (array_keys($_REQUEST) as $str_varname)
{
    ${
$str_varname} = NULL;
    unset(${
$str_varname});
}

/** Désactivation du magic_quotes */
function recursive_stripslashes($mixed)
{
    if (
is_array($mixed))
    {
        return 
array_map(__FUNCTION__$mixed);
    }
    else
    {
        return 
stripslashes($mixed);
    }
}

function 
desactiver_magic_quotes()
{
    static 
$bool_deja_appele FALSE;
    if (!
$bool_deja_appele)
    {
        if (
get_magic_quotes_gpc())
        {
            
$arr_arr_global = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
            foreach (
$arr_arr_global as &$arr_global)
            {
                
$arr_global array_map('recursive_stripslashes'$arr_global);
            }
        }
        
$bool_deja_appele TRUE;
    }
}

desactiver_magic_quotes();

/** Anti-appel via HTTP - CLI uniquement - décommenter le exit */
$arr_str_variable_serveur = array('REQUEST_METHOD''DOCUMENT_ROOT''SERVER_NAME''SERVER_PROTOCOL');
foreach (
$arr_str_variable_serveur as $str_variable_serveur)
{
    if (!empty(
$_SERVER[$str_variable_serveur]))
    {
        
//exit('CLI only !');
    
}
}

/**
 * Fonction de conversion d'une durée en secondes en heures, minutes et secondes.
 *
 * @param $int_duree_seconde - integer - Une durée en secondes.
 * @return string - "6 heures 4 minutes 21 secondes"
 */
function convertir_seconde($int_duree_seconde)
{
    
$str_conversion '';
    if (
is_int($int_duree_seconde) && $int_duree_seconde >= 0)
    {
        if (
$int_duree_seconde == 0)
        {
            
$str_conversion '0';
        }
        else
        {
            
$str_separateur '';
            foreach (array(
'jour' => 86400'heure' => '3600''minute' => '60''seconde' => '1') as $str_unite => $int_nombre_seconde)
            {
                
$int_nombre_unite intval($int_duree_seconde $int_nombre_seconde);
                if (
$int_nombre_unite 0)
                {
                    
$int_duree_seconde $int_duree_seconde $int_nombre_seconde;
                    
$str_conversion .= $str_separateur.$int_nombre_unite.' '.$str_unite.(($int_nombre_unite 1)?'s':'');
                    
$str_separateur ' ';
                }
            }
        }
    }
    return 
$str_conversion;
}


/**
 * Fonction de suppression des balises html.
 *
 * @note on ne remplace que si nécessaire. (plus performant sur de grandes chaînes)
 * @note on tant qu'on trouve, on remplace. (éviter les attaques de types <scr<script>ipt> )
 * @param $s - string
 * @return string
 */
function supprimer_balise($s)
{
    
// Supprimer des motifs spécifiques et leur *contenu*.
    // Balises PHP, Commentaires HTML.
    
foreach (array('|<\?.*\?>|sU''/<!--.*-->/Us') as $str_pattern)
    {
        while (
preg_match($str_pattern$s))
        {
            
$s preg_replace($str_pattern''$s);
        }
    }

    
// Supprimer spécifiquement des tags et leur *contenu*.
    
foreach (array('script''head') as $str_tag)
    {
        
$str_pattern '|<'.$str_tag.'.*</'.$str_tag.'>|sUi';
        while (
preg_match($str_pattern$s))
        {
            
$s preg_replace($str_pattern''$s);
        }
    }

    
// Supprimer tous les tags eux-même et uniquement eux.
    // Matche <toto> , <toto tutu="tata">, </toto>, <toto />
    
$str_pattern '/<[^>]+>/U';
    while (
preg_match($str_pattern$s))
    {
        
$s preg_replace($str_pattern''$s);
    }

    
$s html_entity_decode($s);

    return 
$s;
}


/**
 * Fonction de suppression des lignes vides.
 *
 * @param $s - string
 * @return string
 */
function supprimer_ligne_vide($s)
{
    
// Uniformiser les fins de lignes.
    
$s str_replace("\r\n""\n"$s); // dos2unix
    
$s str_replace("\r",   "\n"$s); // mac2unix

    // Eclater en tableau.
    
$arr explode("\n"$s);

    
// Supprimer les lignes vides.
    
foreach ($arr as $k => $tmp)
    {
        
$tmp str_replace(chr(160), ' '$tmp);
        if (!
trim($tmp))
        {
            unset(
$arr[$k]);
        }
    }

    return 
implode("\r\n"$arr);
}


//--------------------------------------------------------------------------

/**
 * Fonction de conversion des lettres accentuées d'une chaîne en
 * leur équivalent non accentué.
 *
 * @param $str - string - La chaîne à traiter
 * @return string - La chaîne sans accent.
 */
function convertir_accent($str)
{
    static 
$acc_o "àÀáÁâÂäÄãÃåÅèÈéÉêÊëËìÌíÍîÎïÏòÒóÓôÔöÖøØùÙúÚûÛüÜÿŸñÑçÇ";
    static 
$acc_r "aAaAaAaAaAaAeEeEeEeEiIiIiIiIoOoOoOoOoOuUuUuUuUyYnNcC";
    return 
strtr($str$acc_o$acc_r);
}

//--------------------------------------------------------------------------

echo '<pre>';
echo 
'get_microtime()    :',get_microtime(),'<br />';
echo 
'get_guid()         :',get_guid(),'<br />';
echo 
'vardump(\'toto\')  :',vardump('toto'),'<br />';
echo 
'</pre>';

echo 
'<pre>';
foreach (array(-
101596061359936003601366036617202732073221079986400356521) as $int_seconde)
{
    echo 
str_pad($int_seconde8' 'STR_PAD_RIGHT),' => ',convertir_seconde($int_seconde),"\n";
}
echo 
'</pre>';

highlight_file(__FILE__);