IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

recherche documentation pour concevoir 1 Extension PHP


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Par défaut recherche documentation pour concevoir 1 Extension PHP
    bonjour à tous,

    Sous Windows-10, je cherche à développer une Extension PHP permettant de
    communiquer efficacement avec un périphérique matériel (une liaison série COM
    RS232 ) côté serveur web.
    Elle sera destinée au final à fonctionner dans une application console
    et/ou web (script) en PHP sous EasyPHP_Devserver-17 et autres.

    Je sais qu'il faut passer par une programmation intermédiaire bas niveau
    (.dll) en C/C++ (je programme également en Objet C++ avec le RAD C++Builder et Qt).

    Mais voilà, problème , j'ai beaucoup de difficultés à trouver de la
    documentation technique abordable et fournie sur ce délicat sujet des
    Extensions PHP. C'est le parcours du combattant !!

    Si vous possédez des documents, ou connaissez des liens sur la toile Internet
    que je n'arrive pas à trouver, je suis preneur,

    cordialement, svp, merci.

  2. #2
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Par défaut
    bonjour à tous,

    bon je cherche toujours et pour info j'ai trouvé cà : http://php-qt.org/

    PHP-Qt :
    c'est une Extension PHP qui permet d'appeler des applications Qt (C++ Objet)
    dans un script PHP.
    Je sais que, Sous Qt, on peut très facilement accéder aux ports COM de la
    liaison série (côté serveur web) en C++ Objet via la console.

    Mais ça sent le périmé car ici c'est en Qt version 4 et Qt a passé la version 5
    et viens d'arriver en version 6 !
    ... et puis ce site n'a pas l'air maintenu ni mis à jour !!
    A++ Did

  3. #3
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 714
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 714
    Par défaut
    regardez peut-être ce site qui liste des extensions php :
    https://pecl.php.net/package/ssh2
    pour chaque extension, il y a son code source donc ça pourra peut-être vous aider à comprendre comme cela fonctionne.

  4. #4
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Par défaut mes recherches se sont orientées vers l' Extension existante : Direct IO
    bonjour mathieu,

    Oui merci pour le soutien, j'avais déjà commencé à lire les tutos et les aides
    trouvés sur les liens web listés ci-dessous , puis finir pas télécharger les sources
    de l'Extension existante Direct IO (DIO).
    ...

    Sinon le blème c'était que les recherches sur le thème "Extension PHP" m'orientaient
    vers des sites comportant des sujets sur les extensions de fichiers ...

    Alors j'ai ciblé mes recherches vers des sites anglo(Saxon)phones avec le tag suivant du genre :
    "extend php with c c++ windows" ou mieux "developing PHP extensions in C C++ under windows"

    ... ... après faut tout traduire dans la langue de Molière ...

    Les résultats en format PDF : (tutos)


    Quelques résultats en liens web :



    J'ai téléchargé puis commencé à consulter, parcourir les sources du package DIO :
    • dio.c
    • dio_common.c
    • dio_posix.c
    • dio_stream_wrappers.c
    • dio_win32.c
    • php_dio.h
    • php_dio_common.h
    • php_dio_common_data.h
    • php_dio_posix.h
    • php_dio_stream_wrappers.h
    • php_dio_win32.h
    • + 1 répertoire de scripts PHP test



    dans le premier fichier dio.c , on mentionne une zone de fonctions dépréciées
    concernant les fonctions classiques de base répertoriées dans l'aide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    /*
       +----------------------------------------------------------------------+
       |                       DEPRECATED FUNCTIONALITY                       |
       +----------------------------------------------------------------------+
       | The functions below are from the earlier DIO versions.  They will    |
       | continue to be maintained but not extended.  It is thoroughly        |
       | recommended that you should use either the stream wrappers or the    |
       | DIO classes in new code. - Melanie                                   |
       +----------------------------------------------------------------------+
    */
        dio_close() 
        dio_fcntl() 
        dio_open() 
        dio_read()   // <--- lecture toujours bloquante (j'avais testé depuis ma 1ière utilisation de DIO !!)
        dio_seek() 
        dio_stat()
        dio_tcsetattr()
        dio_truncate()
        dio_write()
    /*
       +----------------------------------------------------------------------+
       |                   END OF DEPRECATED FUNCTIONALITY                    |
       +----------------------------------------------------------------------+
     */
    dans le fichier dio_stream_wappers.c , on mensionne 2 fonctions PHP pour ouvrir des flux :

    • dio_raw() <--- pour ouvrir un flux d'E/S direct bas niveau (sans bufférisation)
    • dio_serial() <--- pour ouvrir un flux d'E/S direct bufférisé (avec tampon mémoire : buffer)


    Cette Extension DIO est toujours maintenue (04/2020), mais il semblerait donc que
    l'aide sur l'Extension Direct IO ne soit pas du tout à jour ici : https://www.php.net/manual/fr/book.dio.php

    Je vais fouiller encore et tester en script PHP pour voir ...

    Cordialement, merci

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 82
    Par défaut
    Bonjour, j'ai eu un besoin similaire il y a quelques années, j'avais utilisé phpcpp pour compiler mon extention : https://www.phpcpp.com/
    Cela dit, pour du port com, j'utiliserais plutôt python, qui pourra fonctionner en cgi si l'interface web est nécessaire ...

  6. #6
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Par défaut
    bonjour zozizozu,

    merci pour la réponse, oui, j'avais vu dans 1 premier temps PHP-CPP pour l'extension PHP mais ici :
    --> https://www.phpcpp.com/documentation/install

    Luckily, for most of us (those who use Linux or Apple environments), this will be a piece of cake.
    If you're on a different platform however, you are left on your own, because we
    (as in me, the PHP-CPP developer), only uses Linux systems. There is however no reason why this library
    should not also work on other platforms, because it only uses straight forward C++ code. Thus,
    if you are on a different platform and have managed to compile the library on it, please give us feedback
    so that we can update these installation instructions and include other platforms as well.

    ça fonctionne sous Linux mais pas encore certifié opérationnel sous Windows : oui ça serait bien de prendre le temps d'y passer du temps...

    Concernant python pour accéder au port com série, j'avais vu ça aussi (toujours sous Linux) :
    --> http://www.doctormonk.com/2012/04/ra...d-arduino.html
    --> https://www.elektormagazine.fr/artic...-php-ou-python

    Comme PHP et ses Extensions, Python utilise aussi au final des <library> écrites en C/C++ ,
    et j'avais aussi déjà accédé au port série en CGI via un exécutable en console, écrit en C++ sous C++ Builder6 mais c'est 1 solution intermédiaire mitigée :
    on ne scrute pas le port COM série en permanence mais par petites périodes ; le port est constamment commuté périodiquement entre ouvert et fermé ...

    J'ai aussi récemment développé en C++ sous Qt (avec le composant, la classe "QSerialPort" ) une autre solution intermédiaire mitigée ,
    aboutissant à 1 exécutable perso opérationnel nommé "QtComSerieX.exe" proche de celui "comxs.exe" présent en fin de page web
    ici sur le lien suivant :
    --> https://radiovibrations.com/techblog.php?i=10
    à partir de ça : (lecture asynchrone seule ici ; j'avais complété pour l'écriture synchrone ...)
    --> https://code.qt.io/cgit/qt/qtserialp...erasync?h=5.14

    appelé en PHP avec l'instruction suivante :
    // émission + réception sur port Com
    $result = shell_exec( "QtComSerieX.exe $comport $attente $envoi" ) ;
    // $attente : délai d'attente (timeout pour la lecture du port COM) avant de sortir de l'exécutable.
    // $envoi : les éventuels octets codés hexa à envoyer sur le port COM ouvert.
    // $result : donnée lue (durant la période $attente) sur le port COM ouvert.
    // ...

    ... Ça fonctionne + ou - bien, mais ça reste quand même toujours 1 solution mitigée ... le port est encore en permanence commuté périodiquement entre ouvert et fermé ...

    Pou l'instant, je suis encore dans la lecture et la compréhension des sources de l'Extension PHP Direct IO.
    Cordialement, A++ Did

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Il faudrait nous détailler un peu ce que tu as besoin de faire : Quelle information tu lis et pourquoi devrait elle être lu avec PHP ?

    PHP est ,selon moi, fait pour exécuter un script rapidement et mourir dès que possible et pas rester en vie en permanence pour scruter une liaison série (par exemple).
    N'aurait tu pas plutôt intérêt à faire le boulot avec C++ et transmettr eles infos nécessaire à PHP par un biais adapté à tes besoins ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Par défaut
    Hello,

    Je vise ici l'application console (cmd.exe) : touche Ctr-C ou fermer la console pour arrêter le script (sans oublier auparavant de fermer le port com ouvert).
    affirmatif , on peut aussi faire tout cela en C++ ou java ...

    Pour faire court, tout ce qui sort d'un port série RS232 du serveur (données utiles) doit arriver en "instantané" dans 1 navigateur web client et
    inversement tout ce qui envoyé par 1 navigateur web client au serveur doit être redirigé vers le port série du serveur (commandes).
    En gros, une application client/serveur websocket implémentée en script PHP pour le serveur websocket et en html/javascript pour le client websocket
    (possible aussi en TCP-socket).

    version console qui va tourner en boucle côté serveur web en gérant :
    1°) la connexion des clients websocket distants, avec réception des données et envoi de commandes sur les websockets ,
    2°) la lecture et écriture sur le port Com RS232 du serveur

    MAIS le PHP n'étant pas multitâche, donc si la lecture sur le port est BLOQUANTE pendant un moment, pendant ce temps là,
    impossible de gérer simultanément la connexion et les requêtes websocket des navigateurs clients (donc là, point final, c'est mort !!!) !
    Et aussi, durant le temps de gestion d'un client websocket, il faut que les données arrivant sur le port série soient bufférisées pour pouvoir être lues un chouilla + tard...

    Le champ des applications possibles est large :

    -simple lecture de trame NMEA sur une carte ou module GPS avec connecteur série, avant de les décoder pour retourner
    les données utiles, via web socket, vers le navigateur client distant pour affichage (communication unidirectionnelle)

    -une carte d'acquisition E/S ANALOG et DIGITAL locale , reliée, via module sans fil xBee au connecteur série du serveur,
    va faire l'acquisition périodique de mesures de t°, d'humidité, ... ; données utiles qui seront traitée avant d'être
    retourner, via web socket, vers le navigateur du client distant pour affichage.
    En retour, le client sur son navigateur web peut alors décider, à distance, d'envoyer, via websocket, des commandes pour
    piloter une une ventilation, une clim ou un chauffage par l'intermédiaire de la carte d'acquisition locale (communication duplex).

    ... etc. ...

    L'avantage d'utiliser le navigateur client (websocket), c'est que ça peut fonctionner également à distance sur un mobile
    Android sans installer d'applications supplémentaire.

    Cordialement, A++ Did

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 82
    Par défaut
    Je suis assez d'accord avec grunk, en c, python, n'importe quoi, mais je ferais une app console de type serveur, qui lance un thread pour gérer le port com.
    Ainsi, ton php ( ou autre °) appelle ton serveur, non bloquant, qui se chargera de récupérer ou d'envoyer tes infos au/vers le port com.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. localiser la recherche juste pour les page sous php
    Par fleurrouge dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 30/12/2015, 01h48
  2. [PHP 5.4] La documentation pour la certification en PHP
    Par unix27 dans le forum Langage
    Réponses: 2
    Dernier message: 21/03/2011, 16h39
  3. configurer IIS pour executer des extensions php
    Par cendrine15 dans le forum IIS
    Réponses: 2
    Dernier message: 06/12/2010, 17h12
  4. recherche documentations pour appli type designer visio (drag and drop)
    Par ZashOne dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 16/04/2010, 02h49
  5. Recherche documentation pour automates
    Par Babezien dans le forum Automation
    Réponses: 3
    Dernier message: 25/11/2007, 06h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo