Page 1 sur 1

Modification d'un fichier avec un formulaire

Posté : 18 juin 2011, 16:49
par FordPrefect
Bonjour à tous.

Je cherche à modifier un fichier de conf nagios à l'aide d'un formulaire en PHP.
J'arrive à faire les modifs que je souhaite faire mais uniquement avec des champs input mais pas une combinaison de input et select.

Code de mon formulaire à remplir (accueil.php) :
<p>
    <b>Veuillez spécifier le nom et le service du serveur a superviser</b>
</p>
 
<form action="cible2.php" method="post">
<p>
        Nom du serveur<br>
        <input type="text" name="hostname" /><br><br>
        Service a superviser<br>
        <select name="service">
        <option value="check_http">HTTP</option>
        <option value="check_ftp">FTP</option>
        <option value="check_ssh">SSH</option>
        </select>
        <br><br>Verifier que les informations sont justes, puis valider   <input type="submit" value="Valider" />
Code de mon fichier qui traite les infos du formulaire (cible2.php) :

Code du fichier cible2.php
<?php
$file = fopen('/usr/local/nagios/etc/objects/hosts.cfg', 'a+');
$host1 ='
define service{
        use template-services
        host_name ';
$host2 = $_POST['hostname'];
$host3 = '
        service_description ';
$host4 = $_POST['service'];
$host5 = '
        check_command'
$host6 = $_POST['service'];
$host7 = '
}
';
$host = $host1.$host2.$host3.$host4.$host5.$host6.$host7;

fputs($file, $host);
fclose ($file);
shell_exec('sudo /etc/init.d/nagios restart');
?>
Donc je veux modifier mon fichier hosts.cfg en ajoutant à la fin de celui-ci de nouveaux serveurs à superviser de la manière suivante :
define service {
use template-services
host_name 'hostname'
service_description 'service'
check_command 'service'
}
Je pense que ce soit compliquer à faire mais je ne trouve pas la solution, rien ne se passe dans mon fichier hosts.cfg lorsque j’exécute ce code.

Merci pas avance de vos retours :)

Re: Modification d'un fichier avec un formulaire

Posté : 18 juin 2011, 17:25
par moogli
salut,

il te manque la concaténation ;)

avec ça tu comprendra ton soucis et devrais finir ton script :)

@+

Re: Modification d'un fichier avec un formulaire

Posté : 18 juin 2011, 17:34
par epommate2
1. Tu ne sais pas si tu peux écrire dans hosts.cfg
2. Pour écrire de longue chaine avec des saut de ligne, mieux vaut utiliser l'opérateur <<<
3. file_put_contents permet d'écrire directement dans un fichier sans avoir à ce fatiguer avec 3 fonctions
4. Bon, ton script (et le mien) n'est pas du tout sécurisé (avec $_POST, tu peux injecter ce que tu veux dans le fichier )
5. Ton script (et le mien non plus) ne prennent pas en compte le fait de mettre deux fois le même "service" sur le même serveur



$file = '/usr/local/nagios/etc/objects/hosts.cfg';

if (file_exists($file) ){
	if (! is_writable($file)){
		echo "Impossible d'écrire sur $file\n";
		exit;
	}
} else {
	if (! is_writable(dirname($file))){
		echo "Impossible de créer $file\n";
		exit;
	}
}
$config=<<<CONFIG

define service{
        use template-services
        host_name {$_POST['hostname']}
        service_description {$_POST['service']}
        check_command {$_POST['service']}
        }

CONFIG;


file_put_contents($file,$config,FILE_APPEND );