[RESOLU] Modification d'un fichier en PHP

Modification d'un fichier en PHP [RESOLU] - PHP - Programmation

Marsh Posté le 20-05-2011 à 10:05:54    

Bonjour,
 
J'ai un besoin de dev et je voudrais savoir si c'était techniquement faisable.
 
Créer formulaire en PHP avec une method post pour récupérer une variable taper dans un champ input, récupérer cette variable, l'intégrer dans un bash, puis exécuter ce bash.
 
Tout ceci devrait être fait en cliquant sur un bouton submit.
 
Je précise que je suis débutant en dev.
 
 
Merci par avance de votre retour  :jap:


Message édité par rainbow78 le 08-06-2011 à 14:30:21
Reply

Marsh Posté le 20-05-2011 à 10:05:54   

Reply

Marsh Posté le 20-05-2011 à 10:22:56    

Oui c'est possible avec la fonction exec de php.

Reply

Marsh Posté le 20-05-2011 à 13:39:43    

Salut, si j'avais à créer ce genre de script, je procéderai ainsi.
 
Tu code ton script bash dans un fichier. Ensuite tu édite le fichier en question avec fopen(), tu remplace la variable que tu veux via un regex (par exemple), par $_POST[], tu save. Et ensuite, tu lance le script via exec() et le tour est joué ;)
 

Reply

Marsh Posté le 25-05-2011 à 08:42:51    

Donc pour exécuter mon script bash je devrais peocéder de la manière suivante non ?
<?php
exec('/var/www/script.sh')
?>
 
Le problème c'est que ça ne donne rien ...

Reply

Marsh Posté le 25-05-2011 à 08:57:52    

ya de bonnes chances que tu puisses faire directement en php ce que fait ton bash, non? C'est quoi le bénef de mettre à jour ton script bash et de l'exécuter??


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 25-05-2011 à 08:58:48    

...et sinon, au lieu de mettre à jour ton script bash il serait probablement judicieux de le modifier pour qu'il prenne ta variable en paramètre...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 25-05-2011 à 09:13:09    

Merci de ton retour, il y a effectivement la fonction shell_exec qui me permettra de simplifier ce que je veux faire.
 
Donc je récupère direct ma variable rentré dans mon formulaire et je l'intègre dans mon shell_exec c'est bien ça ?

Reply

Marsh Posté le 25-05-2011 à 09:15:21    

Mais il fait quoi, ton script bash? :??:


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 25-05-2011 à 09:24:13    

je veux insérer des serveurs dans mon fichier de conf nagios pour les superviser à l'aide du formulaire PHP.

Reply

Marsh Posté le 25-05-2011 à 09:25:06    

Je réitère donc ma question initiale : pourquoi faire ça en bash et pas directement en php? :??:


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 25-05-2011 à 09:25:06   

Reply

Marsh Posté le 25-05-2011 à 09:27:41    

Mais je ne sais pas si c'est faisable directement en PHP ...
Je sais qu'en bash c'est faisable c'est pour cette raison que je restais sur cette idée.

Reply

Marsh Posté le 25-05-2011 à 09:33:47    

Modifier un fichier en php ne pose pas de problèmes particuliers si tu as les bons droits d'accès...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 25-05-2011 à 09:39:57    

Je t'explique rapidement mon objectif, Je veux rendre la configuration de Nagios (supervision d'un ou plusieurs serveurs) possible en remplissant des champs de formulaire. Les valeurs doivent être stockées dans des variables et intégrées dans du code php (si c'est possible).
 
La finalité de la chose, c'est de permettre à un utilisateur lambda (avec peu  de connaissances en réseau) de configurer son outil nagios pour assurer la supervision de son réseau.
 
Merci d'avance de prendre du temps pour répondre à mes questions ;)


Message édité par rainbow78 le 25-05-2011 à 09:40:35
Reply

Marsh Posté le 25-05-2011 à 09:45:10    

Il n'y a pas de grosse difficulté à première vue : il suffit que ton script php qui traite le formulaire sache lire/écrire dans le fichier de conf nagios...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 25-05-2011 à 09:51:39    

Merci pour ta réponse, je débute en php je vais voir ce que je trouve niveau syntaxe pour permettre la lecture/écriture dans la conf nagios.
 
A plus tard peut être ;)
 
Encore merci  :bounce:

Reply

Marsh Posté le 25-05-2011 à 12:35:44    

Voici l'état de mon fichier pour l'instant


 
<?php
 
$output = shell_exec('
echo "define host{
        use                     generic-host            ; Name of host template to use
        host_name               localhost
        alias                   localhost
        address                 127.0.0.1
        }
 
 
 
define host {
        use                     generic-host
        host_name               'shell_exec('echo $name');'
        alias                   client
        address                 10.10.40.253
}
 
 
 
 
define service {
        use                             generic-service
        host_name                       $(name $name)
        service_description             ping
        check_command                   check_ping!100,20%!500,60%
        notification_interval           1
}
 
 
define service{
        use                             generic-service         ; Name of service template to use
        host_name                       localhost
        service_description             check_http
        check_command                   check_http!127.0.0.1
        notification_interval           1
 
        }
 
 
 
 
 
 
 
" > /etc/nagios3/conf.d/localhost_nagios2.cfg
 
/etc/init.d/nagios3 restart
 
 
 
 
');
 
 
 
