Hallo,

Ik wil graag een hexadecimale waarde naar een rs232 poort sturen onder linux.

Als ik in een terminal dit intyp: echo -e '\xFF' > /dev/ttyUSB0
Dan werkt dit gewoon.

Als ik echter dit doe;

<?php
echo exec("echo -e '\xFF' > /dev/ttyUSB0");
?>

Dan werkt het niet meer (geeft een lege pagina).

Kan iemand mij vertellen hoe ik ervoor zorg dat php ook toegang to /dev heeft.
Ik heb /dev al gechmod naar 777, maar dat maakt niets uit.



Bvd
Wat zou er moeten gebeuren als je die hexFF naar die port stuurt?
Gebruik bij echo ook eens het hele path. Waarschijnlijk /bin/echo.

[size=xsmall]Toevoeging op 25/11/2010 15:00:19:[/size]

Daan Middendorp op 25/11/2010 14:47:47

Ik heb /dev al gechmod naar 777, maar dat maakt niets uit.


Staat de c er nog wel vóór? crw-rw-rw-
"Dan werkt dit gewoon."

Wat krijg je als output in console? En de lege pagina, weet je zeker dat hij de opdracht niet uitvoert?

Let er ook op dat je waarschijnlijk als een andere gebruiker het commando uitvoert (apache, www-user oid)
Natuurlijk kan je ook nog testen door eerst gewoon echo te doen, zonder naar /dev te schrijven.
exec()
The last line from the result of the command. If you need to execute a command and have all the data from the command passed directly back without any interference, use the passthru() function.
vraagje: je hebt een USB seriele rs232 poort op je machine ?
de normale seriele devices zijn ttyS0 t/mttyS3
Je kan de werking van de echo onder php ook eerst testen naar file:
echo -e '\xFF' > test.log
test.log komt dan in de $HOME (meestal /home/apache) van apache terecht waar apache mag schrijven. Dan weet je in ieder geval dat het werkt vanuit php.
@SanThe
Dan moet er een dimmer aangestuurd worden die mijn verlichting aanzet (hier wil ik een webinterface omheen bouwen)
Het hele pad naar echo gebruiken maakt ook niet uit (als ik echo exec('echo test'); doe, dan werkt dat ook gewoon)
En de c staat er nog gewoon voor.

@Chris
Als ik het commando in een terminal uitvoer, dan krijg ik geen enkele output, maar mijn verlichting gaat wel aan.

@Karl
Ja, dat werkt gewoon.

@John
Het is inderdaad een usb->rs232.
echo -e '\xFF' > test.log lijkt niet te werken.
Ik heb géén /home/apache of iets dergelijks, en ik kan dit bestand ook niet vinden.
Als ik er echo -e '\xFF' > /home/daan/test.log van maak, dan werkt het trouwens ook niet.

@Daan "echo -e '\xFF' > /home/daan/test.log" kan niet werken omdat apache (de owner van de webdeamon/webserver) mag niet schrijven in /home/daan.
- check of apache inderdaad owner is van de webserver/webservice door in de console/terminal te doen: ps -ef |grep http
Dat moet iets van deze output opleveren:

ps -ef |grep http
root      2430     1  0 07:41 ?        00:00:00 /usr/sbin/httpd
root      2453  2430  0 07:41 ?        00:00:00 /usr/sbin/rotatelogs /var/log/ht
tpd/mysql_log 86400 +60
apache    2484  2430  0 07:41 ?        00:00:00 /usr/sbin/httpd
apache    2485  2430  0 07:41 ?        00:00:00 /usr/sbin/httpd
apache    2486  2430  0 07:41 ?        00:00:00 /usr/sbin/httpd
apache    2487  2430  0 07:41 ?        00:00:00 /usr/sbin/httpd
apache    2488  2430  0 07:41 ?        00:00:00 /usr/sbin/httpd
apache    2489  2430  0 07:41 ?        00:00:00 /usr/sbin/httpd
apache    2490  2430  0 07:41 ?        00:00:00 /usr/sbin/httpd
apache    2491  2430  0 07:41 ?        00:00:00 /usr/sbin/httpd
root      6964  6935  0 20:34 pts/0    00:00:00 grep http

apache is dus eigenaar en zal het bestand test.log proberen te schrijven.
voer dat in php uit zonder pad specs: echo -e '\xFF' > test.log
Zoek vervolgens het bestand met:
find / -name test.log -print
Als het bestand niet gevonden wordt dan is er misschien een php error.
Die kan je vinden in /var/log/httpd/error_log !
Je kan in een andere console/terminal een tail -f doen op dit bestand:
tail - f /var/log/httpd/error_log
en alle php fouten komen netjes voorbij!
@Aad
Het bestand test.log is in het hele bestandssyteem niet te vinden.

Deze foutopsporingsmethode kende ik niet, de foutmeldingen die ik hierin tegengekomen ben zijn:


sh: cannot create test.log: Permission denied




_mcleanup: gmon.out: Permission denied
error opening /dev/ttyUSB0


Het is dus een rechtenprobleem.
in principe moet apache wel in zijn home directory een test.log kunnen schrijven. Het lukt mij ook niet, ik krijg ook een sh: test.log: Permission denied

<?php
echo exec("echo -e '\xFF' > /tmp/test.log");
?>

Bovenstaand werkt wel dus het is inderdaad een kwestie van rechten uitzoeken.
In /tmp mag "iedereen" schrijven.

Reageren