Enregistrement d'un fichier via interface web

Signaler
Messages postés
7
Date d'inscription
lundi 26 février 2007
Statut
Membre
Dernière intervention
27 février 2007
-
Messages postés
275
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
27 avril 2010
-
Bonjour,

Un ami m'a proposé de venir demander de l'aide ici, suite à mon blocage par rapport à un petit soucis.

ma situation est la suivante : j'ai créé une interface web (php4, mysql4, phpmyadmin et apache2) qui doit gérer un fichier de configuration pour un serveur [ubuntu] (serveur tacacs+, qui est également serveur web donc, avec accès par sql, d'où la présence de ces packages, mais ils ne sont pas importants dans le cas présent), j'ai donc tacacs.conf à modifier par interface web.

Pour modifier un utilisateur, par exemple, vu que tac-plus n'est pas très bien fait je trouve, à avoir un fichier de configuration unique, enfin soit, avec un strpos et des recherche, je suis parvenu à prendre uniquement ce que je voulais dans une textarea, que je peux modifier pour la sauver, avec la partie avant et celle d'après inchangées, jusque là, tout va bien.

Mon soucis vient au niveau du fwrite (file_put_contents() ne passe pas en php4 ^^), du moins je pense : il enregistre bien le fichier à l'emplacement adéquat, mais si j'ai bien analysé le problème, c'est le fwrite qui ajoute aux caractères tels que quote et double quote un antislash.

j'ai conclu ça après avoir essayé la fonction stripslashes(), vu qu'au lieu d'en mettre 3 (vu que quand y en a une il la double, je suppose qu'il le faisait deux fois), il en mettait encore une, et la seule raison qui aurait pu le pousser à le faire, c'est le fwrite.

Me sont venues à l'esprit plusieurs idées :

créer un script bash qui le fait, si c'est possible, et l'appeler via php system() ou shell_exec() ;

utiliser system("echo ".$thetext." > ".$filename); [ qui a effacé mon fichier quand je l'ai essayé...]

ou trouver un moyen de le désactiver dans mon serveur apache : j'ai désactivé les magic quotes, mais ça n'a rien changé.

Voilà, pour en finir, je vous propose mon code (qui ne doit pas être des plus propres d'après ce que je sais, mais je suis un programmeur occasionnel :)) pour que vous y voyiez plus clair. :

<?php
$login=$_POST['nom'];    
$valider=$_POST['valider'];

if ($valider == true)
{
$content=file_get_contents("/etc/tac-plus/tacacs.conf");

$pos = strpos($content, "user ".$login);
$pos2 = strpos($content, "## fin ".$login);
$diff = 5+strlen($login);

$debut = substr($content, 0, $pos+($diff+2)); // 2 pour le retour à la ligne
$user = $_POST['user'];
$str1 = "\n";
$str2 = substr($content, $pos2, strlen($content));
$filename="/etc/tac-plus/tacacs.conf";
$fin = $str1.$str2;
$thetext = $debut.$user.$fin;

 if (is_writable($filename)) {
system("echo ".$thetext." > ".$filename);

//   if (!$handle = fopen($filename, 'w'))
//    {    echo "Impossible d'ouvrir le fichier ($filename)";
//        exit;    }
//   if (fwrite($handle, $debut) == FALSE)
//   {     echo "Impossible d'&eacute;crire dans le fichier ($filename)";
 //         exit;   }
//   if (!$handle = fopen($filename, 'a'))
//    {    echo "Impossible d'ouvrir le fichier ($filename)";
//         exit;    }
//   if (fwrite($handle, $user) == FALSE)
//    {    echo "Impossible d'&eacute;crire dans le fichier ($filename)";
//         exit;    }
//   if (!$handle = fopen($filename, 'a'))
//    {    echo "Impossible d'ouvrir le fichier ($filename)";
//         exit;    }
//   if (fwrite($handle, $fin) == FALSE)
 //   {    echo "Impossible d'&eacute;crire dans le fichier ($filename)";
  //       exit;    }
    
   echo "Configuration sauvegard&eacute;e";
 //  echo $user;
 }
else {
   echo "Le fichier $filename n'est pas accessible en &eacute;criture.";
     }
}
else
 { echo "cochez la case si vous voulez valider vos modifications." ;}
?>

1 réponse

Messages postés
275
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
27 avril 2010
1
Bonjour

Pour les antislash ca doit etre toin serveur qui a le getmagicQuote active
ce que tu peux faire c'est un $_POST['tonchamp']=stripslashes($_POST['tonchamp']) et comme ca plus de \

Par contre pour le fait que tu ais \\\ a mon avis c'est paskle t'avais \ dans ta textarea
si c'est le cas tu peux forcer au moment du chargement dans le textarea un stripmslashes de plus !

Pour ce qui est de fwrite je pense pas que ca ajoute les \ mais bon si les solution ci dessus ne marche pas essaye fputs($fp,$contenu);