Code PHP
Page mise à jour le 06-01-2026 à 23:21
// backup d'une base de données MySQL
$link = mysqli_connect('HostName','UserName','Password');
mysqli_select_db($link,'DatabaseName');
$rep = "backups_bdd/";
$ExportPath = $rep."backup_".date("Ymd-His").".sql.gz";
// exécution avec requêtes separées (option --extended-insert=false) et compression gzip
$command = 'mysqldump --extended-insert=false -h'.$HostName.' -u'.$UserName.' -p'.$Password.' '.$DatabaseName;
$command .= ' | gzip > '.$ExportPath;
exec($command, $output, $worked);
mysqli_close($link);
// recherche du fichier de sauvegarde le plus récent
$dir = opendir($rep);
$last_date = 0;
while ($file = readdir($dir)) {
if (($file != ".") && ($file != "..") && (!is_dir($rep.$file))) {
$date_file = filemtime($rep.$file);
if ($date_file > $last_date) $last_date = $date_file;
}
}
// conserve un historique de sauvegarde de 90 jours
$dir = opendir($rep);
$now = time();
while ($file = readdir($dir)) {
if (($file != ".") && ($file != "..") && (!is_dir($rep.$file))) {
$date_file = filemtime($rep.$file);
$ecart = ($now - $date_file) / (60*60*24*90);
if ($ecart > 1) unlink($rep.$file);
}
}
// directives globales
date_default_timezone_set('Europe/Paris');
include('');
echo "<script> window.location.replace('index.php') </script>";
session_start();
session_destroy();
session_unset();
$_SESSION[''];
$_POST[''];
$_GET[''];
// durée d'exécution en ms et taille en ko du code généré par PHP
ob_start();
$codeStart = microtime(true);
// ========= position du code à évaluer =========
$codeStop = microtime(true);
$duration = round(($codeStop - $codeStart) * 1000);
$codeSize = strlen(ob_get_contents());
$codeSize = round($codeSize / 1000);
// retourne un tableau associatif trié par noms des fichiers d'un répertoire
// $ext = tableau des extensions à prendre en compte, exemple array('txt','pdf')
// $out = tableau des fichiers à exclure, exemple array('file1','file2')
function enumDir($dir, $ext, $out) {
$files = array();
if ($rep = opendir($dir))
while ($name = readdir($rep))
if ((in_array(pathinfo($name, PATHINFO_EXTENSION), $ext)) &&
(!in_array(pathinfo($name, PATHINFO_FILENAME), $out))) {
$files['name'][] = $name;
$files['time'][] = filemtime($dir.$name);
}
array_multisort($files['name'], SORT_ASC, $files['time']);
return $files;
}
// retourne un tableau associatif trié par noms des répertoires et du nombre de fichiers par répertoire
$tableau = array();
$i = 0;
// fonction récursive d'exploration d'une arborescence de répertoires
function exploreDir($root_dir, &$total_rep, &$total_file, &$n) {
global $tableau, $i;
$dir = opendir($root_dir);
while ($file = readdir($dir))
if (($file!=".") && ($file!=".."))
if (is_dir("$root_dir/$file")) {
$nfiles = exploreFiles("$root_dir/$file");
$total_file = $total_file + $nfiles;
$total_rep++;
$n++;
$repertoire = substr($root_dir,2,strlen($root_dir)-2);
$tableau['name'][$i] = $repertoire."/".$file;
$tableau['nber'][$i] = $nfiles;
$i++;
exploreDir("$root_dir/$file", $total_rep, $total_file, $n);
}
closedir($dir);
array_multisort($tableau['name'], SORT_ASC, $tableau['nber']);
return $tableau;
}
// comptage des fichiers d'un répertoire appelé par la fonction exploreDir()
function exploreFiles($rep) {
$nfiles = 0;
$dir = opendir($rep);
while ($file = readdir($dir))
if (is_file("$rep/$file")) $nfiles++;
closedir($dir);
return $nfiles;
}
// retourne la date et l'heure du dernier fichier mis à jour dans une sélection de répertoires
// $folders = liste des répertoires à scanner avec '' pour racine, exemple array('','dir1/','dir2/')
function lastUpdate($folders) {
$last_time = 0;
foreach ($folders as $rep) {
$dir = opendir($rep);
while ($file = readdir($dir))
if (is_file($rep.$file)) {
$time_file = filemtime($rep.$file);
if ($time_file > $last_time) $last_time = $time_file;
}
closedir($dir);
}
return date("d-m-Y H:i", $last_time);
}
// retourne le commentaire d'une photo
function pictureComment($picture) {
$picComment = '';
$exif = exif_read_data($picture, 0, true);
foreach ($exif as $key => $section)
foreach ($section as $name => $val)
if (($key == 'IFD0') && ($name == 'Comments')) {
for ($cpt=0; $cpt<strlen($val); $cpt++) {
$car = substr($val,$cpt,1);
$x = ord($car);
if ($x > 31) $picComment .= $car;
}
return $picComment;
}
}
// retourne l'heure de prise de vue d'une photo
function pictureDatetime($picture) {
$picTime = '';
$exif = exif_read_data($picture, 0, true);
foreach ($exif as $key => $section)
foreach ($section as $name => $val)
if (($key == 'EXIF') && ($name == 'DateTimeOriginal')) {
for ($cpt=0; $cpt<strlen($val); $cpt++) {
$car = substr($val,$cpt,1);
$x = ord($car);
if ($x > 31) $picTime .= $car;
}
$picTime = substr($picTime,8,2).'/'.substr($picTime,5,2).'/'.substr($picTime,0,4);
return $picTime;
}
}
// retourne la taille d'un fichier dans l'unité adaptée
function sizeFile($file) {
$volume=filesize($file);
if ($volume >= 1073741824) {
$volume = round($volume / 1073741824 * 100) / 100; $unit = 'Go'; }
elseif ($volume >= 1048576) {
$volume = round($volume / 1048576 * 100) / 100; $unit = 'Mo'; }
elseif ($volume >= 1024) {
$volume = round($volume / 1024 * 100) / 100; $unit = 'Ko'; }
else $unit = 'o';
if ($volume > 99.99) $volume = round($volume * 100 / 100);
if ($volume > 9.99) $volume = round($volume * 10) / 10;
return number_format($volume,2,'.','').' '.$unit;
}
// retourne une chaine sans caractères accentués
function sansAccents($string){
$chars = array('%C3%80'=>'A','%C3%81'=>'A','%C3%82'=>'A','%C3%83'=>'A','%C3%84'=>'A','%C3%85'=>'A',
'%C3%A0'=>'a','%C3%A1'=>'a','%C3%A2'=>'a','%C3%A3'=>'a','%C3%A4'=>'a','%C3%A5'=>'a',
'%C3%92'=>'O','%C3%93'=>'O','%C3%94'=>'O','%C3%95'=>'O','%C3%96'=>'O','%C3%98'=>'O',
'%C3%B2'=>'o','%C3%B3'=>'o','%C3%B4'=>'o','%C3%B5'=>'o','%C3%B6'=>'o','%C3%B8'=>'o',
'%C3%88'=>'E','%C3%89'=>'E','%C3%8A'=>'E','%C3%8B'=>'E','%C3%A8'=>'e','%C3%A9'=>'e',
'%C3%AA'=>'e','%C3%AB'=>'e','%C3%87'=>'C','%C3%A7'=>'c','%C3%8C'=>'I','%C3%8D'=>'I',
'%C3%8E'=>'I','%C3%8F'=>'I','%C3%AC'=>'i','%C3%AD'=>'i','%C3%AE'=>'i','%C3%AF'=>'i',
'%C3%99'=>'U','%C3%9A'=>'U','%C3%9B'=>'U','%C3%9C'=>'U','%C3%B9'=>'u','%C3%BA'=>'u',
'%C3%BB'=>'u','%C3%BC'=>'u','%C3%BF'=>'y','%C3%91'=>'N','%C3%B1'=>'n',
'%C3%87'=>'C','%C3%A7'=>'c','%C5%92'=>'OE','%C5%93'=>'oe');
$string = urlencode($string);
foreach ($chars as $key => $value) $string = str_replace($key,$value,$string);
return urldecode($string);
}
// cryptage réversible d'une chaine de caractères
// crypte une chaine
function crypt($chain,$key) {
srand((double)microtime()*1000000);
$cle = md5(rand(0,32000));
$n = 0;
$temp = '';
for ($i=0; $i<strlen($chain); $i++) {
if ($n == strlen($cle)) $n = 0;
$temp .= substr($cle,$n,1).(substr($chain,$i,1) ^ substr($cle,$n,1));
$n++;
}
return base64_encode(genKey($temp,$key));
}
// décrypte une chaine
function decrypt($chain,$key) {
$chain = genKey(base64_decode($chain),$key);
$temp = '';
for ($i=0; $i<strlen($chain); $i++) {
$code = substr($chain,$i,1);
$i++;
$temp .= (substr($chain,$i,1) ^ $code);
}
return $temp;
}
// fonction appelée par crypt() et decrypt()
function genKey($chain,$key) {
$key = md5($key);
$n = 0;
$temp = '';
for ($i=0; $i<strlen($chain); $i++) {
if ($n == strlen($key)) $n = 0;
$temp .= substr($chain,$i,1) ^ substr($key,$n,1);
$n++;
}
return $temp;
}
// retourne la date complète en français
function frDate($day) {
$aujourdhui = getDay($day)." ";
$jour = date("j", strtotime($day));
$aujourdhui .= $jour;
if ($jour == 1) $aujourdhui .= "er";
$aujourdhui .= " ".strtolower(getMonth($day))." ";
$aujourdhui .= date("Y", strtotime($day));
return $aujourdhui;
}
// retourne le jour en français
function getDay($date) {
$j = date("N", strtotime($date));
if ($j == 1) $jour = 'Lundi';
if ($j == 2) $jour = 'Mardi';
if ($j == 3) $jour = 'Mercredi';
if ($j == 4) $jour = 'Jeudi';
if ($j == 5) $jour = 'Vendredi';
if ($j == 6) $jour = 'Samedi';
if ($j == 7) $jour = 'Dimanche';
return $jour;
}
// retourne le mois en français
function getMonth($date) {
$m = date("m", strtotime($date));
if ($m == 1) $mois = 'Janvier';
if ($m == 2) $mois = 'Février';
if ($m == 3) $mois = 'Mars';
if ($m == 4) $mois = 'Avril';
if ($m == 5) $mois = 'Mai';
if ($m == 6) $mois = 'Juin';
if ($m == 7) $mois = 'Juillet';
if ($m == 8) $mois = 'Août';
if ($m == 9) $mois = 'Septembre';
if ($m == 10) $mois = 'Octobre';
if ($m == 11) $mois = 'Novembre';
if ($m == 12) $mois = 'Décembre';
return $mois;
}
// retourne le nombre de mercredis dans un mois défini
function howManyWednesday($month, $year) {
$date = date("Y-m-d", strtotime($year.'-'.$month.'-1'));
$nDays = date("t", strtotime($date));
$nWednesday = 0;
for ($i=0;$i<$nDays;$i++)
if (date("N", strtotime($date.' + '.$i.' days')) == 3) $nWednesday++;
return $nWednesday;
}
// retourne la date du mercredi précédent le plus proche
function wednesdayBefore($date) {
$jour = date("N", strtotime($date));
if ($jour == 1) $decalage = -5;
if ($jour == 2) $decalage = -6;
if ($jour == 3) $decalage = 0;
if ($jour == 4) $decalage = -1;
if ($jour == 5) $decalage = -2;
if ($jour == 6) $decalage = -3;
if ($jour == 7) $decalage = -4;
$date = date("Y-m-d", strtotime("$date ".$decalage." days"));
return $date;
}
// retourne la date du mercredi suivant le plus proche
function wednesdayAfter($date) {
$jour = date("N", strtotime($date));
if ($jour == 1) $decalage = +2;
if ($jour == 2) $decalage = +1;
if ($jour == 3) $decalage = 0;
if ($jour == 4) $decalage = +6;
if ($jour == 5) $decalage = +5;
if ($jour == 6) $decalage = +4;
if ($jour == 7) $decalage = +3;
$date = date("Y-m-d", strtotime("$date ".$decalage." days"));
return $date;
}
// retourne une valeur au format puissance de 10
function deciPower($val, $size) {
$val = sprintf('%E', $val);
$val = explode('E',$val);
$out = "<span style='font-size:".$size."px;'>".number_format($val[0],3,'.','')."</span>";
$out .= "<span style='font-size:".($size-4)."px;'> 10<sup>".abs($val[1])."</sup></span>";
return $out;
}
// génère un mot de passe aléatoire
function passwordGenerator($size) {
$chaine1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$chaine2 = ".*-+=@:!?%";
$chaine3 = "abcdefghijklmnopqrstuvwxyz";
$chaine4 = "0123456789";
srand((double)microtime()*1000000);
$password = '';
for($i=0; $i<$size; $i+=4){
$password .= $chaine1[rand()%strlen($chaine1)];
$password .= $chaine2[rand()%strlen($chaine2)];
$password .= $chaine3[rand()%strlen($chaine3)];
$password .= $chaine4[rand()%strlen($chaine4)];
}
return substr($password, 0, $size);
}
// évalue la force de 0 à 10 d'un mot de passe
function testForcePassword($password) {
$score = strlen($password)-8;
if (preg_match("/[a-z]/", $password)) $score++;
if (preg_match("/[A-Z]/", $password)) $score++;
if (preg_match("/[0-9]/", $password)) $score++;
if (preg_match("/[$@!?%_+*-=#&<>(){}|:.;,\"\'\[\]\/]/", $password)) $score++;
if ($score < 0) $score = 0;
if ($score > 10) $score = 10;
return $score;
}
// génère un pictogramme anti-spam
mt_srand((float) microtime()*1000000);
$number = mt_rand(10000, 99999);
$textColor = 'FFFFFF',
$backColor = '00FF00',
function getPicto($number,$textColor,$backColor) {
$back1 = hexdec(substr($backColor,0,2));
$back2 = hexdec(substr($backColor,2,2));
$back3 = hexdec(substr($backColor,4,2));
$image = imageCreate(65,29);
imageColorAllocate($image, $back1, $back2, $back3);
// imageString(image, font, posX, posY, text, textColor);
imageString($image, 5, 10, 7, $number, $textColor);
return imagePng($image);
}
// versions de mysql, mariadb, apache et os
$link = mysqli_connect('HostName','UserName','Password');
mysqli_select_db($link,'DatabaseName');
$chain = explode('-',mysqli_get_server_info($link));
$mysql = 'MySQL '.$chain[0];
$maria = 'MariaDB '.$chain[1];
$chain = explode('/',apache_get_version());
$chain = explode(' ',$chain[1]);
$apache = $chain[0];
$os = str_replace('(','',$chain[1]);
$os = str_replace(')','',$os);
mysqli_close($link);
// mailing avec la classe PHPMailer (https://github.com/PHPMailer/)
// paramètres du mail
$nom_expe = 'nom_expéditeur';
$mail_expe = 'mail_expéditeur';
$objet = 'objet_mail';
$pj = 'chemin/pièce_jointe';
$message = '';
$destinataires = array();
// refus de pièce jointe > 2Mo
if (filesize($pj) >= 1048576 * 2) $pj = '';
// corps du message html
$fichier = 'fichier.html';
$fp = fopen($fichier,'r');
while (!feof($fp)) $message .= fgets($fp,4096);
fclose($fp);
// destinataires extraits d'une bdd
$link = mysqli_connect('HostName','UserName','Password');
mysqli_select_db($link,'DatabaseName');
$query = "select * from table where email <> '' order by nom asc, prenom asc";
$result = mysqli_query($link,$query) or die('Erreur SQL ! '.$query.'<br>'.mysqli_error($link,));
while ($row = mysqli_fetch_array($result)) array_push($destinataires, $row['email']);
mysqli_close($link);
// lignes à décommenter pour les tests :
// $destinataires = array();
// $destinataires[0] = 'email_test';
// chargement de PHPMailer et création d'une instance de la classe
include_once('phpmailer/PHPMailerAutoload.php');
$send_mail = new PHPMailer();
// authentification smtp
$send_mail -> IsSMTP();
$send_mail -> SMTPAuth = true;
$send_mail -> Host = "serveur_smtp";
$send_mail -> Port = 25;
$send_mail -> Username = "compte_smtp";
$send_mail -> Password = "password_smtp";
// authentification smtp avec cryptage ssl (465) ou tls (587)
// $send_mail -> SMTPSecure = "tls";
// $send_mail -> Port = 587;
// construction du mail
$send_mail -> From = $mail_expe;
$send_mail -> FromName = $nom_expe;
$send_mail -> Subject = $objet;
$send_mail -> WordWrap = 50;
$send_mail -> MsgHTML($message);
$send_mail -> AddAttachment($pj);
foreach ($destinataires as $contact) $send_mail -> AddAddress($contact,'');
// envoi du mail et message de retour
$send_mail -> IsHTML(true);
$retour = ($send_mail -> Send()) ? 'Success' : 'Failure' ;
// fermeture de session automatique
session_start();
$timeout = 900;
// ligne de code à placer dans <head></head> (timeout majoré de 2s)
if ($_SESSION['login'] != '') echo "<meta http-equiv='refresh' content='".($timeout+2)."'>";
// tentative de connexion
if ($_POST['connect'] != '') {
$id = $_POST['login'];
$password = $_POST['password'];
$link = mysqli_connect('HostName','UserName','Password');
mysqli_select_db($link,'DatabaseName');
$query = "select * from table where id = '$id'";
$result = mysqli_query($link,$query) or die('Erreur SQL ! '.$query.'<br>'.mysqli_error($link));
$exist = mysqli_num_rows($result);
$row = mysqli_fetch_array($result);
mysqli_close($link);
if (($exist > 0) && ($row['pw'] == $password)) {
// ouverture de session et rechargement de la page
$_SESSION['login'] = $row['id'];
echo "<script> window.location.replace('index.php') </script>";
}
} else {
// déconnexion manuelle, ou automatique si le timeout est atteint
if ((($_POST['disconnect'] != '') ||
(isset($_SESSION['start']) && (time() - $_SESSION['start'] > $timeout)))) {
// destruction de la session et rechargement de la page
$_SESSION = array();
session_destroy();
session_unset();
echo "<script> window.location.replace('index.php') </script>";
}
}
// derniere action du visiteur
$_SESSION['start'] = time();
// suite de la page ici...