exec() naar /dev
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;
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
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
Wat zou er moeten gebeuren als je die hexFF naar die port stuurt?
Gebruik bij echo ook eens het hele path. Waarschijnlijk /bin/echo.
Toevoeging op 25/11/2010 15:00:19:
Staat de c er nog wel vóór? crw-rw-rw-
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.
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.
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.
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
@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:
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!
- 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!
@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:
Het is dus een rechtenprobleem.
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.
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
Bovenstaand werkt wel dus het is inderdaad een kwestie van rechten uitzoeken.
In /tmp mag "iedereen" schrijven.
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
Chmodden en chownen werk niet.
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...
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...
De oplossing is simpel, het php script probeert de exec uit te voeren in je DocumentRoot. Ik heb een directory aangemaakt: mkdir test en vervolgens chmod 777 test en het script aangepast:
en het werkt, dus issue is autorisatie en dat geld ook voor je seriele poort.
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
Helaas, hierdoor ontstaat er een ander probleem.
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.
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




