Lecture du port com du PC

cs_kisaka Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 2 décembre 2005 - 14 sept. 2005 à 16:32
cs_kisaka Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 2 décembre 2005 - 24 sept. 2005 à 08:22
Bonjour, j'essaye de lire le port COM1 de mon PC(des données venant d'un GPS y arrivent) avec le code suivant
<?php
fopen("COM1",'+r')
?>

et j'obtiens comme erreur '...failed to open stream.Permission denied in ...'

Je ne sais pas comment faire, cela fait une semaine que j'essaye de regler le problème
A voir également:

24 réponses

J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
14 sept. 2005 à 19:35
Salut,



Donne l'erreur en entier STP. "Permission denied in " ... quoi?
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
15 sept. 2005 à 00:19
<?php

// HOW TO USE PHP TO WRITE TO YOUR SERIAL PORT: TWO METHODS

$serproxy= true;

if ($serproxy) {

    // Use this code in conjunction with SERPROXY.EXE 

    // (http://www.lspace.nildram.co.uk/freeware.html)

    // which converts a Serial stream to a TCP/IP stream

    $fp = fsockopen ("localhost", 5331, $errno, $errstr, 30);

    if (!$fp) {

        echo "$errstr ($errno)";

    } else {

        $e = chr(27);

        $string  = $e . "A" . $e . "H300";

        $string .= $e . "V100" . $e . "XL1SATO";

        $string .= $e . "Q1" . $e . "Z";

        echo $string;

        fputs ($fp, $string );

        fclose ($fp);

    }

} elseif ($ com1 ) {

    // Use this code to write directly to the COM1 serial port

    // First, you want to set the mode of the port. You need to set

    // it only once; it will remain the same until you reboot.

    // Note: the backticks on the following line will execute the 

    // DOS 'mode' command from within PHP

    `mode com1: BAUD =9600 PARITY= N data=8 stop=1 xon=off`;

    $fp = fopen (" COM1 :", "w+");

    if (!$fp) {

        echo "Uh-oh. Port not opened.";

    } else {

        $e  = chr(27);

        $string  = $e . "A" . $e . "H300";

        $string .= $e . "V100" . $e . "XL1SATO";

        $string .= $e . "Q1" . $e . "Z";

        echo $string;

        fputs ($fp, $string );

        fclose ($fp);

    }

}

?>D'apres PHP.net



Change w+ par r+ ? et fait une lecture ?



0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
15 sept. 2005 à 00:34
Ouah ! C'est du cash !!! Bravo... Faut que je retourne à mes études ;)



Mais juste un petit comment, histoire de t'embéter :)

Il ne suffira pas de chager le 'w' en 'r'. Because écrire est plus simple que lire.

Pour écrire, tu ouvres, t'envoi la sauce et tu te casse !

Pour lire, tu ouvres, t'attends impatiament que ça morde, tu chopes tout ce qui passe et tu te casses si y'a un caractère EOT!!!



Peut-être une socket est plus apropriée à ce genre de rigolade... Bien qu'entre fopen et fsockopen, la différence soit minime.



Bref... bonne chance
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
15 sept. 2005 à 00:43
J'ai pas trouvé pour la lecture, seulement pour l'écriture.



Enfin, la base est la, c'est déja un bon début. Ensuite il se charge du reste :)
0

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

Posez votre question
cs_kisaka Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 2 décembre 2005
15 sept. 2005 à 07:18
j'ai déjà utilisé ce code mais il ne donne aucune réponse, c'est pour cela que j'ai d'abord essayé fopen('COM1','+r').
0
cs_kisaka Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 2 décembre 2005
15 sept. 2005 à 07:20
et la suite est 'permission denied in code.php in line 2, et line 2 c'est la ligne où il y a le fopen
0
cs_kisaka Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 2 décembre 2005
15 sept. 2005 à 07:22
et avec le code elle marche en écriture mais pas en lecture , or j'ai besoin qu'elle marche en lecture
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
15 sept. 2005 à 08:11
Fais une tentative avec fsockopen...

Le principe est quasiment identique, d'ailleur fopen("com1") utilise le même file wrapper que fsockopen



Mais c'est tout de même un peu plus dur, alors bonne chance =>
PHP: Hypertext Preprocessor
0
cs_kisaka Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 2 décembre 2005
15 sept. 2005 à 08:40
est-ce que tu peux me montrer un code avec fsockopen pour ouvrir le code(pas une adresse, ni udp)


C'est peut-être mais d'après ce que j'ai lu sur php, c'est une question de permission, quelque chose comme un fichier .htacces à créer, ou quelque chose à modifier dans httpd.conf de Apache.
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
15 sept. 2005 à 09:10
Je n'ai jamais fait ce genre de chose (connection COM1). Donc je ne vais plus vraiment t'être d'un grand secours. Désolé!



Je t'ai indiqué la solution des sockets car une connexion de socket ce fait toujours sur un port.

Tu ne te connecte pas à udp ou à une adresse mais à 154.87.23.56:80
=> port http de la machine 154.87.23.56. De même pour le port udp
154.87.23.56:??. Bref tu comprend, j'ai fait la relation entre le port
COM et un port quelconque.



Tu trouveras des milliers de sources utilisant fsockopen sur ce site. De même, sur le site officiel de PHP (Encore lui :
PHP: Hypertext Preprocessor), tu trouveras à gaver d'exemples très didactiques (voir fonction fsockopen).



Une fois que tu maitrise un peu ce principe, démerde toi pour arriver à bon port : COM1. Et le tour est joué.



Voici comment je vois les choses. Mais vu que je suis au boulot... Ne compte pas sur mon aide avant ce soir.



