$value) { if(!is_array($value)) $texte.=str_replace("#valeur","$key >> $value",$format); else $texte.="$key >> ".affiche_tableau($value,$format,$avant,$apres); } $texte.=$apres; return $texte; } else if (is_string($tab)) { $texte=$avant.str_replace("#valeur",$tab,$format).$apres; return $texte; } else return false; } /** * Fonction retournant une chaîne en ne gardant que les caractères autorisés * * @param chaîne de caractères à traiter + liste des caractères autorisés * @return chaîne traitée (pouvant être vide) * @author Fabrice PENHOËT */ function nettoye_chaine($chaine,$autorises="abcdefghijklmnopqrstuvwxyz") { $nouvelle_chaine=""; $i=0; while(isset($chaine[$i])) { if(strpos($autorises,$chaine[$i])!==false) $nouvelle_chaine.=$chaine[$i]; $i++; } return $nouvelle_chaine; } /** * Fonction retournant une chaîne après l'avoir encodée en utf8 si nécessaire * * @param chaîne de caractères à traiter * @return chaîne traitée * @author Fabrice PENHOËT */ function affiche_utf8($chaine) { if(empty($chaine)) return null; // -- vérifier encodage valides : http://php.net/manual/fr/function.mb-detect-order.php $liste_encodages="UTF-8,EUC-JP,SJIS,eucJP-win,SJIS-win,JIS,ISO-2022-JP,ISO-8859-1"; $encodage=mb_detect_encoding($chaine,$liste_encodages,true); if($encodage===false) $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT." >> ".htmlentities($chaine))); elseif($encodage!="UTF-8") { $nouvelle_chaine=iconv($encodage,"UTF-8//TRANSLIT",$chaine); if($nouvelle_chaine!==false) return $nouvelle_chaine; else $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT." >> ".htmlentities($chaine))); } return $chaine; } /** * Fonction retournant les X premiers caractères de la chaîne passée * si elle est + longue que le nombre de caractères max * la chaine elle-même sinon * * @param chaîne de caractères à traiter, nombre de caractères max, suffixe en cas de coupure (facultatif) * @return chaîne traitée * @author Fabrice PENHOËT */ function get_chaine_debut($chaine="",$max=0,$suffixe="") { if($max==0) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } if(!is_int($max)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } if(strlen($chaine)<=$max) return $chaine; else { return substr($chaine,0,($max-strlen($suffixe))).$suffixe; } } /** * Fonction détectant des liens de type url ou email dans un texte * pour les rendre cliquable. * * @param texte à traiter * @return texte traité * @author Fabrice Lezoray (http://www.expreg.com/lire-URL-source) */ function crea_liens_texte($texte="") { if(empty($texte)) return $texte; $cherche=array('`((?:https?)://\\S+)(\\s|\\z)`','`([[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*\.([a-z]{2,4}))`'); $remplace=array('$1$2','$1'); return preg_replace($cherche,$remplace,$texte); } ///+++++++++++++ Traitement des fichiers & images ++++++++++++++/// /** * Fonction générant un fichier local redimensionné à partir d'un fichier image téléchargé * * @param adresses du fichier source + de celui à créer. * Options : hauteur ou largueur max si miniature. Qualité de l'image si jpeg/png. * @return booléen suivant succès * @author Fabrice PENHOËT */ function import_image($adresse_fichier_source,$adresse_nouveau_fichier,$hmax=0,$lmax=0,$quality_jpg=80,$quality_png=5) { if (file_exists($adresse_fichier_source)) { $tab_image=getimagesize($adresse_fichier_source); if(empty($tab_image)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_IMAGE_VALIDE)); return false; } $largeur=$tab_image[0]; $hauteur=$tab_image[1]; $type_image=$tab_image[2]; if(($hmax!==0)&&($hauteur>$hmax)) { $ratio=$hmax/$hauteur; $new_largeur=ceil($largeur*$ratio); $new_hauteur=$hmax; } else if(($lmax!==0)&&($largeur>$lmax)) { $ratio=$lmax/$largeur; $new_hauteur=ceil($hauteur*$ratio); $new_largeur=$lmax; } else { $new_hauteur=$hauteur; $new_largeur=$largeur; } $new_image=imagecreatetruecolor($new_largeur,$new_hauteur); if($new_image==false) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_IMAGE_CREATION)); return false; } if ($type_image==1) { $image_s=imagecreatefromgif($adresse_fichier_source); imagecopyresampled($new_image,$image_s,0,0,0,0,$new_largeur,$new_hauteur,$largeur,$hauteur); $crea=imagegif($new_image,$adresse_nouveau_fichier); imagedestroy($new_image); unlink($adresse_fichier_source); return $crea; } elseif ($type_image==2) { $image_s=imagecreatefromjpeg($adresse_fichier_source); imagecopyresampled($new_image,$image_s,0,0,0,0,$new_largeur,$new_hauteur,$largeur,$hauteur); $crea=imagejpeg($new_image,$adresse_nouveau_fichier,$quality_jpg); imagedestroy($new_image); unlink($adresse_fichier_source); return $crea; } elseif ($type_image==3) { $image_s=imagecreatefrompng($adresse_fichier_source); imagecopyresampled($new_image,$image_s,0,0,0,0,$new_largeur,$new_hauteur,$largeur,$hauteur); $crea=imagepng($new_image,$adresse_nouveau_fichier,$quality_png); imagedestroy($new_image); unlink($adresse_fichier_source); return $crea; } else { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_IMAGE_FORMAT)); return false; } } else { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_EXISTE)); return false; } } /** * Fonction création d'un fichier temporaire (ticket) * * @param le contenu à enregistré dans le fichier, son répertoire et son préfixe * @return l'adresse du ticket créé. false si erreur rencontrée. * @author Fabrice PENHOËT */ function crea_ticket($contenu="",$repertoire,$prefixe="fclf") { if(!file_exists($repertoire)) { if(!mkdir($repertoire,TICKET_REP_CHMOD,true)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_REP_CREA)); return false; } } if(!is_writable($repertoire)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_REP_DROIT)); return false; } $ticket=tempnam($repertoire,$prefixe); if($ticket===false) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_CREA)); return false; } if((!empty($contenu))&&(!file_put_contents($ticket,$contenu))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_ECRITURE)); return false; } return $ticket; } /** * Fonction parcourant les différentes dimensions d'un tableau pour le réécrire * * @param le tableau * @return le tableau sous forme de chaine, $debut de la chaine * @author Fabrice PENHOËT */ function get_chaine_tableau($tableau,$debut="") { if(!is_array($tableau)) return false; $chaine_tableau=""; foreach ($tableau as $attribut => $valeur) { if(is_array($tableau[$attribut])) $chaine_tableau.=get_chaine_tableau($tableau[$attribut],$debut."['$attribut']"); else $chaine_tableau.="\$t".$debut."['$attribut']=\"".addslashes($valeur)."\";"; } return $chaine_tableau; } /** * Fonction création d'un fichier stochant un tableau php * Utile au cache du modèle * * @param chemin du fichier à créer/modifier et données brutes à écrire dans le fichier pouvant être fournies sous forme de tableau. * @return booléen suivant succès * @author Fabrice PENHOËT */ function crea_cache($chemin,$donnees_fichier) { if(!defined('CACHE_REP')) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_ECRITURE." >> ".ERREUR_CACHE_REP)); return false; } if(empty($chemin)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_ECRITURE." >> ".ERREUR_PARAM_MANQUANT)); return false; } if((file_exists(CACHE_REP."/$chemin"))&&(!is_writable(CACHE_REP."/$chemin"))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_ECRITURE." >> ".ERREUR_FICHIER_ECRITURE." >> ".$chemin)); return false; } $repertoire=CACHE_REP."/".substr($chemin,0,(strrpos($chemin,"/")+1)); if(!file_exists($repertoire)) { if(!mkdir($repertoire,CACHE_REP_CHMOD,true)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_ECRITURE." >> ".ERREUR_REP_CREA." >> ".$repertoire)); return false; } } if((!file_exists(CACHE_REP."/$chemin"))&&(!is_writable($repertoire))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_ECRITURE." >> ".ERREUR_REP_DROIT." >> ".$repertoire)); return false; } if(is_array($donnees_fichier)) $code="> ".ERREUR_FICHIER_ECRITURE." >> ".$chemin)); return false; } else return true; } /** * Fonction supprimant un répertoire et tout ce qu'il contient * * @param chemin du répertoire à supprimer * + booléen si le répertoire doit lui-même être supprimé * @return boolén suivant succès * @author Fabrice PENHOËT */ function supprime_repertoire($chemin_rep,$total=true) { $rep_courant=opendir($chemin_rep); if($rep_courant===false) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_REP_EXISTE)); return false; } while($fichier=readdir($rep_courant)) { if((is_dir("$chemin_rep/$fichier"))&&($fichier!=".")&&($fichier!="..")) { if(!supprime_repertoire("$chemin_rep/$fichier")) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_REP_DROIT." >> $chemin_rep/$fichier")); return false; } } elseif(($fichier!=".")&&($fichier!="..")) { if(!unlink("$chemin_rep/$fichier")) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_SUPPR." >> $chemin_rep/$fichier")); return false; } } } closedir($rep_courant); if($total) { if(!rmdir($chemin_rep)) return false; } return true; } ///+++++++++++++ Email ++++++++++++++/// /** * Fonction qui envoi un email avec la fonction mail() * * @param email_e email expéditeur, $email_d email destinataire * @return booléen suivant succès */ function envoi_message($email_e,$email_d,$objet,$corps,$nom_e=SITE_NOM) { if((empty($email_e))||(empty($email_d))||(empty($objet))||(empty($corps))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_EMAIL_ENVOI." >> ".ERREUR_PARAM_MANQUANT)); return false; } if((!filter_var($email_e,FILTER_VALIDATE_EMAIL))||(!filter_var($email_d,FILTER_VALIDATE_EMAIL))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_EMAIL_ENVOI." >> ".ERREUR_EMAIL_ADRESSE_FORMAT)); return false; } $message=wordwrap($corps,70,"\r\n"); $headers="From: $nom_e <$email_e>"."\r\n"."MIME-Version: 1.0"."\r\n"."Content-type: text/plain; charset=UTF-8"."\r\n"."Reply-To: $email_e"."\r\n"."X-Mailer: PHP/".phpversion(); if((mail($email_d,$objet,$message,$headers))===false)//!!! à revoir pour passer par smtp ??? { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_EMAIL_ENVOI)); return false; } else return true; } /** * Fonction tentant d'initialisé un objet PHPMailer * en se basant sur les différentes constantes déclarées pour la configuration ou non d'un serveur smtp * * @return l'objet créé ou false en cas d'erreur * ne sert plus ... et bug ! function PHPMailer_initialise() { $mail=new PHPmailer(); if(!empty(SMTP_SERVEUR)) { $mail->IsSMTP(); $mail->Host=SMTP_SERVEUR; $mail->SMTPKeepAlive=true;// maintient de la connexion pour éventuellement envoyer +sieurs mail if(!empty(SMTP_PASSE)) { $mail->SMTPAuth=true; $mail->Username=SMTP_NAME; $mail->Password=SMTP_PASSE; } if(!empty(SMTP_PORT)) $mail->Port=SMTP_PORT; if(!empty(SMTP_SECURE)) $mail->SMTPSecure=SMTP_SECURE; } $mail->setLanguage(PHPMAIL_LANG); if(!empty($mail)) return $mail; else return false; }*/ ///+++++++++++++ Mots de passe & chiffrement ++++++++++++++/// /** * Fonction qui génére un mot de passe * en fait un nombre défini de caractères aléatoires parmi ceux fournis * * @param les caractères autorisés + le nombre de caractères souhaité * @return la valeur chiffrée. false si erreur. */ function crea_passe($caracteres="",$nb_caracteres=0) { if(empty($caracteres)) {//j'évite volontairement les 0 et O sources éternelles de confusion... //$caracteres=$caracteres.strtoupper($caracteres)."123456789@+-%*"; // je simplifie parce que... $caracteres="abcdefghijklmnpqrstuvwxyz123456789"; } else $caracteres=strval($caracteres); if($nb_caracteres==0) $nb_caracteres=rand(7,12); else $nb_caracteres=intval($nb_caracteres); $i=1;$passe=""; $max=strlen($caracteres)-1; while($i<=$nb_caracteres) { $passe.=$caracteres[rand(0,$max)]; $i++; } if(!empty($passe)) return $passe; else return false; } /** * Fonction qui chiffre un mot de passe * * @param le mot de passe à chiffrer, $cout le "coût" du chiffrement * @return la valeur chiffrée. false si erreur */ function chiffrement($chaine,$cout=12) { if(empty($chaine)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } else { $options=array('cost'=>$cout); $chaine_chiffree=password_hash($chaine,PASSWORD_DEFAULT,$options); if($chaine_chiffree!=false) return $chaine_chiffree; else { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CHIFFREMENT)); return false; } } } ///+++++++++++++ mysql ++++++++++++++/// /** * Fonction servant à tester si on est bien connecté à la base de données * Ecrit des messages d'erreur si pas de connexion * * @param script et ligne où le test est réalisé * @return booléen suivant si connecté ou pas. * @author Fabrice PENHOËT */ function isset_connexion($script,$ligne) { global $Bd; if(!($Bd instanceof PDO)) { $ajout_journal=new journal_erreurs(array($script,$ligne,ERREUR_CONNEXION_ABSENTE)); return false; } else return true; } /** * Fonction qui recueille le résultat d'une requête préparée (ou non) pour traiter les éventuelles erreurs * * @param script et ligne où le test est réalisé + référence à la requête préparée * @return booléen suivant succès * @author Fabrice PENHOËT */ function test_requete($script,$ligne,$requete,$prepare=null) { global $Bd; if($requete===false) { if(!empty($prepare)) { $tab=$prepare->errorInfo(); $prepare=null; } else $tab=$Bd->errorInfo(); $ajout_journal=new journal_erreurs(array($script,$ligne,$tab[2])); return false; } else return true; } ///+++++++++++++ HTML... ++++++++++++++/// /* Ensemble de fonctions php qui vont me permettrent de créer le code html au design * à revoir ! */ function get_html_h1($h1) { return "

$h1

"; } function get_html_ariane($ariane_items) { if(empty($_SESSION["statut"])) $html="