exec() ok avecc cmd mais marche pas en php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : exec() ok avecc cmd mais marche pas en php

par Makina » 24 mai 2006, 15:21

C'est bon, j'ai trouve non pas la solution mais une solution.
En effet j'ai copier les commandes dans un fichier .bat, que j'execute avec le exec().

Voili voilou, merci pour tout.
:wink:

par Makina » 24 mai 2006, 14:25

Re

Je retire ce que j'ai dit, le problême ne vient pas de la boucle.

J'ai declaré $nom avec le nom du serveur ou la commande fonctionnait dans l'invite de commande ms-dos.
<?php
set_time_limit(50);
echo "<H2> Historique des mises à jour windows</H2>";
$nom = 'Mail';
$file= "C:\\Program Files\\EasyPHP1-8\\www\\MAJ\HistoriqueUpdate\\$nom.html";
$req = "wmic /node :$nom qfe list brief /format:htable > \"$file\"";
echo $req,'<br>';
echo "<a href='../MAJ/HistoriqueUpdate/$nom.html' TARGET='_blank'>$nom</a><br>";
?>
Voila mon code en entier.

Code : Tout sélectionner

wmic /node :Criollo qfe list brief /format:htable > "C:\Program Files\EasyPHP1-8\www\MAJ\HistoriqueUpdate\Criollo.html"
Voila la commande que j'obtien a l'ecran.

Cette commande marche bien quand je l'execute sous ms dos.

Merci

par Makina » 24 mai 2006, 14:18

Re

Le code est hebergé chez moi, j'ai essayer ta methode sadeq, avec ou sans le popen($req,"r") et ca ne marche pas.

J'ai toujours le même problème... le fichier est vide, quand je fais le
echo $req,'<br>';
je fais un copier collé, je le transmet a l'invite de commande ms dos et ca marche...

Idem avec le popen() !

Sachant que le script est dans une boucle, si la commande ne marche pas pour un $nom donné, il est possible que ce soit ca à l'origine du bug ?

Merci

par sadeq » 24 mai 2006, 12:59

Quand tu utilise un anti-slash (\) dans une chaine de caractères il faut l'échapper (le précéder) par un autre anti-slash car il s'agit d'un mot-clé du langage PHP. exactement comme tu as échappé le " interne dans la chaine $file.
Corrigé et simplification:
    $file="C:\\Program Files\\EasyPHP1-8\\www\\MAJ\HistoriqueUpdate\\proc\\$nom.html"; 
    
    $req = "wmic /node :$nom qfe list brief /format:htable> \"$file\""; 
    if (exec($req)){ 
        echo $req,'<br>'; 
        if (filesize($file) <= 0) 
            unlink($file); 
        else 
            echo "<a href='../MAJ/HistoriqueUpdate/Proc/$nom.html' TARGET='_blank'>$file</a><br>"; 
     }
si exec ne fonctionne pas pour des raisons d'insuffisance du droit d'exécution utiliser popen ($req, "r") qui crée un procéssus d'éxécution séparé.

par fab » 24 mai 2006, 12:54

le code est hébergé ou ? chez toi ?

exec() ok avecc cmd mais marche pas en php

par Makina » 24 mai 2006, 12:24

Bonjour,

Je fait un script qui affiche des mises à jour à l'aide de la commande wmic.
	        $file="\"C:\Program Files\EasyPHP1-8\www\MAJ\HistoriqueUpdate\proc\\$nom.html\"";
	$file2="C:\Program Files\EasyPHP1-8\www\MAJ\HistoriqueUpdate\proc\\$nom.html";
	$req = "wmic /node :$nom qfe list brief /format:htable> $file";
	exec($req);
	echo $req,'<br>';
	if (filesize($file2) <= '277')
		unlink($file2);
	else
		echo "<a href='../MAJ/HistoriqueUpdate/Proc/$nom.html' TARGET='_blank'>$file</a><br>";
	}
Je doit avoir un fichier html, portant le nom de la machine.
Cela marche masi mon fichier html est vide. D'ou la presence du
if (filesize($file2) <= '277')
		unlink($file2);
si mon fichier html est vide, je le supprime.

Le plus etonnant est que si je copie la requete ($req) dans l'invite de commande MS-DOS cela marche parfaitement :shock:

J'ai essayé en mettant un sleep(5) entre chaque execution de requete mais rien a y faire...

Merci pour vos solutions et idées potentiels