PHP : lire un fichier A et le recopier dans un fichier B avec proc_open()

khitan72 Messages postés 12 Date d'inscription jeudi 5 juillet 2007 Statut Membre Dernière intervention 5 janvier 2009 - 3 sept. 2008 à 13:38
khitan72 Messages postés 12 Date d'inscription jeudi 5 juillet 2007 Statut Membre Dernière intervention 5 janvier 2009 - 4 sept. 2008 à 14:20
bonjour ,
je cherche a comprendre le fonctionnement de la fonction proc_open() et de l'utilisation de pipe en r/w
pour essais,  je souhaites lire un fichier_A.txt pour le recopier dans un fichier_B.txt ( 3 lignes de characteres dedans)
avec le script suivant, je ne peux afficher le contenu des pipes ni ecrire dans les fichiers
comment ouvre t'on ce fichier_A. txt par cette commande ? proc_open($cmd, descript,$pipe)
quelle est la commande $cmd
a terme, j'aimerais pouvoir utiliser proc_open pour ouvrir un port com en R/W
merci d'avance pour l'aide
<?php

$descriptorspec = array(
   0 => array("pipe","r+"),  // stdin est un pipe où le processus va lire
   1 => array("pipe","w+"),  // stdout est un pipe où le processus va écrire
   2 => array("file","error_output.txt", "a+"), // stderr est un fichier
    );
   #  le fichier error output me repond que la commande fichier_A n'est pas une commande valide #
   
    #$process = proc_open(`fichier_A..txt,"r+`, $descriptorspec, $pipes);
       if (is_resource($process)) { 
    while(!feof($pipes[0])) {
    echo stream_get_contents($pipes[0]);
    $buff = fread($pipes[0], 128);
    echo $buff;
    $s=fgets($pipes[0]);
        echo "\n test1 " . $s;
    }
    fclose($pipes[0]);
    sleep(2);
    echo "ok";
   
   
    fwrite($pipes[1], "j'ai ecrit cela");
    echo "pipe 11 = $a\n";
    fclose($pipes[1]);
    sleep(2);
    echo "closed\n";   
}

5 réponses

yoman64 Messages postés 962 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 2 août 2010 2
3 sept. 2008 à 14:19
Salut,

Oula, je crois que tu n'as pas trop compris ce que faisait la fonction proc_open C'est pour exécuter un exécutable et ouvrir des descripteurs pour le contrôler,  pas un fichier texte. De toute façon ta ligne ne fait aucun sens.
$process = proc_open(`fichier_A..txt,"r+`, $descriptorspec, $pipes);
Pourquoi il y a des backtick ? et puis un fichier_A..txt n'est pas un nom valide pour un fichier de toute façon, peut pas y avoir .. de suite.

Je te suggère de lire ceci: http://ca.php.net/manual/en/function.proc-open.php

Au moins la courte description:
proc_open —
Exécute une commande et ouvre les pointeurs de fichiers pour les entrées / sorties


Si tu veux ouvrir un fichier c'est avec fopen qu'il faut voir.
-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
0
khitan72 Messages postés 12 Date d'inscription jeudi 5 juillet 2007 Statut Membre Dernière intervention 5 janvier 2009
3 sept. 2008 à 14:47
merci
en fait fopen marche pour ouvrir un fichier texte, mais mon but est de comuniquer avec un GSM par AT cde
et je n'arrive pas a ouvrir le port com pour ecrire et lire les données (envoie ATZ + CRLF  reception OK+CRLF)
j'ai trouvé ce le bout de code ci dessus, et j'essayais de le comprendre , en imaginant que les caracteres d'un fichier
peuvent etre lu comme sur un port com .

y'a du mélange chez moi , je crois

cdlt
0
yoman64 Messages postés 962 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 2 août 2010 2
3 sept. 2008 à 22:03
Hello,


Ah si c'est pour controller un port COM il va te falloir utiliser un programme externe ou bien une extension PHP.
L'extension qui pourrait t'aider est Direct IO.
Tu trouveras plus d'informations à cette adresse: http://ca.php.net/manual/en/intro.dio.php


-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
0
yoman64 Messages postés 962 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 2 août 2010 2
4 sept. 2008 à 04:37
Salut,

J'y ai repensé et il me semble que fopen suffit pour contrôler un port com, je viens de faire quelques tests et ça semble fonctionner, suffit de l'ouvrir en mode w+

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
0

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

Posez votre question
khitan72 Messages postés 12 Date d'inscription jeudi 5 juillet 2007 Statut Membre Dernière intervention 5 janvier 2009
4 sept. 2008 à 14:20
bonjour,
je ne peux pas ouvrir mon COM3 avec fopen 
ou sinon la fonction fread met trop de temps à attendre mon caracteres de reponse .
 et pour j'ai une erreur fatale si je prend la fonciton dio_open
malgre une mise à jour de php ini et verifié que la dll est presente dans les extensions sous php/ext
je vais chercher encore. y'a pas de raison que si j'arrive a communiquer avec un port com sous excel/ VBA je ne puisse pas y arriver avec du php.
cdlt
voila ce que j'ai avec fopen,

'mode com3: BAUD=115200 PARITY=N data=8 stop=1 xon=off';
<?php
 $fp = fopen ('COM3', "w+");
 if (!$fp) {
        echo "Port not opened.";
   
    } else {
    $envoi= "ATZ".chr(13).chr(10) ;
    fwrite($fp, $envoi);
   
    #$received= fread($fp,10);
    print "recu =  $received";
   
    fclose($fp);
    echo"closed";
    }
   ?>
0
Rejoignez-nous