[php] gestion des flux

Fermé
naimsoufiane Messages postés 85 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 10 mai 2013 - 27 août 2007 à 12:41
naimsoufiane Messages postés 85 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 10 mai 2013 - 30 août 2007 à 22:12
salut tout le monde,

je travail actuellement sur un sujet traitant les flux en php, mon problème est la transmission des flux d'une page php à une autre.
En effet lorsque je travail sur un flux dans une page j'ai besion d'utilisé ce même flux mais dans une autre page. j'ai essayé de le transmettre dans une formulaire ou même de le déclaré comme varianble de session mais sans résultat

je vous remercie pour vos réponse :-)
A voir également:

9 réponses

Bonjour,

Je ne comprends pas trop ton besoin. Tu parle de "Flux", mais qu'appelle tu par cette expresion exactement ? Personnellement j'utilise Flux pour les flux sur fichier (ouverture de fichier, écriture, etc).
Si tu parle de flux sur fichier, dans ce cas tu n'as pas intéret à garder ouvert un tel flux entre deux pages, mais plutot de fermer et re-ouvrir dans la deuxieme page. C'est faisable, mais je te le déconseille fortement car super dégeu ^^ et sujet à présenter des risques.

Par contre, si tu parle du fait de garde en "mémoire" des données d'une page à l'autre, dans ce cas là tu as plusieurs possibilités.

1- La première comme tu l'as dit est de passer ces données via un formulaire, en méthode GET ou POST selon ton besoin.
2- La seconde est l'écriture dans un fichier de ces données, puis lecture sur une autre page. (AUCUN INTERET)
3- La troisième est d'utiliser les sessions.

Qqs explications pour la première solution, rien de mieux qu'un exemple. Ex, si tu souhaite transmettre un message d'une page à l'autre :
Ta page de formulaire - nommée 'form.php' :
   <?php
         <form action="result.php" method="POST">
             <input type="text" name="message" id="message" value="" />
             <input type="submit" name="submit" value="soumettre" />
         </form>
   ?>


Et ta page de résultat dans laquelle tu affichera le message entré - nommé 'result.php' :
   <?php
        if ( isset($_POST['message']) && !empty($_POST['message']) ){
            // --- Write user message
            echo "<BR>Message transmit : ".$_POST['message'];
        }
        else {
            echo "<BR>Aucun message transmit";
        }
   ?>


Dans cet exemple, tu passe ton parametre à la requete HTTP avec la méthod POST. Il te faut donc "checker" via le tableau global $_POST dans ta page de résultat. Tu peux aussi modifier pour utiliser la méthod GET en modifiant la valeur du parametre METHOD de ton formulaire, et en checkant le tableau $_GET à la place de $_POST.

Pour ce qui est de la solution 3, passage par la session, c'est on ne peut plus simple, mais c'est utilisable de maniere différente. Par exemple si tu connais déjà la valeur d'une variable dans une page, que tu souhaite la sauvée en session afin de l'utiliser dans une autre page. Par exemple, si l'on reprends l'exemple ci-dessus, en modifiant la page de résulat comme suit :

   <?php
        // --- start session if not already started
        @session_start();

        if ( isset($_POST['message']) && !empty($_POST['message']) ){
            // --- Write user message
            echo "<BR>Message transmit : ".$_POST['message'];
            // --- Save the message in session :
           $_SESSION['message'] = $_POST['message'];
           // --- Sample :
           echo "<BR><A href='page3.php'>Exemple avec session</A>":
        }
        else {
            echo "<BR>Aucun message transmit";
        }
   ?>


En gras : session_start(); est à mettre au début de toutes les pages ou tu souhaite utiliser tes variables de session. Ces variables sont stockées dans le tableau global $_SESSION. Pour supprimer une variable de ce tableau tu peux utilser : unset($_SESSION['maVariable']);

Ainsi, toujours dans cet exemple, si tu construit la page nommée 'page3.php' de la facon suivante :
   <?php
         @session_start();

         echo "<BR>Mon message en session : ".$_SESSION['message'];
   ?>

Tu pourra visualiser le message stocké en session.

Voilà, je ne sais pas quel est ton niveau et si ces explications te seront utilies ?
Bon courage.


0
naimsoufiane Messages postés 85 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 10 mai 2013 9
27 août 2007 à 19:56
Merci bien pour votre réponse cher ami,
Bon je vais essayer d’expliquer mieux mon problème, j’utilise le php pour exécuter des commandes sur un serveur SSH
Dans la première page1.php je doit exécuter une première commande :
$stream = ssh2_exec($connection, $cmd);
Puis lire les résultats de l’exécution
$output= stream_get_contents($stream);
Tout juste après je doit demander à l’utilisateur de me fournir des données qui vont s’exécuter à la suite et qui utilise le même flux $stream(pour cela j’utilise une formulaire)
Donc je doit récupérer ces données à partir de la formulaire et les utiliser dans la page2.php :
fwrite($stream, "a\n");
sleep(1);
$output1 = stream_get_contents($stream);
Le problème est que lorsque je passe de la première page à la deuxième je perds mon flux $stream
0
naimsoufiane Messages postés 85 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 10 mai 2013 9
29 août 2007 à 11:38
:-(
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
29 août 2007 à 13:38
Re,

Désolé pour l'attente je n'avais pas vu la réponse :)

