Modification en interne de certaines pages du site

Attention, depuis PHP 5.5.0, certaines extensions SQL sans doute utilisées dans ce tutoriel peuvent être obsolètes et seront supprimées dans le futur, vous devez donc adapter les codes! Exemples ici.
Nous allons maintenant créer une nouvelle page nommé "modifier-site.php" qui va nous permettre de modifier certains fichier directement depuis l'interface admin...ce qui évitera l'utilisation d'un logiciel FTP .
Pour commencer, on ouvre le fichier "fonctions.php" et nous allons ajouter un simple tableau contenant les fichiers que nous nous autorisons à modifier :
//Fichiers autorisés à la modification
$fichier_ok = array('index.php','categorie.php','page1.php','menu.php','footer.php','fonctions.php','style.css','sitemap.php','rss.php','contact.php','recherche.php','404.php','.htaccess','robots.txt','commentaire.php','pagination.php','desabonnement.php');

A ce stade de ce tutoriel beaucoup de fichier présent dans le tableau ci-dessus n'existe pas encore car ce tutoriel sur la création d'un CMS dédié à Free.fr est loin d'être finit..ceci dit, ça vous donnes une vague idée de ce qui reste à mettre encore en place!

Il est à noter également que seul certains fichiers disponibles à la racine du site et uniquement à la racine pourront être modifié de cette façon.

On passe maintenant à la programmation du fichier "modifier-site.php" :
<!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" lang="fr-fr">

<head>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<title>Modification du site</title>
<link href="style.css" rel="stylesheet" type="text/css"/>

</head>

<body>

<div id="moncadre">

<?php include('menu.php');?>

<div class="cadrecentrale">

<h1>Modification du site</h1>
<!-- Code à placer ici-->
</div>

<?php include('footer.php');?>

</div>

</body>

</html>

Nous allons créer un petit peut plus tard un simple formulaire contenant une liste déroulante et un textarea. La liste déroulante aura pour nom "fichier" (name="fichier") et si je vous dit cela, c'est parce que nous allons commencer ce tutoriel par la mise en place d'une sessions qui utilise justement le nom de la liste déroulante.

Avant le DOCTYPE, nous ouvrons une sessions qui va permettre de contrôler le nom du fichier contenu dans le tableau donné plus haut et qui sera transmit soit par la méthode POST soit par la méthode GET. On donne ensuite à la sessions en cours le nom du fichier selon la méthode utilisé (POST ou GET).
<?php
//On ouvre une sessions
session_start();
//On arrive pour la première fois sur la page, donc rien n'est transmit
if(empty($_POST["fichier"]) && empty($_GET["fichier"])){
$_SESSION['fichier'] = "index.php";
}
//Sinon si  la méthode POST est vide, ça passe par la méthode GET
else if(empty($_POST["fichier"])){
    $_SESSION['fichier'] = $_GET["fichier"];
}
//Sinon, la sessions correspond à la méthode POST
else {
    $_SESSION['fichier'] = $_POST["fichier"];
}
//On inclue le fichier des fonctions
include('../fonctions.php');
?>

On passe maintenant au formulaire et nous commençons notre code sous le <h1>.

Nous allons utiliser une boucle foreach() pour sortir tout les élément du tableau $fichier_ok que nous allons ensuite comparer à la sessions en cours pour afficher le tout dans une liste déroulante tout en restant positionné sur le fichier sélectionné :
<p style="text-align:center;font-weight:bold;color:red;">Assurez-vous d avoir une copie des fichiers avant toutes modifications!</p>
<form method="post" action="">
<select name="fichier" onchange="javascript:submit(this)">
<?php
//On boucle sur le tableau $fichier_ok pour le formulaire
foreach($fichier_ok AS $valeur)
{
    echo '<option value="'.$valeur.'"';
    if ($_SESSION['fichier']==$valeur) {echo "selected='selected'";}
    echo '>'.$valeur.'</option>';
}
?>
</select>
<br/>
<br/>

On vérifie ensuite si la sessions existe pour continuer et on avertit le webmaster par un message si il souhaite modifier le fichier des fonctions (fonctions.php) :
<?php
//Si la session existe
if(isset($_SESSION['fichier'])){
if($_SESSION['fichier'] == "fonctions.php"){
echo '<div class="erreur">Attention : Si vous supprimez un dossier de la variable «$dossier_interdit» et que vous créez ou renommez une catégorie avec un nom de dossier existant sur votre serveur, celui-ci sera effacé ou supprimé ou remplacé et provoquera une erreur!</div>';
}

On vérifie si le fichier sélectionné existe :
    //Si le fichier n'existe pas
    if(!file_exists('../'.$_SESSION['fichier'].'')){
        echo '<div class="erreur">Le fichier '.$_SESSION['fichier'].' n\'existe pas à la racine du site!</div>';
    }

On vérifie si le fichier sélectionné fait partie des fichiers autorisés à la modification :
    //Si le fichier ne fait pas partie de la liste $fichier_ok
    else if(!in_array($_SESSION['fichier'] , $fichier_ok)){
        echo '<div class="erreur">Ce fichier est interdit d\'accès</div>';
    }

Tout les contrôle sont passés, on va à présent ouvrir le fichier, le placer dans un simple textarea, lire tout les lignes du fichier pour qu'il soit affiché entièrement, fermer le fichier et terminer le formulaire :
    //Tout semble ok   
    else{
        //r+ » Ouvre le fichier en lecture et écriture et place le pointeur au début du fichier.
        $fichier_a_ouvrir = fopen ('../'.$_SESSION['fichier'].'', "r+");
        echo '<form action="" method="post">     <textarea name="modif" rows="40" cols="95">';
        /*On boucle et tant que l'on n'est pas à la fin du fichier, on continue de le lire.         La fonction feof vérifie si on se trouve à la fin du fichier.*/
        while(!feof($fichier_a_ouvrir))
        {
            $contenu_du_fichier = fgets($fichier_a_ouvrir, 1024);
            //Affichage du contenu dans un textarea
            echo htmlspecialchars($contenu_du_fichier);
        }
        echo '</textarea>';
        //On ferme le fichier
        fclose ($fichier_a_ouvrir);
        echo '<input name="Valider" value="Valider" type="submit"/> <input name="Effacer" value="Effacer" type="reset"/> <form>';

A ce stade, le fichier au complet est stocké dans la variable $_POST["modif"] qui correspond au nom du textarea (name="modif") et toute modification du fichier sera donc stocké dans cette même variable.

Si l'action de valider a été faite, on ouvre de nouveau le fichier, on l'efface puis on ré écrit le fichier par l'intermédiaire de la variable $_POST["modif"] :
        //Si action de valider
        if(isset($_POST["Valider"])){
            //On ouvre le fichier et on l'efface
            $fichier_a_ouvrir = fopen ('../'.$_SESSION['fichier'].'', "w+");
            //On écrit dans le fichier ce que contient le textarea
            fwrite($fichier_a_ouvrir,"".stripcslashes($_POST["modif"])."");
            //on ferme
            fclose ($fichier_a_ouvrir);

Pour que la modification du fichier soit bien prise en compte et surtout que l'on puisse le voir directement, on effectue une petite redirection par Javascript qui nous redirige vers ce même fichier :
            //On redirige pour que la modification soit bien prise en compte
            echo '<script type="text/javascript"> window.setTimeout("location=(\'modifier-site.php?fichier='.$_SESSION['fichier'].'\');",10) </script>';
        }   
    }
}
else{
    echo '<b>Sélectionnez un fichier</b>';
}
?>

Et voila, vous pouvez maintenant modifier certains fichiers sans être obligé d'utiliser un logiciel FTP. Cependant faite très attention si vous ajoutez des éléments au tableau $fichier_ok, le ou les nouveaux fichiers doivent absolument se trouver à la racine du site.

Modification de certaines pages du site
Voir/déposer un commentaire (8) | Signaler un problème