Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1264 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU] Modification d'un fichier en PHP

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Modification d'un fichier en PHP

n°2077299
rainbow78
Posté le 20-05-2011 à 10:05:54  profilanswer
 

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
mood
Publicité
Posté le 20-05-2011 à 10:05:54  profilanswer
 

n°2077301
rengzehn
Posté le 20-05-2011 à 10:22:56  profilanswer
 

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

n°2077351
Fk01
Posté le 20-05-2011 à 13:39:43  profilanswer
 

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é ;)
 

n°2078007
rainbow78
Posté le 25-05-2011 à 08:42:51  profilanswer
 

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 ...

n°2078009
skeye
Posté le 25-05-2011 à 08:57:52  profilanswer
 

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 -
n°2078010
skeye
Posté le 25-05-2011 à 08:58:48  profilanswer
 

...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 -
n°2078012
rainbow78
Posté le 25-05-2011 à 09:13:09  profilanswer
 

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 ?

n°2078015
skeye
Posté le 25-05-2011 à 09:15:21  profilanswer
 

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


---------------
Can't buy what I want because it's free -
n°2078020
rainbow78
Posté le 25-05-2011 à 09:24:13  profilanswer
 

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

n°2078021
skeye
Posté le 25-05-2011 à 09:25:06  profilanswer
 

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 -
mood
Publicité
Posté le 25-05-2011 à 09:25:06  profilanswer
 

n°2078025
rainbow78
Posté le 25-05-2011 à 09:27:41  profilanswer
 

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.

n°2078029
skeye
Posté le 25-05-2011 à 09:33:47  profilanswer
 

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 -
n°2078033
rainbow78
Posté le 25-05-2011 à 09:39:57  profilanswer
 

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
n°2078035
skeye
Posté le 25-05-2011 à 09:45:10  profilanswer
 

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 -
n°2078039
rainbow78
Posté le 25-05-2011 à 09:51:39  profilanswer
 

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:

n°2078073
rainbow78
Posté le 25-05-2011 à 12:35:44  profilanswer
 

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 ?

n°2078074
GordonF_69
Watercooled Mappeur
Posté le 25-05-2011 à 12:43:17  profilanswer
 

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);

n°2078097
CyberDenix
Posté le 25-05-2011 à 14:24:36  profilanswer
 

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)
n°2078191
rainbow78
Posté le 25-05-2011 à 16:56:13  profilanswer
 

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

n°2078205
rengzehn
Posté le 25-05-2011 à 17:58:48  profilanswer
 

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

n°2078235
CyberDenix
Posté le 25-05-2011 à 20:07:29  profilanswer
 

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)
n°2081221
rainbow78
Posté le 08-06-2011 à 10:07:10  profilanswer
 

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
n°2081323
rainbow78
Posté le 08-06-2011 à 14:29:27  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU] Modification d'un fichier en PHP

 

Sujets relatifs
Script pour blacklister sur n'importe quel forumPb requête SQL - Syntaxe PHP
[PHP] Problème configuration wamp php.iniScript, Dossier + Sous Dossier + "publication" page HTML
[RESOLU] linux bash casescript AS3 pour remplacer l'anime jouée par une image dans une DIV
Php fonction rename qui donne des noms bizzares en 13 caracteres.Limiter la charge d'un serveur PHP
Inserer des données dans mysql au format latin 1 avec phpgestion de variables
Plus de sujets relatifs à : [RESOLU] Modification d'un fichier en PHP


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR