Nefunguje php-serial na serveru, na lokále ano

Nefunguje php-serial na serveru, na lokále ano
« kdy: 14. 12. 2017, 10:19:08 »
Zdravím Vás tu všechny.

https://github.com/rubberneck/php-serial

Jsem stah ten balik.
Web je na /var/www
Tam je můj PHP a nakopčíl jsem tam i ty 2 soubory (composer.json a php_serial.class.php)
Žandou chybu to nevyhazuje ale nefunguje to.
 
Kód: [Vybrat]
<?php
error_reporting
(E_ALL);
ini_set("display_errors"1);

include 
php_serial.class.php;

$serial = new PhpSerial;
$serial->deviceSet("/dev/ttyAMA0");
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");
$serial->deviceOpen();
$serial->sendMessage("hups");
$serial->deviceClose();
?>

Zkoušel jsem to přes python a lazarus a přes ně to chodí.
Kde muže byt problém?
« Poslední změna: 14. 12. 2017, 10:27:54 od Petr Krčmář »


Re:php-serial
« Odpověď #1 kdy: 14. 12. 2017, 10:22:18 »
$serial->deviceSet("/dev/ttyAMA0");
[...]
Zkoušel jsem to přes python a lazarus a přes ně to chodí.

Má uživatel, pod kterým běží PHP práva k /dev/ttyAMA0?
Když jste to zkoušel přes python a lazarus, bylo to pod stejným uživatelem, jako běží PHP?

Re:Nefunguje php-serial na serveru, na lokále ano
« Odpověď #2 kdy: 14. 12. 2017, 11:34:51 »
http://www.raspi.cz/2013/02/propojujeme-raspberry-pi-arduino/
Citace
Naše sériové rozhraní má soubor umístěný v /dev/ttyACM0. Abychom s ním mohli komunikovat i bez práv roota, je nutné být ve skupině dialout.
pi@raspberrypi-test ~ $ sudo usermod -a -G dialout pi

sudo visudo
www-data ALL=(ALL:ALL) NOPASSWD: ALL 
uživatel www-data teď bude mít stejná práva jako uživatel pi.

Piny jdou přes PHP normálně ovládat a  i2c take takže asi ok.


Re:Nefunguje php-serial na serveru, na lokále ano
« Odpověď #3 kdy: 14. 12. 2017, 12:07:24 »
Tak není to dobrý.
Jak přes python tak přes lazarus to musím spouštět přes sudo.
Jako pi to nejede.
Jak pi tak www-data jsou ve skupině dialout.
Kde pak je problem?

Youda

Re:Nefunguje php-serial na serveru, na lokále ano
« Odpověď #4 kdy: 14. 12. 2017, 15:06:16 »
Tak není to dobrý.
Jak přes python tak přes lazarus to musím spouštět přes sudo.
Jako pi to nejede.
Jak pi tak www-data jsou ve skupině dialout.
Kde pak je problem?

Predpokladam, ze sudo vadi, ze nema k dispozici tty.
Pro spousteni pod userme zabbix pouzivam v sudoers tuto direktivu, ktera kontrolu tty disabluje:

Defaults:zabbix    !requiretty

A predpokladam, ze sudo logu toto sudo primo pise.

Pak bych se este mrkl na selinux.


Re:Nefunguje php-serial na serveru, na lokále ano
« Odpověď #5 kdy: 14. 12. 2017, 19:14:04 »
Dotaz.
Kód: [Vybrat]
<?php
error_reporting
(E_ALL);
ini_set("display_errors"1);

include 
php_serial.class.php;

$serial = new PhpSerial;
$serial->deviceSet("/dev/ttyAMA0");
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");
$serial->deviceOpen();
$serial->sendMessage("hups");
$serial->deviceClose();
?>
Když to spustím přes terminal tak vyskočí chyba
Kód: [Vybrat]
PHP Parse error:  syntax error, unexpected 'class' (T_CLASS) in /var/www/example.php on line 5

.

Re:Nefunguje php-serial na serveru, na lokále ano
« Odpověď #6 kdy: 14. 12. 2017, 19:45:11 »
Proč se přidáváš do skupiny dialout, když jí ten soubor nepatří?

Proč šaškuješ s PHP, když ho ani trochu neumíš a máš jiné funkční řešení? Parametr pro include má být string.


Re:Nefunguje php-serial na serveru, na lokále ano
« Odpověď #7 kdy: 14. 12. 2017, 20:22:58 »
include "php_serial.class.php";

Kód: [Vybrat]
PHP Fatal error:  Uncaught Error: Class 'phpSerial' not found in /var/www/example.php:6
Stack trace:
#0 {main}
  thrown in /var/www/example.php on line 6

Fatal error: Uncaught Error: Class 'phpSerial' not found in /var/www/example.php:6
Stack trace:
#0 {main}
  thrown in /var/www/example.php on line 6

Line 6  $serial = new phpSerial;


ByCzech

  • *****
  • 1 863
    • Zobrazit profil
    • E-mail
Re:Nefunguje php-serial na serveru, na lokále ano
« Odpověď #8 kdy: 14. 12. 2017, 20:49:34 »
include "php_serial.class.php";

Kód: [Vybrat]
PHP Fatal error:  Uncaught Error: Class 'phpSerial' not found in /var/www/example.php:6
Stack trace:
#0 {main}
  thrown in /var/www/example.php on line 6

Fatal error: Uncaught Error: Class 'phpSerial' not found in /var/www/example.php:6
Stack trace:
#0 {main}
  thrown in /var/www/example.php on line 6

Line 6  $serial = new phpSerial;

Doporučuji nastudovat "namespace".

Re:Nefunguje php-serial na serveru, na lokále ano
« Odpověď #9 kdy: 14. 12. 2017, 21:03:26 »
Asi bude rozumnější spouštět přes tu PHP stranku ten muj python skript.
Bude to sice prasarná ale asi jedine řešení.

Ja myslel že to bude jednoduché.
https://stackoverflow.com/questions/10373308/php-serial-communication-in-linux
http://www.ko4bb.com/getsimple/index.php?id=serial-port-access-from-php-with-raspberry-pi


ByCzech

  • *****
  • 1 863
    • Zobrazit profil
    • E-mail
Re:Nefunguje php-serial na serveru, na lokále ano
« Odpověď #10 kdy: 14. 12. 2017, 21:09:07 »
Asi bude rozumnější spouštět přes tu PHP stranku ten muj python skript.
Bude to sice prasarná ale asi jedine řešení.

Ja myslel že to bude jednoduché.

Kód: [Vybrat]
...
require_once "php_serial.class.php";
use phpSerial;

$serial=new \phpSerial\phpSerial;
...

to mi přijde jednoduché dost :)

Youda

Re:Nefunguje php-serial na serveru, na lokále ano
« Odpověď #11 kdy: 14. 12. 2017, 21:50:56 »
A je nejaky duvod ovladat seriovy port z PHP krome cireho masochismu?

Na web microservices je mnohem lepcejsi GO, naucit se da pres vikend.
Vysledek je lehka zkompilovana bimarka

Re:Nefunguje php-serial na serveru, na lokále ano
« Odpověď #12 kdy: 15. 12. 2017, 05:34:53 »
A je nejaky duvod ovladat seriovy port z PHP krome cireho masochismu?
https://play.google.com/store/apps/details?id=com.idlegandalf.httprequestwidget&hl=cs

Ten widjet umí přes Get spustit php.
Už dlouho ho použivám pro ovladaní zařizení přes I2C sběrnicí a take pro ovladaní pinu na respi.

aní po upravě jak poradíl ByCzech to nejede  :'(
« Poslední změna: 15. 12. 2017, 05:42:25 od BigSandy »

Re:Nefunguje php-serial na serveru, na lokále ano
« Odpověď #13 kdy: 15. 12. 2017, 06:20:50 »
Kdyby nahodou se tu našel někdo, kdo by věděl jak na to a byl by ochotný pomoct, byl bych tad.

Jinak stačí někam do skriptu při spouštění si natvrdo nastavít přenosovou rychlost.

sudo stty -F /dev/ttyAMA0 9600

A přes PHP odesilat jako systém přikazy
system ('echo test> /dev/ttyAMA0');

Odzkoušené a funkční.  :P