Bonsoir, je m'excuse encore pour le retard, j'espère que je ne vous ai pas trop fait attendre. Bref, j'ai fini d'implémenter les fonctions principales : création, suppression, modification. J'avais ajouté une fonction de chiffrement qui permet de crypter les données enregistrées dans les fichiers où sont stockés les textes, mais j'ai eu quelque problèmes avec Firefox, mais sur Opera il n'y a pas de problème. Bref, je vous donne la version sans chiffrement, et j'essaierai de résoudre ce problème dès que possible. Donc le système est très simple, vous avez une administration à la quelle vous pouvez accéder par un mot de passe, que vous pouvez définir dans une variable dans le fichier admin.php; Une fois connectés, vous pouvez créer, modifier, supprimer des contenus qui sont composés de leur id et du texte. Pour réutiliser des contenus dans vos fichiers .php, il suffit d'écrire cette ligne de code : <?php
echo readContent(<l'id du contenu défini lors de la création>);
?>
Voici le fichier à inclure dans vos fichiers *.php : contentHandler.lib.php (si vous avez d'autres noms je suis preneur )
<?php
/* Crée par Daron le 04/09/2011 */
/* This work is licensed under the Creative Commons Paternité - Pas d'Utilisation Commerciale - Partage à l'Identique 2.0 France License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. */
// Création du dossier ./content if(!opendir("./content")) mkdir("./content", 0777);
// Crypte le contenu function cryptContent($foo) { $key = "zgd4kl09"; $ivSize = mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND); return base64_encode(mcrypt_encrypt(MCRYPT_XTEA, $key, $foo, MCRYPT_MODE_ECB, $iv)); } // Décrypte le contenu function uncryptContent($foo) {
$foo = base64_decode($foo); $key = "zgd4kl09"; $ivSize = mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND); $uncrypt = mcrypt_decrypt(MCRYPT_XTEA, $key, $foo, MCRYPT_MODE_ECB, $iv); return substr($uncrypt, 0, strlen($uncrypt) - 2); }
// Crée un contenu function createContent($id, $content) { if(!file_exists("./content/" . $id . ".content")) { // Ouverture du fichier en mode écriture $fp = fopen ("./content/" . $id . ".content", "w"); // On enregistre le contenu $content = cryptContent($content); if(fputs ($fp, $content)) $status = true; else $status = false; fclose ($fp); } else { $status = false; } return $status; }
// Modifie le contenu function updateContent($id, $antId, $newContent) { // Ouverture du fichier en mode écriture $error = '<p>Une erreur est survenue lors de la modification du contenu.</p>'; if($id == $antId) { if(!$fp = fopen ("./content/" . $id . ".content", "w")) return $error; } else { if(!$fp = fopen ("./content/" . $id . ".content", "w")) return $error; // Suppression de l'ancien fichier unlink("./content/" . $antId . ".content"); } // On enregistre le nouveau contenu $newContent = cryptContent($newContent); if(fputs ($fp, $newContent)) return true; else return false; fclose ($fp); }
// Supprime le contenu function deleteContent($id) { $fileName = "./content/" . $id . ".content"; if(file_exists($fileName)) { unlink($fileName); return true; } else return false; }
// Lit le contenu function readContent($id) { $error = '<p>Une erreur est survenue lors de la lecture du contenu</p>'; $content = ''; if(!$fp = fopen ("./content/" . $id . ".content", "r")) return $error; else { while(!feof($fp)) { $content .= fgets ($fp, 4096); } fclose ($fp); return trim(uncryptContent($content)); }
}
?>
Ou une version plus légère : lightCH.lib.php à inclure dans vos fichiers *.php (vous devez tout de même avoir le fichier contentHandler.lib.php pour l'inclure dans le fichier admin.php)
<?php
/* Crée par Daron le 04/09/2011 */
/* This work is licensed under the Creative Commons Paternité - Pas d'Utilisation Commerciale - Partage à l'Identique 2.0 France License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. */
// Création du dossier ./content if(!opendir("./content")) mkdir("./content", 0777);
// Décrypte le contenu function uncryptContent($foo) {
$foo = base64_decode($foo); $key = "zgd4kl09"; $ivSize = mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND); $uncrypt = mcrypt_decrypt(MCRYPT_XTEA, $key, $foo, MCRYPT_MODE_ECB, $iv); return substr($uncrypt, 0, strlen($uncrypt) - 2); }
// Lit le contenu function readContent($id) { $error = '<p>Une erreur est survenue lors de la lecture du contenu</p>'; $content = ''; if(!$fp = fopen ("./content/" . $id . ".content", "r")) return $error; else { while(!feof($fp)) { $content .= fgets ($fp, 4096); } fclose ($fp); return trim(uncryptContent($content)); }
}
?>
Et voici le fichier admin.php : <?php
session_start();
// Ecrivez ici votre mot de passe $S_PASSWORD = 'VOTREMOTDEPASSE';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Gestion de contenu</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <?php
if(!isset($_SESSION['connected'])) { if(isset($_POST['pass'])) { $pass = $_POST['pass']; if($pass == $S_PASSWORD) { $_SESSION['connected'] = 1; } else { echo '<p>Mot de passe erroné.</p>'; } } else { ?> <form method="post"> <label for="pass" >Mot de passe : </label><input name="pass" id="pass" type="password"/> <input type="submit" value="Connexion"/> </form> <?php } }
if(isset($_SESSION['connected'])) {
include('contentHandler.lib.php'); ?> <h1>Administration du contenu</h1> <ul> <li><a href="admin.php?act=1">Créer un contenu</a></li> <li><a href="admin.php?act=0">Liste des contenus</a></li> <li><a href="logout.php">Se déconnecter</a></li> </ul> <?php // ADMIN if(isset($_POST['c_id_create']) AND isset($_POST['c_content_create'])) { $c_id = htmlentities($_POST['c_id_create']); $c_content = $_POST['c_content_create']; if(empty($c_id)) { $c_id = 'SansTitre-0'; } if(createContent($c_id, $c_content)) { echo 'Votre contenu a bien été enregistré <br />'; echo '<span style="font-weight: bold;">' . $c_id . '</span> : ' . $c_content; } else echo '<p>Vous ne pouvez pas utiliser deux fois le même id pour deux contenus.</p>'; }
else { // TAILLE DE L'EXTENSION DES FICHIERS $extSize = strlen('.content'); if(isset($_GET['act'])) $act = (int)($_GET['act']); else $act = 0; // LISTE DES CONTENUS if($act == 0) { echo 'Liste des contenus :'; $dirname = './content/'; $dir = opendir($dirname); echo '<ul>'; $i = 0; while($file = readdir($dir)) { if($file != '.' && $file != '..' && !is_dir($dirname.$file)) { $c_id = substr($file, 0, -$extSize); echo '<li><a href="admin.php?act=4&c_id=' . $c_id . '">' . $file . '</a> | <a href="admin.php?act=2&c_id=' . $c_id . '">MODIFIER</a> | <a href="admin.php?act=3&c_id=' . $c_id . '">SUPPRIMER</a></li>'; $i++; } } echo '</ul>'; if($i == 0) { echo '<p>Il n'y a aucun contenu enregistré.</p>'; } closedir($dir); } // CREATION DE CONTENU else if($act == 1) { ?> <form method="post"> <label for="c_id_create">Identificateur (nombre ou simple titre sans accents)</label><br /> <input type="text" name="c_id_create" id="c_id_create" /> <br /> <br /> <label for="c_content_create">Contenu</label><br /> <textarea name="c_content_create" id="c_content_create"></textarea><br /> <input type="submit" value="Enregistrer" /> </form> <?php } // MODIFICATION D'UN CONTENU else if($act == 2 AND isset($_GET['c_id'])) { $cPastId = htmlentities($_GET['c_id']); if(isset($_POST['c_id_update']) AND isset($_POST['c_content_update'])) { $c_id = htmlentities($_POST['c_id_update']); $newContent = htmlentities($_POST['c_content_update']); if(updateContent($c_id, $cPastId, $newContent)) echo '<p>Le contenu a bien été modifié.</p>'; } else { ?> <form method="post" action="admin.php?act=2&c_id=<?php echo $_GET['c_id']?>"> <label for="c_id_update">Identificateur (nombre ou simple titre sans accents)</label><br /> <input type="text" name="c_id_update" id="c_id_update" value="<?php echo $_GET['c_id']; ?>"/> <br /> <br /> <label for="c_content_update">Contenu</label><br /> <textarea name="c_content_update" id="c_content_update"><?php echo readContent($_GET['c_id']); ?></textarea><br /> <br /> <br /> <input type="submit" value="Enregistrer" /> </form> <?php } } // SUPRESSION D'UN CONTENU else if($act == 3 AND isset($_GET['c_id'])) { $c_id = htmlentities($_GET['c_id']); if(deleteContent($c_id)) echo '<p>Le contenu : " ' . $c_id . ' " a bien été supprimé.</p>'; else echo '<p>Le contenu que vous essayez de supprimer n'existe pas.</p>'; }
else if($act == 4 AND isset($_GET['c_id'])) { $c_id = htmlentities($_GET['c_id']); echo '<h2>CONTENU : ' . $c_id . '</h2>'; echo '<p style="border-top: 1px solid black; text-decoration: underline;">' . readContent($c_id) . '</p>'; } else { $act = 0; } }
}
?> </body> </html>
Et enfin le fichier logout.php : <?php
session_start();
if(isset($_SESSION['connected'])) { session_destroy(); echo '<p>Vous êtes bien déconnecté, à bientôt.</p>'; echo '<p><a href="admin.php">Revenir à l'administration</a></p>'; }
else { header('Location: admin.php'); }
?>
Voilà, j'espère que ce petit script vous sera utile, et faites en bon usage, pour la licence j'ai pris celle qui me convenait mais si vous avez des conseils, ou des exigences je pourrais la changer. Peut être que j'améliorerai ce petit script, il ne tient qu'à vous de me demander des fonctionnalités en plus, et j'essaierai aussi de l'habiller avec un belle CSS. P.S. : Si vous avez des bugs, n'hésitez pas à m'en faire part, j'essaierai de réagir au plus vite. Daron. |