exec() naar /dev
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;
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
Gewijzigd op 25/11/2010 14:48:20 door Daan Onbekend
Gebruik bij echo ook eens het hele path. Waarschijnlijk /bin/echo.
Toevoeging op 25/11/2010 15:00:19:
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-
Quote:
"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.
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.
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.
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.
Gewijzigd op 25/11/2010 19:38:14 door Daan Onbekend
- 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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
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
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!
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:
Het is dus een rechtenprobleem.
Bovenstaand werkt wel dus het is inderdaad een kwestie van rechten uitzoeken.
In /tmp mag "iedereen" schrijven.
Gewijzigd op 25/11/2010 21:34:21 door Aad B
Hier is iemand met een soortgelijk probleem (alleen fopen ipv exec), en die geeft aan dat het met suphp wel werkt.
https://answers.launchpad.net/ubuntu/+source/php4/+question/5169
Ik ga maar eens in suphp verdiepen...
en het werkt, dus issue is autorisatie en dat geld ook voor je seriele poort.
Gewijzigd op 25/11/2010 22:06:56 door Aad B
Na het chmodden van /dev/ttyUSB0 kan ik er niets meer naartoe sturen.
In de terminal blijf hij hangen, en ik krijg geen error.
In php blijft de pagina laden. (Ik bedenk mij nu, dat dit erop duid dat hij geen permissieproblemen heeft, anders hing hij niet.)
Nou heeft dit denk ik met deze bug te maken:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/661321
Deze bug heeft al eerder wat roet in het eten gegooid.
Ik heb een "rs232 gender changer" gekocht, zodat ik niet meer afhankelijk ben van die USB kabel, maar ik de rs232 poort op mijn singleboardcomputer kan gebruiken.
Hier wacht ik dus op, zodra ik die binnen heb ga ik verder...
In ieder geval bedankt voor jullie hulp.
Gewijzigd op 25/11/2010 22:23:47 door Daan Onbekend