Ton problème vient du fait, je pense, que ton formulaire ne permet pas de passer des données de type flux. C'est pourquoi tu le perds sur la page deux.
Pourrais tu mettre le code de ton formulaire s'il te plait afin de voir quel type d'input tu as utilisé. Car si tu utilisé un input de type TEXT pour passer ton flux d'une page à l'autre, c'est normal que ca ne fonctionne pas :)

Pour éviter ce pb, je te conseille plutot d'opter pour une solution via la session, dans laquelle tu peux sauvegarder (normalement il me semble), n'importe quel type de variable (donc j'imagine qu'un flux tu peux aussi).

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
naimsoufiane Messages postés 85 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 10 mai 2013 9
29 août 2007 à 18:04
MERCI POUR LA REPONSE CHER AMI

effectivement je fait passer mon flux par un zone de texte masqué(hidden). qu'on a l'utilisatiion de session j'ai déja déclaré mon variable comme variable de session mais le résultat est la même
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
29 août 2007 à 18:09
Met moi la partie concernée de ton code, je regarderai ca demain (si j'y pense ^^)
0
naimsoufiane Messages postés 85 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 10 mai 2013 9
29 août 2007 à 19:22
<?php
require_once("session_begin.php");
require_once('compilator.php');
require_once('connect.php');
////////////////////////////

if($save_flag==0) print"<script>alert(\"vous devez enregistrer votre document avant de le compiler \")</script>";
else{
//nom du document à compiler
$compile="./".$doc_flag.".exe";
// Execution d'une commande
$stream = ssh2_exec($connection, $compile,1);
//stream_set_blocking($stream, true);
sleep(3);
// lire le résultat de l'exécution
print"<table width=\"900\" border=\"0\" bgcolor=\"#99FF00\">";
print"<tr>";
print"<td>";

print"</td>";
if((strstr($zone_contents,"scanf"))or (strstr($zone_contents,"getchar"))or (strstr($zone_contents,"gets"))or (strstr($zone_contents,"fgets"))){
print"<form method=\"get\" action=\"communication.php\">";
print"<input name=\"donnee\" type=\"text\" />";
print"<select name=\"s\">";
print"<OPTION VALUE=\"enseignant\">Enseignant</OPTION>";
print"<OPTION VALUE=\"enseignant1\">bhd</OPTION>";
print"<OPTION VALUE=\"enseignant2\">Enseignant</OPTION>";
print"<OPTION VALUE=\"enseignant3\">Enseignant</OPTION>";
print"<OPTION VALUE=\"enseignant4\">Enseignant</OPTION>";
print"<OPTION VALUE=\"enseignant5\">Enseignant</OPTION>";
print"</select>";
print"<input type=\"submit\" name=\"ok\"/>";
print"</form>";
}
print"<td>";
print"<b>";
$output= stream_get_contents($stream);
$resultat=explode("\n",$output);
foreach($resultat as $val){
print"$val<br>";
}
print"</b>";
print"</td>";
print"</tr>";
print"</table>";
?>

Merci d 'avance
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
30 août 2007 à 11:56
Si je comprends bien ca c'est ta première page, dans laquelle tu te connecte via ssh sur un pc, tu exec une commande, etc..

Pourrais tu mettre également le contenu de "session_begin.php" et "connect.php", ainsi que la page 2 ?

Merci.

PS : Met ton code entre balise code (< code></ code> sans les espaces)
0
naimsoufiane Messages postés 85 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 10 mai 2013 9
30 août 2007 à 22:12
désolé pour le retard

session_begin.php

<?php
session_start();
// tableau contenant les noms e tout les fichier réalisé par l'utilisateur lors de la session
if(!session_is_registered("nom_fich")){
$_SESSION["nom_fich"] = array();
// Drapeau determine si le doc est enregistré ou non
$save_flag=0;
session_register("save_flag");
// Drapeau sur le nom du document courant
$doc_flag="";
session_register("doc_flag");

// Drapeau sur la zone du texte
$zone_flag=0;
session_register("zone_flag");

// contenu de la zone de texte
$zone_contents="";
session_register("zone_contents");

$stream="";
session_register("stream");
}

?>


conect.php

<?php
require_once('config.php');
// connection à la machine serveur
$connection = ssh2_connect($machine, 22);
if(!$connection) die("connection échoué");

// authentification par login /mot de passe
ssh2_auth_password($connection,$user,$pass)or  die("connection échoué");

?>


config.php

<?php
$url="aaaaaaaaaa"; 
$machine="zzzzzzzzzzzzzz";
$user="zzzzzzzzzzz";
$pass="eeeeeeeeee";

?>


je vous remecie beaucoup pour vous éfforts
0