Fonction passthru et y effectuer une recherche

Bonsoir,

Je cherche actuellement à exploiter la fonction passthru de PHP qui permet d’afficher la sortie d’une commande qu’on fait à un serveur distant. Elle fonctionne parfaitement mais me retourne du texte brute sans les sauts de ligne du genre :

Filesystem Size Used Avail Use% Mounted on /dev/hda1 72G 38G 32G 55% / varrun 252M 176K 252M 1% /var/run varlock 252M 4.0K 252M 1% /var/lock udev 252M 92K 252M 1% /dev devshm 252M 0 252M 0% /dev/shm lrm 252M 19M 234M 8% /lib/modules/2.6.15-28-386/volatile

Est-il possible de récupérer la sortie de manière ordonnée ? C’est à dire d’avoirs au moins les sauts à la ligne ?

Deuxièmement, je cherche comment parcourir le contenu d’une variable pour y trouver un mot bien précis.

J’ai $mon_text=bla bla bla bla bla bla
et $mot_a_cherché = bla
J’aimerais faire en sorte que si $mot_a_cherché apparrait dans $mon_text alors je récupère la valeur “OUI” par exemple.

Est-ce possible ?

Merci bien
Edité le 15/07/2007 à 11:26

genre strpos (qui renvoie la position d’un mot, voir doc de php)

pour l’autre système, affiche le code, même si je suppose un nlbr pas appliqué.
Edité le 14/07/2007 à 21:39

Merci. En réalité justement je ne sais pas ou mettre le nl2br (fonction qui convertie les entrée en
si je me souviens, ça fait longtemps…).

Je t’affiche le code utilisé :

<?php	

$command = 'ps -e';

passthru($command);

?>

C’est simple, c’est mon script de test. Ou et comment placer la fonction nl2br ? Quoique j’essai de faire la syntaxe n’est pas juste…

Pour mon deuxième problème, j’ai tenté de le faire avec la fonction preg_match() comme voici :

<?php	

$command = 'ps -e';

passthru($command); 

$text = passthru($command);

if (preg_match("#apache2#", $text))
{
echo 'VRAI';
}
else
{
echo 'FAUX';
}

 
	?>

Mais il me répond FAUX. Mais je sais que la ligne $text = passthru($command); est incorrecte mais je ne parviens pas à trouver une issue :frowning:

plutôt ça d’après la doc :

$command = ‘ps -e’;
passthru($command, $text);
echo nl2br($text);

echo nl2br($test); n’affiche rien.

La fonction passthru($command,$text) affiche déjà le texte. Le nl2br est donc inutile et ne fonctionne pas (je viens de tester).

La recherche sur $text ne fonctionne toujours pas (il me répond FAUX).

Merci de prendre du temps pour mon prob :slight_smile:

Tu peux :

  • utiliser simplement les `` (apostrophes inversées) et récupérer le résultat en chaine de caractère : <?php echo nl2br(`ps -e`); ?>
  • utiliser les flux, avec les fonctions de la famile de popen : tu obtiens un descripteur, comme pour les fichiers, que tu peux manipuler de la même manière
  • utiliser exec en lui fournissant un deuxième paramètre : tu obtiendras le résultat de ta commande dans un tableau, avec une cellule par ligne.

Pas faux. j’ai pas vu que c’était juste le code retour de l’application, pas sa sortie.

Ben tu es bon pour un coup de popen/pipe/dup/fork, etc :slight_smile:

Alors j’ai réussi à le faire fonctionner tout simplement en faisant comme tu l’a dis Mandarounet :

<?php


$text = nl2br(`ps -e`);
echo $text;

if (preg_match("#apache2#", $text)) 
{ 
	echo 'VRAI'; 
} 
else 
{ 
echo 'FAUX'; 
}   
?>

La mise en forme y est et la recherche fonctionnelle. C’est justement ce que j’ai besoin de faire, j’en ai pas besoin de plus :slight_smile:

Merci beaucoup à vous deux :slight_smile:

Utilise strpos plutôt que preg_match, c’est beaucoup plus rapide.
Je te mets le code, comme ça, t’as qu’à copier coller :


<?php
$text = nl2br(`ps -e`);
echo $text; 

if (strpos($text, 'apache2') !== false)  {  
  echo 'VRAI';
}  else  {
  echo 'FAUX';
}
?>

Merci :super: