Pluxml pour une plateforme !

daquaddaquad Member
Bonjour tout le monde,
Bon c'est encore moi !

Voila mon petit soucis, je veux utiliser pluxml pour une plateforme de blogs donc 1 pluxml pour 1 utilisateur. Mais le problème c'est que je veux que la création soit automatique, je m'explique :

1. Un visiteur s'inscrit sur mon site, il remplit le champ "pseudo" (au passage la variable "$pseudo"),
2. Une fois que le formulaire est valider le dossier de départ "envoi/blog" se copie dans "blog/lepseudo".

Savez vous comment faire tout cela par php bien sur ?

Merci de vos réponse.

Réponses

  • Bonsoir,

    Une fonction maison de copie récursive via la primitive PHP "copy" : http://fr.php.net/copy
  • daquaddaquad Member
    août 2008 modifié
    Merci !
    Mais ce que je ne sais pas faire, c'est d'intégrer la variable $pseudo dans le répertoire final car quand je met :

    'blog/'.$pseudo.'/'

    Mais ça ne marche pas !

    Aidez moi s'il vous plait !
  • Bonjour,

    Pouvez vous nous coller ici votre script (dans des balises code punbb) ?
  • daquaddaquad Member
    août 2008 modifié
    Voici la page de mon code , la fonction copy se trouve a la fin car la page est séparée en deux.
    1er partie : Le formulaire
    2eme partie : Page de remerciement + copy
    <?php 
    
    include('user_verif.php');
    
    
    //-------------------------
    // Redirection si connecté
    //-------------------------
    
    if( AUTH_ID )
    {
      header( 'Location: ' . URL_LOGIN );
    
      exit;
    }
    
    
    //---------------------------------------
    // Affichage du formulaire d'inscription
    //---------------------------------------
    
    if( empty( $_GET['action'] ) and empty( $_POST['action'] ) )
    {
      //Affichage du formulaire d'inscription
      //Pour les utilisateurs avertis, Vous pouvez modifier les lignes
      //ci-dessous (comprises entre les commentaires)
      ?>
    
    	<!-- Début du Formulaire -->
    
    	<html>
    
    	<head>
    	<title>... | Inscritpion</title>
            <link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" />
    	<link rel="stylesheet" type="text/css" href="style.css" media="screen" />
    	</head>
    
    	<body>
            <div id="navigation">
    <ul class="menu1">
    <li><a href="index.html"><b>ACCUEIL</b></a></li>
    <li><a href="#nogo"><b>NOTRE OFFRE</b></a></li>
    <li><a href="#nogo"><b>DEMO</b></a></li>
    <li><a href="#nogo"><b>PARTENAIRES</b></a></li>
    <li><a href="#nogo"><b>LA VILLE</b></a></li>
    <li><a href="#nogo"><b>CONTACT</b></a></li>
    <li class="current"><a href="user_create.php"><b>INSCRIPTION</b></a></li>
    <li><a href="user_login.php"><b>CONNEXION</b></a></li>
    </ul>
    </div>
    <div class="content">		
    	<div id="cot1">
    	<h2>INFORMATIONS</h2>
            <span style="color:#CC3333">...</span>
    	</div>
    	<div id="base">
    <center style="font-family: Verdana; font-size: 10pt;">
    	<?php report_disp(); ?>
    	<form action="user_create.php" method="post">
    <br><br>
    	  <input type="hidden" name="action" value="add">
    	  <label>Pseudo :    <input type="text" name="pseudo"></label>
    	  <br><br>
    	  <label>Password : <input type="password" name="password"></label>
    	  <br>
    	  <label>Confirmer : <input type="password" name="password1"></label>
    	  <br><br>
    	  <label>E-mail :      <input type="text" name="email"></label>
    	  <br><br>
    	  <input type="submit" name="send" value="S'inscrire">
    	</form>
    	<?php ($cfg['config']['crypt_md5'] == 1); ?>
            <br><?php echo ( $cfg['config']['crypt_md5'] == 1 ) ? '<br/><font style="color: '. $cfg['style']['crypt_color'] .'"></font>' : ''; ?>
    	</center>
            </div>
    	<div id="cot2">
    	</div>
    	<div id="footer">B
    	<div class="right">© Copyright 2008, ... </div>
    	<a href="http://validator.w3.org/check?uri=referer" title="Validate">XHTML</a> - <a href="http://jigsaw.w3.org/css-validator/check/referer" title="Validate">CSS</a>
    	</div>
    </div>
    
    	</body>
    
    	</html>
    
    	<!-- Fin du Formulaire -->
    
      <?php
    
      exit;
    }
    
    
    //-------------------------------
    //Création du membre dans la BDD
    //-------------------------------
    
    elseif( !empty( $_POST['action'] ) and $_POST['action'] == 'add' )
    {
    
      /* ETAPE 1: Formatage des variables */
    
        //Déclaration et Vérification de la conformité des variables
    
        $pseudo = strip_tags ( $_POST['pseudo'] );
    
        $password = strip_tags ( $_POST['password'] );
    
        $password1 = strip_tags ( $_POST['password1'] );
    
        $email = strtolower ( $_POST['email'] );
    
    
        if( empty( $pseudo ) or empty( $password ) or empty( $email ) )
        {
          report( $cfg['message']['no_champs'] );
    
          exit( header( 'Location: ' . URL_CREATE ) );
        }
    
    
        //Pseudo: longueur mini
    
        if( strlen( $pseudo ) < $cfg['config']['pseudo_minlen'] and $cfg['config']['pseudo_minlen'] != 0 )
        {
          report( str_replace('%min%', $cfg['config']['pseudo_minlen'], $cfg['message']['pseudo_minlen']), '' );
        }
    
    
        //Pseudo: longueur maxi
    
        if( strlen( $pseudo ) > $cfg['config']['pseudo_maxlen'] and $cfg['config']['pseudo_maxlen'] != 0 )
        {
          report( str_replace('%max%', $cfg['config']['pseudo_maxlen'], $cfg['message']['pseudo_maxlen']), '' );
        }
    
    
        //Password: longueur mini
    
        if( strlen( $password ) < $cfg['config']['pass_minlen'] and $cfg['config']['pass_minlen'] != 0 )
        {
          report( str_replace('%min%', $cfg['config']['pass_minlen'], $cfg['message']['pass_minlen']), '' );
        }
    
    
        //Password: longueur maxi 
    
        if( strlen( $password ) > $cfg['config']['pass_maxlen'] and $cfg['config']['pass_maxlen'] != 0 )
        {
          report( str_replace('%max%', $cfg['config']['pass_maxlen'], $cfg['message']['pass_maxlen']), '' );
        }
    
    
        if( !empty( $_SESSION['report'] ) )
        {
          exit( header( 'Location: ' . URL_CREATE ) );
        }
    
    
    
    
        if( $password != $password1 )
        {
          report( $cfg['message']['no_passconf'] );
    
          exit( header( 'Location: ' . URL_CREATE ) );
        }
    
    
    
      /* ETAPE 2: Traitement sur BDD */
    
        //Connexion à la base de donnée
    
          $sql->open();
    
    
        //On vérifie que le pseudo n'existe pas déja
    
          $res = $sql->query("SELECT * FROM $sql_table WHERE pseudo='$pseudo'");
    
          if ( mysql_num_rows($res) == 1 )
          {
    	report( $cfg['message']['pseudo_exist'] );
    
    	exit( header( 'Location: ' . URL_CREATE ) );
          }
    
    
        //Création d'un id aléatoire
    
          $char = 'abcdefghijklmnopqrstuvwxyz0123456789';
    
          srand(time()); $id = '';
    
          for( $i=0; $i<20; $i++ )
          {
            $id .= substr($char,(rand()%(strlen($char))),1);
          }
    
    
        //Cryptage du mot de passe (selon cfg)
    
          $password = ( $cfg['config']['crypt_md5'] == 1 ) ? md5( $password ) : $password;
    
    
        //Définition de l'activation du compte (selon cfg)
    
          $activ = ( $cfg['config']['log_user'] == 1 ) ? 'non' : 'oui';
    
    
        //Récupération de la date
    
          $register_date = date("d/m/Y H:i");
    
    
        //Insertion du nouveau membre et de son profil dans la BDD
    
          $sql->query("INSERT INTO $sql_table (pseudo,password,email,rang,id,register_date,activ) VALUES('$pseudo','$password','$email','1','$id','$register_date','$activ')");
    
    
        //Fermeture de la connexion à la BDD
    
          $sql->close();
    
    
      /* ETAPE 3: Confirmation */
    
        //Envoi du mail de confirmation si la fonction est activée
    
          $ac = array('non' => 'Désactivé', 'oui' => 'Activé' );
    
          $replace = array('pseudo' => $pseudo, 'email' => $email, 'password' => $password1, 'id' => $id, 'regdate', $register_date, 'activ' => $activ, 'activate' => $ac[$activ] );
    
          foreach( $replace as $key => $var )
          {
            $cfg['message']['mail_msg'] = str_replace('%'.$key.'%', $var, $cfg['message']['mail_msg']);
          }
    
    
          if( $conf_mail == '2' )
          {
    	include('config/protomail/lib.protomail.php');
    
    	protomail( $email, $cfg['message']['mail_subject'], $cfg['message']['mail_msg'] );
          }
    
          elseif( $conf_mail == '1' )
          {
    	mail( $email, $conf_email_subject, $conf_email_msg );
          }
    
    
      //------------------------------
      // Affichage de la confirmation
      //------------------------------
      ?>
    
        <html>
    
        <head>
        <title>... | Inscritpion</title>
        <link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" />
        <link rel="stylesheet" type="text/css" href="style.css" media="screen" />
        <META HTTP-EQUIV="refresh" CONTENT="<?php echo $cfg['config']['register_timer']; ?>; URL='user_config.php'">
        </head>
    
        <body>
    <div id="navigation">
    <ul class="menu1">
    <li><a href="index.html"><b>ACCUEIL</b></a></li>
    <li><a href="offre.html"><b>NOTRE OFFRE</b></a></li>
    <li><a href="#nogo"><b>DEMO</b></a></li>
    <li><a href="#nogo"><b>PARTENAIRES</b></a></li>
    <li><a href="#nogo"><b>LA VILLE</b></a></li>
    <li><a href="#nogo"><b>CONTACT</b></a></li>
    <li class="current"><a href="user_create.php"><b>INSCRIPTION</b></a></li>
    <li><a href="user_login.php"><b>CONNEXION</b></a></li>
    </ul>
    </div>
    <div class="content">		
    	<div id="cot1">
            </div>
            <div id="base">
          <center style="font-family: Verdana; font-size: 10pt;">
          <br /><br />
          <?php echo $cfg['message']['register_conf']; ?>
          <br/><br />
          Félicitation ! Votre blog a été crée avec succès.<br/><br/>
          Vous pouvez y accéder pour l'instant par cette adresse : blogaix.com/blog/<?php echo $pseudo ?><br/><br/>
          D'ici 12 Heures environ votre blog sera : <?php echo $pseudo ?>.blogaix.com <br/><br/>
          Plus court non ?
          <br/>
          <br/>
    
          <?php
    
          if( $cfg['config']['mail_type'] == 1 )
          {
    	echo $cfg['message']['mail_sent'] . '<br/><br/>';
          }
    
          elseif( $cfg['config']['mail_type'] == 2 )
          {
    	echo $cfg['message']['mailt_sentproto'] . '<br/><br/>';
          }
    
          ?>
    
        </center>
    </div>
    	<div id="cot2">
    	</div>
    	<div id="footer">
    	<div class="right">© Copyright 2008, ... </div>
    	<a href="http://validator.w3.org/check?uri=referer" title="Validate">XHTML</a> - <a href="http://jigsaw.w3.org/css-validator/check/referer" title="Validate">CSS</a>
    	</div>
    </div>
        </html>
    </body>
    <?php
     function create_tab ($dir) { // fonction creant le tableau contenant les repertoires et fichiers
    $dir = rtrim ($dir, '/'); // on vire un eventuel slash mis par l'utilisateur de la fonction a droite du repertoire
     if (is_dir ($dir)) // si c'est un repertoire
     $dh = opendir ($dir); // on l'ouvre
     else {
     echo $dir, ' n\'est pas un repertoire valide'; // sinon on sort! Appel de fonction non valide
     exit;
     }
    while (($file = readdir ($dh)) !== false ) { //boucle pour parcourir le repertoire
     if ($file !== '.' && $file !== '..') { // no comment
     $path =$dir.'/'.$file; // construction d'un joli chemin...
    if (is_dir ($path)) { //si on tombe sur un sous-repertoire
     $tableau[$dir]['dir'][] = $path;
    $tabTmp = create_tab ($path); // appel recursif pour lire a l'interieur de ce sous-repertoire
     if (is_array ($tabTmp) && is_array ($tableau))
     $tableau = array_merge ($tableau, $tabTmp);
     }
     else
     $tableau[$dir]['file'][] = $path;
    }
     }
     closedir ($dh); // on ferme le repertoire courant
     if (isset ($tableau)) {
     return $tableau;
     }
    }
    
      function copier_rep ($destination, $reps, $tableau_dir = array ()) { // fonction pour copier repertoire : on cree un repertoire de meme nom, puis on va chercher les fichiers, et on les copie. Si il y a des sous repertoires, appel recursif.
     if (empty ($tableau_dir)) {
     echo 'Votre Blog a été crée avec succés !';
     $tableau_dir = create_tab ($reps);
     }
     if (!is_array ($reps)) {
     $reps = array ($reps);
     }
     foreach ($reps as $rep) {
     if (!is_dir ($destination.'/'.basename ($rep))) {
    mkdir ($destination.'/'.basename ($rep));
     if (!empty ($tableau_dir[$rep]['file']) && isset($tableau_dir[$rep]['file']) && is_array ($tableau_dir[$rep]['file'])) {
     foreach ($tableau_dir[$rep]['file'] as $fichier) {
      rename ($fichier, $destination.'/'.basename ($rep).'/'.basename ($fichier));
     }
     }
     if (!empty ($tableau_dir[$rep]['dir']) && isset ($tableau_dir[$rep]['dir']) && is_array ($tableau_dir[$rep]['dir'])) {
     copier_rep ($destination.'/'.basename ($rep), $tableau_dir[$rep]['dir'], $tableau_dir);
    }
     }
    }
     }
    
    copier_rep ('blog/'.$pseudo.'/', 'envoi/blog/'); // 1er paramètre : le répertoire de destination sous forme d'une chaine
     // 2d paramètre : le répertoire à copier sous forme d'une chaine ou d'un tableau
    ?>
    <?php
    
      session_destroy();
    
      exit;
    }
    
    else
    {
      header( 'Location: ' . URL_CREATE );
    
      exit;
    }
    ?>
    
  • ça pourrait etre interessant un systeme multiblog avec pluxml, si on arrive à ce resultat on pourra faire grand bruit!
  • Oui pourquoi pas !
    Mais il faut au départ développer la fonction copy selon le pseudo du membre.
    Quelqu'un sait quel problème y a t-il dans mon code ?
  • Pas un seul message d'erreur ?
    Je n'ai pas trop le temps de regarder ce bout de code mais essaies d'aborder ce problème par étapes.
    Ta configuration PHP permet d'afficher les erreurs ?
  • Oui ma configuration permet d'afficher les erreurs mais je pense que l'erreur vient de plus haut !
    Donc je vais me débrouiller .

    Merci quand même.
  • Salut, je m'incruste.
    Il y a quelques temps j'ai monté une plateforme de blog (qui n'a pas marché mais le problème est pas là et c'était sur du lifetype). Un point très important à prendre en compte dans ton projet daquad est la mise à jour de pluxml. Comment va tu procéder ? Le faite de copier une version de pluxml par utilisateur est une bonne idée mais tu va te prendre la tête le jour ou tu va devoir mettre à jour pluxml, si tu dois le faire répertoire par répertoire ça va pas être pratique.

    A la limite faut bien étudier le fonctionnement de pluxml. Les répertoires à ne pas modifier pour ta mise à jour sont core/conf core/xml core/xmlcom images/. Il est possible qu'il y en ai d'autres.

    Autre problème, les templates, un répertoire commun ou alors chaque utilisateur aura sont répertoire ?

    Le gros avantage de pluxml (et variante) est ça légèreté et ça facilité de modification. Comme il y a pas de base de données tu est tranquil au niveau temps d'occupation cpu pour une requête. Au contraire, comment va réagir pluxml pour un blog qui génère beaucoup de trafic, il va falloir un serveur réactif au niveau temps d'accès disques dur.
    Par exemple, pour un projet à base de MyPluXml je gère un blog qui contient ~ 200 articles mais pour le moment il y a que ~ 30 visiteurs/jours. Mais dans l'état le serveur n'est pas KO quand j'ouvre la page d'accueil avec 10 articles affiché par défaut.

    Voila un petit retour d'expérience qui pourra peut être te servir.

    J'ai un string de l'array

  • daquaddaquad Member
    août 2008 modifié
    Merci de ton aide !

    Comment as tu réussi à faire tourner une plateforme avec lifetype ? Car je l'ai testé mais ce qui me gène beaucoup c'est qu'il n'y a pas de création automatique de blog, c'est obligatoirement l'admin qui doit rentrer les blogs !

    Pour ce qui est des templates j'avais pensé de les mettre en commun mais je ne sais pas modifier le répertoire de base des templates !

    Niveau mise à jour je ne la proposerait pas aux anciens utilisateurs mais aux nouveaux inscrits.

    Ce que je me doutait bien entendu c'est la bande passante : j'ai actuellement 1000 Go de Bp/mois pour 10 Go de disque voila.
  • Lifetype... De mémoire la création de blog via un formulaire est intégré, il suffit juste d'autoriser dans ta partie admin l'inscription.

    Je reviens sur la mise à niveau des copies de pluxml pour chaque utilisateur. Si il y a une correction de sécurité à faire ? Si il y a de nouvelles fonctions ? En plus niveau support tu va avoir plusieurs versions à maintenir et déjà qu'une c'est pas simple.

    La bande passante, le mieux est de trouver une hébergeur qui ne te limite pas en transfert/mois et le plus simple est que tu ai ton propre serveur.

    Réfléchi bien avant de te lancer, car si ta plateforme marche du tonnerre de dieu en terme de visiteur, un mauvais choix technique ou de structure peut vite devenir handicapant.

    J'ai un string de l'array

  • Ok merci de tes conseils !
  • Bonsoir tout le monde !

    Me revoici avec mes problèmes, je sais c'est agaçant !

    Donc voilà, j'ai trouver la solution pour pouvoir contrôler tous les blogs par mon site principal, en fait j'ai d'abord les membres qui s'inscrivent sur mon site (stocké dans une bdd), leur répertoire est créer blog/pseudo/...

    J'aimerais savoir comment faire sauter la connexion de chaque blog et que la connexion se fasse sur mon site directement pour qu'ils puissent le diriger par celui-ci ! Le gros problème c'est que s'y connaissent un peu ils pourront accéder à l'administration des autres blogs, ce que je ne veux pas !

    Avez vous une idée de comment faire ?

    Merci d'avance.
  • Salut,
    si je comprend bien tes membres sont stocké dans une base de données propre à ton site. Une fois le blog d'un membre créé ce n'est pas la "base" xml qui est utilisé pour authentifié le membre mais ta base à toi ?

    J'ai un string de l'array

  • Voila !
    Il faut que chaque membre est son blog.
    Mais la connexion se fait par ma base de donnée.
  • Bonjour,

    Par variable de session unique par membre ?
    $_SESSION
  • Il y a quand même un problème.
    Je suis un membre, je me connecte via un formulaire autre que celui de pluxml, je suis redirigé vers l'admin de mon blog. Jusque la c'est ok, mais comme tu l'a dit si je suis bricoleur je repère l'url et je modifie l'url pour atteindre la page admin d'un autre blog.

    Comment rattacher la variable $_SESSION["login_user"] à l'admin d'un seul blog ?

    Ca me parait complexe à mettre en place et je ne comprend pas pourquoi le système par défaut d'authentification de pluxml ne te convient pas ?

    J'ai un string de l'array

  • Bien évidement chaque blog doit avoir sa propre variable de session.
    Par exemple si le blog est à l'adresse http://blog.toto.com/marama, il faut que dans le code de pluxml coté admin tu contrôles pour l'identification que la variable $_SESSION existe.
Connectez-vous ou Inscrivez-vous pour répondre.