A+
0
cs_kisaka Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 2 décembre 2005
15 sept. 2005 à 10:42
mais le fsockopen d'après php n'ouvre que des urls tels http et udp non pas des ports
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
15 sept. 2005 à 11:56
Salut...



Bon, tu as raison. Quoique la première méthode présentée par FhX utilise fsockopen.



Par ailleur, quelque ligne plus loin, sur la même page de fr.php.net on trouve ce post. Qui devrait franchement t'intéresser



php at themastermind1 dot com

24-Oct-2001 07:37



I have found that I can do fopen("COM1:", "r+"); to open the comport in
windows. You have to make sure the comport isn't already open or you
will get a permission denied. (J_G => ben ouai, c'&#233;tait &#233;vident )



I am still playing around with this but you have to somehow flush what
you send to the comport if you are trying to communicate realtime with
a device.
0
cs_kisaka Messages postés 18 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 2 décembre 2005
15 sept. 2005 à 15:20
j'ai vu ce code et c'est de là que je suis parti mais je ne comprends pas ce qu'il veut dire par "make sure the comport is already open". Etre sûr que le port COM n'est pas déjà ouvert, mais le port COM doit être ouvert pour que les données puissent y arriver. Je dois récuperer des données qui arrivent vers le port COM
,peut-être fopen("COM1:","r+")ne marchera jamais pour mon application
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
15 sept. 2005 à 17:05
"mais le port COM doit être ouvert pour que les données puissent y arriver"

Oui... Mais c'est toi qui doit l'ouvrir !!!! Enfin quand je dis "toi", je parle de ton serveur PHP.

Donc, si tu as une imprimante d'installé sur ce port, de fortes chances
que Windows ai déjà ouvert le port pour attendre patiemment une page à
envoyer. (Je divague beaucoup là... Ne tiens pas rigueur de ces propos)



Peut être peux-tu utiliser une de ces fonction pour voir dans quel état est le port avant ton fopen()

http://fr.php.net/manual/fr/function.file-exists.php

http://fr.php.net/manual/fr/function.stat.php

http://fr.php.net/manual/fr/function.is-writable.php

http://fr.php.net/manual/fr/function.is-readable.php



PS : Je suis toujours au boulot...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 sept. 2005 à 09:13
Hello,



is_readable () sur un port COM tenverra true de toutes façons.

fileperms () donnera (sous win en ts cas ) 0666.

Et fopen () avec r échouera malgré tout...Il a raison, le port COM est
forcément déjà ouvert s'il l'utilise avec une appli. Donc le lire
semble vouer à l'échec (en php). C'est sans doute aussi pour ça que le
petit script ne fait qu'y écrire : il est fermé, c'est php qui va
l'utiliser, uniquement.

On peut peut-être essayer de le fermer d'abord, mais les données envoyées dans ce cas...

Mon avis (il vaut ce qu'il vaut) : tenter de rediriger les données
envoyées sur le port COM dans un flux quelconque, mais autre que le
port COM (peut-être même en php, avec exec(), passthrue() et cie), et
lire ce flux avec php.

De toutes façons, un truc tout con : essayez de lire un fichier en php
déjà ouvert par une autre appli...commment lire un fichier Excel en
php, quand Excel est ouvert sur ce fichier et y écrit des données en
même temps? Même en lecture seule, je pense que ça échouera (je n'ai
jamais essayé hein). On doit d'abord fermer le fichier.

Après je ne m'y connais pas assez en ports COM pour dire exactement
quelle serait la bonne démarche. Il y a sûrement moyen de
rediriger son flux. Peut-être même qu'une fois fermé il les garde (j'ai
des doutes hein lol), qui sait.

Enfin bref, je pense que tu n'es pas sorti de l'auberge, Kisaka.
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
16 sept. 2005 à 09:51
Salut les gars,



"je pense que tu n'es pas sorti de l'auberge, Kisaka."

Ben ouai Kisaka... t'en es où ?



Malalam (ou kisaka) : as tu essayé la fonction stat ? Je porte beaucoup d'espoir dessus... ;)

(Je peux pas le tester... A mon boulot, mon directeur technique a du
dire le mot "Microsoft" avant de dire "Maman", "Papa" ou mêm "Pipi" ...
! Et j'ai pas eu le temps hier soir)
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 sept. 2005 à 11:29
"essayez de lire un fichier en php déjà ouvert par une autre appli" Pas besoin d'aller aussi loin.

Quand tu ouvres un fichier via fopen() par exemple,il faut savoir que
le temps que tu met à traiter ton fichier jusqu'à fclose(), le fichier
est automatiquement bloqué en lecture/écriture.
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
16 sept. 2005 à 11:47
PS :

Un truc, peut-être utile, mais pas la solution ! : fopen("com1","rb");

A mon avis, mieux vaut ouvrir le flux en biainre...



Ceci dit, en passant, toujours pas de nouvelle du principal intéressé...

Domage, le sujet est intéressant!



FhX => Chuis pas d'accord... Un simple argument : à quoi pourrait bien servir la fonction flock() alors ???

http://fr.php.net/manual/fr/function.flock.php
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 sept. 2005 à 12:12
J_G => Je ne peux pas non plus essayer stat () . Au boulot, c'est
Crosoft aussi, et chez moi...mon pc est indisponible ;-) (je viens de
déménager, on m'a volé des câbles, mon écran est nase...enfin bref, on
verra plus tard!).

flock () est justement peut-être une solution...en tous cas, ça mérite
d'être essayé. D'ailleurs, puisque c'est la pause déjeûner, je vais
essayer de ce pas ;-)





Et tant pis pour l'intéressé de ce thread, au passage, lol...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 sept. 2005 à 12:15
Beuh chuis con moi, faudrait déjà avoir un pointeur sur le fichier, pour ça...
0
Rejoignez-nous