echo "$output";
 
?>
 
</body>
</html>


 
Actuellement je fais des tests et ma variable pour le host_name n'est pas correctement reconnu.
 
Comment configurer mon fichier pour que le host_name corresponde à ma variable ?

Reply

Marsh Posté le 25-05-2011 à 12:43:17    

j'ai l'impression que ta des pb avec les ' et "
 
Sinon moi sur mon serveur pour executer des script schell je procede un peu comme ca :
 
$bla="/bin/bash...
cd repertoire
commande shell...";
 
$f=fopen("now.sh","w" );
fputs($f,$bla);
fclose($f);
 
 
$pr=popen("now.sh", 'r');
pclose($pr);

Reply

Marsh Posté le 25-05-2011 à 14:24:36    

Lisez un peu les gars, le mec veut juste faire un echo...
 
Attention, c'est balèze !
 

Code :
  1. <?php
  2.  
  3. $host = '92.35.38.47';
  4.  
  5. $myFile = '/etc/nagios3/conf.d/localhost_nagios2.cfg';
  6.  
  7. $myString = '
  8. define host{
  9.        use                     generic-host            ; Name of host template to use
  10.        host_name               localhost
  11.        alias                   localhost
  12.        address                 127.0.0.1
  13.        }
  14.  
  15.  
  16.  
  17. define host {
  18.        use                     generic-host
  19.        host_name               '.$host.'
  20.        alias                   client
  21.        address                 10.10.40.253
  22. }
  23.  
  24.  
  25.  
  26.  
  27. define service {
  28.        use                             generic-service
  29.        host_name                        '.$host.'
  30.        service_description             ping
  31.        check_command                   check_ping!100,20%!500,60%
  32.        notification_interval           1
  33. }
  34.  
  35.  
  36. define service{
  37.        use                             generic-service         ; Name of service template to use
  38.        host_name                       localhost
  39.        service_description             check_http
  40.        check_command                   check_http!127.0.0.1
  41.        notification_interval           1
  42.  
  43.        }
  44. ';
  45.  
  46. file_put_contents($myFile, $myString, LOCK_EX);
  47.  
  48. $output = shell_exec('/etc/init.d/nagios3 restart');
  49.  
  50. echo $ouput;
  51.  
  52. ?>


 
http://php.net/manual/fr/function. [...] ntents.php


Message édité par CyberDenix le 25-05-2011 à 20:06:36

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 25-05-2011 à 16:56:13    

Hey mais ça peut servir ça !!
 
Thanks je test demain.

Reply

Marsh Posté le 25-05-2011 à 17:58:48    

check que www-data puisse exécuter des scripts d'init sinon tu vas avoir un probleme

Reply

Marsh Posté le 25-05-2011 à 20:07:29    

Note : j'ai édité mon message pour virer le FILE_APPEND du file_put_contents... sinon tu vas avoir des problèmes :P


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 08-06-2011 à 10:07:10    

Bon, après quelques modifs, j'ai réussi à faire ce que je voulais à savoir rajouter les infos que je veux à la fin de mon fichier.
 
Code de mon formulaire à remplir (accueil.php) :

<p>
    <b>Veuillez taper le nom et l'adresse IP du serveur a superviser</b>
</p>
 
<form action="cible.php" method="post">
<p>
        <input type="text" name="hostname" />
        <input type="text" name="ipaddress" />
        <input type="submit" value="Valider" />
</p>
</form>


 
Code de mon fichier qui traite les infos du formulaire (cible.php) :


$file = fopen('/usr/local/nagios/etc/objects/localhost.cfg', 'a+');
$host1 ='
define host{
        use template-host
        host_name ';
$host2 = $_POST['hostname'];
$host3 = '
        alias no_alias
        address ';
$host4 = $_POST['ipaddress'];
$host5 = '
}
';
$host = $host1.$host2.$host3.$host4.$host5;
 
fputs($file, $host, LOCK_EX); //J'ai pas bien compris à quoi sert LOCK mais j'ai gardé ;)
fclose ($file);
?>


Je n'arrivais pas à faire fonctionné la méthode proposé par CyberDenix sur mon serveur, donc j'ai fait mon développeur du dimanche  :whistle:  
 
 
J'arrive bien à rentrer les infos que je veux dans /usr/local/nagios/etc/objects/localhost.cfg qui sont de la forme suivante

define host{
        use template-host
        host_name "hostname"
        alias no_alias
        address "ipaddress"
}


 
Donc tout fonctionne mais il y a un hic.
 
J'ai le fichier /usr/local/nagios/etc/objects/localhost.cfg édité par cible.php qui se met à jour tout seul sans que je fasse quoi que ce soit.
 
http://hfr-rehost.net/self/pic/b0fb9d4e4e3be79f22631bb61a388af77e7931fc.jpeg
 
J'ai l'impression que mon cible.php rentre la variable $host sans $host2 (hostname) et $host4 (ipaddress) même quand je bosse dessus alors que je ne fais strictement rien.
 
Il existe un moyen de bloquer cela, même une solution de contournement ?


Message édité par rainbow78 le 08-06-2011 à 10:09:15
Reply

Marsh Posté le 08-06-2011 à 14:29:27    

En fait je me suis pris la tête pour rien.
 
C'était un de mes fichiers de tests qui foutait la meïrde, tout fonctionne  :o

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed