Page 1 sur 2
PHP et périphérique usb
Posté : 23 mai 2009, 17:54
par Yo4nn
Bonjour,
Est-t-il possible de communiquer avec un périphérique branché en usb sur ma machine via php-cli ???
Je sais que php n'est pas le langage adapté pour ce que je veux faire , mais je veux quand même essayer de le faire en php.
Merci,
Yoann
Posté : 24 mai 2009, 00:28
par Sékiltoyai
Euh, plus de précisions seraient bienvenues tout de même…
Posté : 24 mai 2009, 11:37
par Yo4nn
Et bien j'aimerai créer un soft qui communique avec mon imprimante , dans le sens ou le programme envoie des données en usb a l'imprimante qui l'interprète et imprime , le tout sans utilisé une fonction de windows (ou linux ) .
c'est pour ca que je cherche a ouvrir une connexion en php sur le port usb.
car une fois cette connexion ouverte je pense qu'il "suffit" d'envoyer les données d'une certaine manière pour que l'imprimante les interprète comme il faut.
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]
Posté : 24 mai 2009, 12:15
par Sékiltoyai
Et bien j'aimerai créer un soft qui communique avec mon imprimante , dans le sens ou le programme envoie des données en usb a l'imprimante qui l'interprète et imprime , le tout sans utilisé une fonction de windows (ou linux ) .
Tu veux faire un driver quoi…
c'est pour ca que je cherche a ouvrir une connexion en php sur le port usb.
car une fois cette connexion ouverte je pense qu'il "suffit" d'envoyer les données d'une certaine manière pour que l'imprimante les interprète comme il faut.
Oui, et la vie est belle, et les oiseaux gazouillent…
Alors, il faudra m'expliquer pourquoi, alors que chaque système fournit des fonctions toutes prêtes pour la gestion de ce genre de matériel, tu veux absolument ne pas les utiliser.
Pour répondre exactement à ta question, déjà, il faut voir à quel point tu ne veux pas utiliser les fonctions du système, parce que, à moins de coder en assembleur (et encore, tu devras encore faire des interruptions pour appeler les fonctions système), tu seras obligé d'utiliser les primitives. Par ailleurs, il faudra un code ultra dépendent du système. Autant tu peux espérer t'en sortir en utilisant les fonctions php en différenciant Windows et Unix, ou bien avec un peu de chance en utilisant le protocole samba. Autant en recodant toi même tu n'as aucune chance d'avoir une gestion identique.
Ensuite, et c'est le plus important, si tu espères pouvoir gérer n'importe quelle imprimante de manière transparente, je crois qu'il faut redescendre de ton nuage, puisque là plus encore le code sera ultra dépendant du matériel. Mais si tu tiens vraiment à coder un driver pour chaque imprimante existante, libre à toi.
Bref, je ne comprends vraiment pas la question…
Posté : 24 mai 2009, 12:36
par Yo4nn
Bon je crois qu'on ne sait pas trop compris.
Bref, je ne comprends vraiment pas la question…
Je dois realiser un TIPE et le sujet est interface ou surface.
et vu que j'ai fais du php pendant quelques années, je souhaite faire une interface en php.
J'ai donc pensé a une interface qui gére une imprimante, je trouve ca intéressant.
il faut voir à quel point tu ne veux pas utiliser les fonctions du système
je voulais anticipé les réponses comme exec("print ...");
Autant tu peux espérer t'en sortir en utilisant les fonctions php en différenciant Windows et Unix
j'ai parlé de Windows et linux pour ouvrir le champ de réponse, bien sur le code sera seulement pour Windows ou linux , et au vu des réponses il sera pour l'os ou la gestion de l'usb via php est le plus facile.
si tu espères pouvoir gérer n'importe quelle imprimante de manière transparente, je crois qu'il faut redescendre de ton nuage,
Non , effectivement je veux gérer seulement mon imprimante.
Peut-être que je me redirigerai vers un autre périphérique moins complexe au final.
d'ou est-t-il possible de traiter des données via le port usb en php ?
Merci d'avance.
Posté : 24 mai 2009, 19:54
par Sékiltoyai
Bref, je ne comprends vraiment pas la question…
Je dois realiser un TIPE et le sujet est interface ou surface.
et vu que j'ai fais du php pendant quelques années, je souhaite faire une interface en php.
J'ai donc pensé a une interface qui gére une imprimante, je trouve ca intéressant.
Ouais, difficilement faisable aussi :-/
il faut voir à quel point tu ne veux pas utiliser les fonctions du système
je voulais anticipé les réponses comme exec("print ...");
Bah exec("a2ps …");
d'ou est-t-il possible de traiter des données via le port usb en php ?
Mouais, bah écoute, honnêtement, j'espère que non, sinon ce serait particulièrement choquant…
Pour ce genre de choses, php est particulièrement inadapté.
Posté : 25 mai 2009, 14:00
par enneite
a priori, si tu connais le nom de ton lecteur USB, en executant php en ligne de commande, tu peux te servir de toutes les instructions relatives aux repertoires de ton disques dur.
Après pour des choses plus spécifiques, il y a surement des dll à importer...
Posté : 26 mai 2009, 15:00
par Sékiltoyai
a priori, si tu connais le nom de ton lecteur USB, en executant php en ligne de commande, tu peux te servir de toutes les instructions relatives aux repertoires de ton disques dur.
Après pour des choses plus spécifiques, il y a surement des dll à importer...
Euh, tu parles sous Windows ou Unix ?
Posté : 26 mai 2009, 15:35
par enneite
sous windows.
je dis dll pour un raccourci comme dll dynamiques, on peut même envisager d'en coder soit même en C, c'est ça qui est bien en php, c'est qu'on peut tout faire.
Je pense que sous Unix, le principe reste le même. Mais ça fait lgtps que je n'en ai plus fait

(ça remonte à la fac, au boulot on utilise windows)
Posté : 26 mai 2009, 21:46
par Celtiore
Bonsoir,
je recherche aussi une information de ce genre, j'expose mon cas :
PC sous ubuntu ( mais peu importe )
imprimante ticket USB
application php
besoin d'envoyer des séquences ESC/POS aux l'imprimantes
j'utilise différents autres modèles d'imprimantes : série,ethernet,wifi
pour ethernet - wifi :
Code : Tout sélectionner
$fp = fsockopen("192.168.1.192", 9100 , $errno, $errstr, 30);
$contents = fwrite($fp, $string);
fclose($fp);
pour série :
Code : Tout sélectionner
$port = '/dev/ttyS0';
$handle = fopen($port, 'w');
$contents = fwrite($handle, $string);
fclose($handle);
avec comme commande simple d'initialisation :
ce que ca peu donné avec un $string élaboré :
http://www.projetpos.fr/news.php?rowstart=6
je penses donc que la solution n'est pas du coté de php mais plutot du coté de l'OS, je me permet donc de poster ici au cas ou quand meme, mais aussi pour "promouvoir" le projet que j'essaye de finaliser
je vais me tourner vers les forums ubuntu e linux en esperant trouver une solution...
merci à vous pour ce super forum
Posté : 26 mai 2009, 23:05
par Celtiore
Re :p
bon il suffisait de chercher au bon endroit...
Code : Tout sélectionner
ls -l /dev/usb/*
crw-rw---- 1 root lp 180, 0 2009-05-26 22:50 /dev/usb/lp0
sudo usermod -G lp le_user
puis:
Code : Tout sélectionner
$port = '/dev/usb/lp0';
$handle = fopen($port, 'w');
$contents = fwrite($handle, $string);
fclose($handle);
pour informations il faut installer suphp + php5-cli, car de mémoire on ne peut acceder aux périphériques avec 'php5'
il suffit de suivre à la lettre :
http://doc.ubuntu-fr.org/suphp
Posté : 27 mai 2009, 00:49
par Sékiltoyai
pour informations il faut installer suphp + php5-cli, car de mémoire on ne peut acceder aux périphériques avec 'php5'
Alors c'est quelquepeu imparfait. Je dirais plutôt que l'accès aux périphériques requiert des droits spéciaux, que par défaut apache n'a pas.
Il faut donc soit donner à l'utilisateur d'apache les droits d'accès (sous certains systèmes, comme ubuntu, il suffit d'ajouter l'utilisateur à un groupe), soit lancer apache sous un utilisateur qui a les droits.
SuPHP ne fait qu'exécuter le script sous un utilisateur différent.
Posté : 27 mai 2009, 07:25
par Celtiore
Bonjour,
Oui merci de cette précision, je me suis en effet très mal exprimé et n'etant developpeur j'ai un peu de mal ...
Posté : 27 mai 2009, 20:42
par Yo4nn
Merci pour vos réponses ,
je pense que je vais développer mon application plutôt sous linux si il suffit de faire :
$port = '/dev/usb/**';
$handle = fopen($port, 'w');
....
fclose($handle);
Merci enneite pour les dll je vais aussi me renseigner sur le sujet.
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]
Posté : 27 mai 2009, 21:55
par orgerix
Sinon, aucun rapport avec le sujet, mais je te conseille de bien réfléchir si ton sujet entre dans le thème. Je suis moi même en prépa et je n'ai qu'entendu parler de surfaces et non d'interfaces. Et si tu commence à extrapoler le sujet, tu risque de tomber dans le hors sujet, ce qui je pense sera mal vu, puisque justement le sujet a été beaucoup plus ciblé que les autres années (l'informaiton, stabilité et variabilité).
Cependant, l'arreté n'est pas encore sorti, et tout ce qu'on entend n'est que rumeur. Il faudra vérifier lors de sa publication (qui ne devrait as tarder).
Concernant ce que tu veux faire, PHP est un langage de haut niveau et donc logiquement ne dois pas s'occuper de la gestoin des périférique. Il suppose qu'il existe des drivers qui le fait à sa place. Ensuite, PHP est (à la base) un langage web. Ainsi, l'accès aux périférique, que ce soit clavier écran, imprimante... n'entre pas dans le fonctionnement normal de PHP. Pour cela, il faudrait se pencher sur le C (et encore, je suis pas sur qu'on puisse tout faire avec)
Si tu veux poursuivre dans ton idée d'interface, je pense qu'il sera plus facile (et plus riche, faire juste executer une fonction d'un OS n'est pas trop interessant)) de créer une interface entre deux applications. Je ne sais pas, par exemple transformer une BDD en un fichier OpenOffice et inversement. Même si on sort légèrement de l'usage normal de PHP dans l'esprit, ca reste tout de même quelque chose de faisable.