2010-07-30 22 views
1

J'ai un serveur (Debian Lenny), analyseur spectral et j'ai téléchargé la collection de codes source du site Steve Sharples's. Avec ces s. Je suis capable de me connecter à un analyseur spectral - commande de type et obtenir la réponse.Lire/écrire des données à partir de la ligne de commande en utilisant PHP

Par exemple:

my-atom:~/vxi11# ./vxi11_cmd 135.123.106.59 
Input command or query ('q' to exit): *IDN? 

et je reçois: Rohde&Schwarz,FSV-7,102004/007,1.50 SP1

Suis-je capable de se connecter à ce serveur, commande écrire et lire le responce en utilisant PHP? Je pensais à des prises, mais je ne suis pas sûr si le meilleur choix.

Toute aide serait grandement appréciée.

Merci, Petr

Répondre

0

Vous pouvez exécuter des programmes externes à l'aide exec, shell_exec, system ou proc_open.

Je recommanderais proc_open, qui vous permet de configurer des canaux pour stdin, stdout et stderr.

Consultez le lien proc_open.

+0

Merci Brandon, j'aime bien shell_exec c'est exactement ce que je veux. Mais le problème est que j'ai deux machines physiques (première application (serveur), deuxième analyseur) avec des adresses IP différentes. Comment se connecter à partir de mon xxx.xxx.xxx.234 à xxx.xxx.xxx.187 exécuter la commande shell, récupérer les données et les envoyer. Merci – praethorian

+1

Si vous devez vous connecter à la machine distante à partir de php, je vous recommande d'utiliser l'une de ces méthodes d'exécution avec ssh et un fichier d'identité. Vous pouvez utiliser ssh et un fichier d'identité pour exécuter des commandes sur un serveur distant sans fournir de mot de passe. –

0

Aussi, vous pouvez faire comme:

$result = `SOME_COMMAND_HERE`; 
0

Vous pouvez combiner shell_exec avec netcat:

<?php 
$output = shell_exec('echo "TRAC? TRACE1" | netcat -q 1 135.123.106.59 5025'); 
echo "<pre>$output</pre>"; 
?> 

Notez l'option -q 1, ce qui provoque netcat à attendre 1 seconde pour la réponse. Vous n'avez pas besoin de ce temps d'attente sur les commandes "set". En outre, *IDN? n'a pas besoin du temps d'attente, but many other query commands do.

L'utilisation de netcat pour cette connexion est dangereusement proche du métal nu. Vous pourriez vouloir écrire un shell-script qui attrape les erreurs communes. Vous pouvez ensuite appeler ce script avec shell_exec à la place. Le meilleur moyen serait bien sûr de prendre Steve Sharples free library et de modifier son exemple de cmd pour répondre à vos propres besoins.