convertir une arborescence vers la base de donnée
Hayden Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre Hayden
- Inscrit le : 11/08/2009
- Site internet
Édité par Hayden Le 11/08/2009 à 17h18
Cordialement,
Greg
Envie de faire la fête ==>www.smsparty.fr
Greg
Envie de faire la fête ==>www.smsparty.fr
Hayden Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre Hayden
- Inscrit le : 11/08/2009
- Site internet
Code PHP :
<?php /*################################################## * phpboost_arborescenceVersDB.php * ------------------- *Creation: 11/08/02009 Version: 1.0.0 *Auteur: Gregory Fromain *email: gregoryfromain [at] hotmail.fr * * ################################################### * OBJECTIF : Le but de ce fichier est de convertir une arborescence de fichier ou dossier vers la base de donnée phpBoost. Cela permet d'ajouter plusieurs centaines de fichier à votre site en quelques secondes... DEROULEMENT : * Dans la premiere partie le fichier va tester la validitée de toutes les url de la table phpboost_download et les supprimer ou les rendre invisibles (suivant les paramêtres si dessous) afin de ne pas poluer la table pour rien *Il va ensuite synchroniser l'arborescence avec la base de donnée. *Mettre à jour le champ num_files dans la table phpboost_download_cat *Pour terminer, mettre à jour le cache du site. IMPORTANT : * Il n'y a pas de limite dans le nombre de dossier, fichier, arborenscence * Du moment que l'arborences ne chance pas ou qu'un fichier n'est pas deplacer il est possible de modifier l'icone, la description, la visibilité,... entre 2 synchronisations, les informations ne seront pas perdu. * La methode n'a pas d'impact sur les téléchargements deja possibles. (Sauf si les liens de ceci ne sont plus valide.) * ###################################################*/ //initialisation des variables //nom de domaine $domaine ="http://www.xxxxx.com/"; //Chemin entre le script et le dossier à synchroniser $liaison_rep1 = "../"; //chemin depuis la racine du site jusqu'a la racine de téléchargement $rep1 = "telechargement/"; //nom de domaine de la base SQL $db_domaine = "localhost"; //identifiant SQL $db_login = "xxx"; //Mot De Passe SQL $db_MDP = "xxxx"; //description par defaut $description = ''; //true : Supprime les enregisrements qui pointe vers un fichier qui n'existe pas. //false : On rend les enregistrements qui pointe vers un fichier qui n'existe pas. $supprimerLienMort = true; //******************************************************************************* //Ne rien modifier sous cette ligne! //******************************************************************************* $idCatEnCour = 0; //********************************************** //Mise en forme de la date //********************************************** function dd($date) { return date("d/m/Y H:i:s",$date); } //********************************************** //Convertion de caractere simple //********************************************** function caractSimple ($aConvertir,$chemin) { // info : $chemin = $liaison_rep.$rep; $old = array("ç", "è", "é", "à", " "); $new = array("c","e", "e", "a", "_"); $nomSimple = str_replace($old, $new, $aConvertir); rename($chemin.$aConvertir, $chemin.$nomSimple); return $nomSimple; } //********************************************** //Fonction qui permet de Tester et valider une URL //********************************************** // source : http://www.pckult.net/index.php?Itemid=7&id=806&option=com_content&task=view function is_valid_url($url1) { $url = @parse_url($url1); if (!$url) { return false; } $url = array_map('trim', $url); $url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port']; $path = (isset($url['path'])) ? $url['path'] : ''; if ($path == ''){$path = '/';} $path .= (isset($url['query'])) ? "?$url[query]" : ''; if (isset($url['host']) AND $url['host'] != gethostbyname($url['host'])) { if (PHP_VERSION >= 5) { $headers = get_headers("$url[scheme]://$url[host]:$url[port]$path"); } else { $fp = @fsockopen($url['host'], $url['port'], $errno, $errstr, 30); if (!$fp) { return false; } fputs($fp, "HEAD $path HTTP/1.1rnHost: $url[host]rnrn"); $headers = fread($fp, 4096); fclose($fp); } $headers = (is_array($headers)) ? implode("n", $headers) : $headers; return (bool)preg_match('#^HTTP/.*s+[(200|301|302)]+s#i', $headers); } return false; } //************************************************** //On commence par nettoyer les enregistrements invalide //************************************************** function nettoyageEnregistrements($supprimerLienMort) { echo 'Debut nettoyage de la table<br />'; $tATravailler = array(''); if($supprimerLienMort == true) { $sql = 'SELECT url FROM phpboost_download'; } else { $sql = "SELECT url FROM phpboost_download WHERE visible='1'"; } $retour = mysql_query($sql); while ($tdonnees = mysql_fetch_array($retour)) { //verification de l'url if(is_valid_url($tdonnees['url'])) { echo $tdonnees['url'].' <font color="Green">Ok</font><br />';// Url Ok donc pas de pb :) } else {//L'url ne fonctionne pas, on va donc faire les modif pour ne pas gener l'utilisateur... echo '<font color="red">'.$tdonnees['url'].' Ko</font><br />'; //il faut donc simplement supprimer l'enregistrement if($supprimerLienMort == true) { array_push($tATravailler,$tdonnees['url']); //on ajoute un élément au tableau Echo ' L'enregistrement va être supprimé.<br />'; } else { array_push($tATravailler,$tdonnees['url']); //on ajoute un élément au tableau $sql = "SELECT url FROM phpboost_download WHERE visible='1'"; } } } //Supression des éléments invalides $tailleTableau = count($tATravailler); if($tailleTableau>1){ if($supprimerLienMort == true) { echo 'Suppression des éléments invalide.<br /><br />'; $sql = 'DELETE FROM phpboost_download WHERE '; } else { echo 'Les eléments invalide devienne invisible.<br /><br />'; $sql = "UPDATE phpboost_download SET visible='0' WHERE "; } for($i=1;$i<=($tailleTableau-1);$i++) { $sql .= "url='".$tATravailler[$i]."' OR "; } $sql = substr($sql,0,-4); echo $sql; $retour = mysql_query($sql); } echo 'Fin du nettoyage de la table<br /><br />'; //*/ } //********************************************** //Mise à jour des informations entre un repertoire et la base de donnée //********************************************** function repertoireVersBaseDonnee($liaison_rep, $rep, $domaine, $idCat, $descripDefaut) { if($dir = opendir($liaison_rep.$rep)) { echo '<font color="green">Ouverture du dossier OK</font> <br />'; while ($f = readdir($dir)) { if(!(($f=='.') or ($f=='..'))) { //on modifie les caractères qui ne passe pas bien à la moulinette... :) $f = caractSimple($f,$liaison_rep.$rep); if(is_dir($liaison_rep.$rep.$f)) {// nous somme dans un repertoire echo '<b>'.$f.' '.$idCat.'</b><br />'; //il s'agit donc d'une catégorie differentes. //on va vérifier si elle existe $retour = mysql_query("SELECT COUNT(*) FROM phpboost_download_cat WHERE name='".$f."'"); $donnees = mysql_result($retour,0); echo $donnees; if($donnees == 0) { echo 'Creation d'un nouvelle catégorie : '.$f.'<br />'; //Elle n'hexiste pas on va la creer $retour = mysql_query("INSERT INTO `phpboost`.`phpboost_download_cat` (`id`, `c_order`, `id_parent`, `name`, `contents`, `icon`, `visible`, `auth`, `num_files`) VALUES ('', '0', '".$idCat."', '".$f."', '', 'download.png', '1', '', '1')"); } $sql = "SELECT * FROM `phpboost_download_cat` WHERE name='".$f."'"; $retour = mysql_query($sql); while ($tdonnees = mysql_fetch_array($retour)) { echo '==>'.$tdonnees['id']; repertoireVersBaseDonnee($liaison_rep, $rep.$f.'/', $domaine, $tdonnees['id'], $descripDefaut); } } else {//Il s'agit d'un fichier echo $f.'<br />'; // On récupere qq info sur le fichier $tStampCreation = filectime($liaison_rep.$rep.$f);// timestamp de creation $tStampModif = filemtime($liaison_rep.$rep.$f);//timestamp de modification $tailleF = filesize($liaison_rep.$rep.$f); //taille du fichier en octects $nomSansExtention = substr($f,0,-4); //On informe l'utilisateur sur le fichier echo "<li>Nom : $f"; echo " Taille : $tailleF octets"; echo ' Création : '.dd($tStampCreation); echo ' Modification : '.dd($tStampModif); echo filemtime($liaison_rep.$rep.$f); //On regarde si l'on à deja travailler avec le fichier echo "<br>Etat du fichier : "; $retour = mysql_query("SELECT COUNT(*), size FROM phpboost_download WHERE title='".$f."'"); $donnees = mysql_result($retour,0); if($donnees == 1) {//le fichier est deja en base de donnée... echo '<font color="green">Le fichier est deja en base de donnée.</font>'; while ($tdonnees = mysql_fetch_array($retour)) { echo $tdonnees[0]; } } else { echo '<font color="red">Le fichier n'existe pas, on l'ajoute dans la base de donnée!<br /></font>'; //on informe l'utilisateur //creation de la requête... $sql = "INSERT INTO `phpboost`.`phpboost_download` (`id`, `idcat`, `title`, `short_contents`, `contents`, `url`, `image`, `size`, `count`, `timestamp`, `release_timestamp`, `visible`, `approved`, `start`, `end`, `user_id`, `users_note`, `nbrnote`, `note`, `nbr_com`, `lock_com`, `force_download`) "; $sql =$sql. "VALUES (NULL, '".$idCat."', '".$f."', '".$description."', '".$description."', '".$domaine.$rep.$f."', '', '".$tailleF."', '0', '".$tStampCreation."', '".$tStampModif."', '1', '1', '0', '0', '0', NULL, '0', '0', '0', '0', '1')"; mysql_query($sql); } echo "<br><br>"; } } } closedir($dir); //enfin fermer le dossier } else Echo "<h2>Impossible d'ouvrir le dossier : ".$domaine.$rep."</h2>"; } //************************************************** //Mise à jour du nombre de fichier dans chaque catégorie //************************************************** function MAJNbFichierParCategorie(){ //on selectionne toutes les catégories $retour = mysql_query("SELECT * FROM phpboost_download_cat"); while ($tdonnees = mysql_fetch_array($retour)) { //on va faire une boucle dans lequel on va compter le nombre d'enregistrement dans la table phpboost_download //puis mettre à jour l'information dans la table phpboost_download_cat //Si il n'y a pas de fichier dans la catégorie, On supprimer la catégorie... $retour2 = mysql_query("SELECT COUNT(*) FROM phpboost_download WHERE idcat = '".$tdonnees['id']."'"); $nbFichier = mysql_result($retour2,0); mysql_query("UPDATE phpboost_download_cat SET num_files='".$nbFichier."' WHERE id='".$tdonnees['id']."'"); } } //**************************************************************************************************** //fonction principal //**************************************************************************************************** echo'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'; echo'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >'; // connection à la base de donnée mysql_connect($db_domaine, $db_login, $db_MDP); $select_base = mysql_select_db("phpboost"); if (!$select_base) { echo "<font color="#CC0000"><b>Mauvaise configuration!!! </b></font><br> Vérifiez que votre login et mot de passe sont bien saisis pour la connexion à la base <b>$base</b>"; } else { echo "<font color="green">Vous avez réussi à vous connecter correctement à votre base de données <b>$db_domaine</b></font><br />"; nettoyageEnregistrements($supprimerLienMort); repertoireVersBaseDonnee($liaison_rep1, $rep1, $domaine, $idCatEnCour, $description); MAJNbFichierParCategorie(); mysql_close(); echo'</html>'; } ?>
Cordialement,
Greg
Envie de faire la fête ==>www.smsparty.fr
Greg
Envie de faire la fête ==>www.smsparty.fr
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie