Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Le_Ze 11 Srpna 2014, 09:26:43
-
Zdravím.
Jelikož v linuxu jsem úplný začátečník a s některých věcí mam hlavu jak meloun, chtěl bych poprosit, zda by se tu nenašla dobra duše, která by mi pomohla vyřešit tento problém.
Mam nainstalovaný Lighttpd servr a PHP
Dočet jsem se, že přes htm jde spustit python skrypt.
Tento problém řeší tady.
http://raspberrypi.stackexchange.com/questions/7365/php-to-execute-python-scripts-for-gpio
Je tam par rad, ale moc je nechápu.
Rad bych toto vyřešil i za předpokladu že bych měl odinstalovat Lighttpd a nainstalovat ten
SimpleHTTPServer jak tam radí.
Pomůže někdo zkušeny?
-
zkus jestli ti php vůbec funguje.
V document rootu toho webserveru (nejspíš /var/www) vytvoř soubor info.php s následujícim obsahem
<?php phpinfo();
a v prohlížeči zkus http://localhost
když se ti zobrazí tabulka s informacemi o php serveru, server běží a je chyba ve scriptech nebo v právech souboru
-
Běží.
PHP Version 5.4.4-14+deb7u12
-
A tak píše ti to nějakej error nebo co se s tím děje? Pošli sem ten php script který chceš spustit.
-
to je spatne takhle ..
v tom skriptu musi byt
<?php
phpinfo();
?>
musi byt ulozenej nekde v DocumentRoot treba jako info.php a musis ho dat samozrejme do te URL
-
No i to co poradil Mariocz funguje a tabulka se vykreslí.
Bližší info abych vyloučil nějaký můj kopanec.
Jede to na systému raspbian.
Bud se přihlašují jako pi a používám sudo
Nebo se přihlašují jako root.
Zkoušel jsem python skript umístit přímo do var/www/
exec('sudo python /var/www/test.py');
Také jsem zkusil skript umístit do python /home/pi/
exec('sudo python /home/pi/test.py');
Tento htm je ořezané s té stránky.
<html>
<head>
<?php
if (isset($_POST['RedON']))
{
exec('sudo python /home/pi/skript.py');
?>
<title></title>
</head>
<body>
<form method="post">
<table
style="width: 75%; text-align: left; margin-left: auto; margin-right: auto;"
border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
</tr>
<tr>
<td style="text-align: center;"><button name="RedON">Red On</button></td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
Jinak žadnou chybu to nevyhazuje,jen se nic neděje.
-
Že by tento konstrukt nevyhodil chybu se mi nezdá:
<?php
if (isset($_POST['RedON']))
{
exec('sudo python /home/pi/skript.py');
?>
Chybí tam uzavření podmínky (}). Pokud je toto zdroj zobrazené stránky, pak bych tipl, že má příponu htm/html a tedy se server ani nepokouší nad tím spustit PHP interpert.
PS: V novějších verzích PHP je v defaultu zakázán výpis chyb - musí se explicitně povolit v php.ini, položka display_errors
PSS: fce exec může být v distru zakázána (a docela dobře vím, proč bych ji tak nechal ...)
-
ntz pravda, v url to má být.. u sebe to píšu jako index.php a teď jsem to chtěl udělat srozumitelně a nedomyslel to do konce :) Uzavírací značka php je nepovinná.
Le_Ze: Asi přímo napiš co se tím snažíš docílit protože je vidět že nevíš co děláš a zkoušíš kopírovat a spouštět co najdeš, pomůžeme ti pak líp.
script spustíš takhle, to okolo tam být vůbec nemusí
<?php
exec('python /home/pi/skript.py');
?>
ovšem soubor musí být spustitelný a majitelem souboru musí být uživatel toho webserveru (u apache www-data)
ale spíš bych na to bejt tebou zapomněl jestli to neni životně důležitý protože se k výsledku bez větší pomoci stejně nedokopeš a jestli je ten stroj přístupný z venku tak si tam nasekáš ještě velký bezpečnostní díry.
-
ale spíš bych na to bejt tebou zapomněl jestli to neni životně důležitý protože se k výsledku bez větší pomoci stejně nedokopeš a jestli je ten stroj přístupný z venku tak si tam nasekáš ještě velký bezpečnostní díry.
Tak toto je hodně duležite.
Bez toho mohu strčit Raspi do vitrínky :-X :-X
Le_Ze: Asi přímo napiš co se tím snažíš docílit protože je vidět že nevíš co děláš a zkoušíš kopírovat a spouštět co najdeš, pomůžeme ti pak líp.
Tak jo no, s pravdou ven.
K rasperi se da připojít čip MCP23017 a pomocí knihovny WiringPi2 ovládat.
http://raspi.tv/2013/using-the-mcp23017-port-expander-with-wiringpi2-to-give-you-16-new-gpio-ports-part-3
#!/usr/bin/python
# -*- encoding: utf-8 -*-
import wiringpi2 as wiringpi
from time import sleep
pin_base = 65 # lowest available starting number is 65
i2c_addr = 0x20 # A0, A1, A2 pins all wired to GND
wiringpi.wiringPiSetup() # initialise wiringpi
wiringpi.mcp23017Setup(pin_base,i2c_addr) # set up the pins and i2c address
wiringpi.pinMode(65,1) #pin GPA 0 na výstup
wiringpi.digitalWrite(65,1) #pin GPA 0 zapne
sleep(5)
wiringpi.digitalWrite(65,0) #pin GPA 0 vypne
Když spustím tento skript
sudo python /home/pi/test.py
sepne mi to rele, které da impuls mechanismu pro otvíraní brany.
Fungovat to funguje dobře.
Jenže spouštět putty v mobilu a otvírat to přes ten příkaz je zdlouhavé.
Proto bych rad nějakou tu php stránku s gombikama, které by ten skript spouštěli
Jinak routr je zabespečen a za natem.
Na střeše mam wi-fi.
Když přijiždím k domu, tak se mobil připojí k te wi-fi.
Takže žadne bezpečnostní ryziko nehrozí
-
nebylo by pak lepší zpracovávat python přímo tím webserverem?
http://www.linuxsoft.cz/article.php?id_article=1644 (http://www.linuxsoft.cz/article.php?id_article=1644)
-
script přesuň do /var/www/scripts aby na něj webserver viděl a dej mu spustitelný příznak
cp /home/pi/test.py /var/www/scripts
chmod +x /var/www/scripts/test.py
pak v terminálu spusť sudo visudo
a na konec přidej tenhle řádek - povolí pouštět ten příkaz se sudo bez zadání hesla pro uživatele lighttpd (na rychlo jsem pogooglil že default user je lighttpd ale jistej si nejsem)
lighttpd ALL=NOPASSWD: /var/www/scripts/test.py
do /var/www/ hoď soubor gate.php s obsahem
<?php
exec('sudo python /var/www/scripts/test.py');
?>
v prohlížeči zkus adresu localhost/gate.php, skript by se měl provést
-
dej mu spustitelný příznak
cp /home/pi/test.py /var/www/scripts
chmod +x /var/www/scripts/test.py
a na konec přidej tenhle řádek - povolí pouštět ten příkaz se sudo bez zadání hesla pro uživatele lighttpd (na rychlo jsem pogooglil že default user je lighttpd ale jistej si nejsem)
lighttpd ALL=NOPASSWD: /var/www/scripts/test.py
Toto nějak nechapu?
-
cp zkopíruje script do složky kam se webserver dostane a pak mu pomocí chmod nastavíš práva aby ho bylo možný spustit
vždyť to tam máš napsaný. Buď trochu konkrétní a napiš co nechápeš.
-
cp zkopíruje script do složky kam se webserver dostane a pak mu pomocí chmod nastavíš práva na spuštění
Takže vše zadat do terminalu?
root@raspberrypi:~# lighttpd ALL=NOPASSWD: /var/www/scripts/test.py
2014-08-11 11:22:46: (server.c.617) No configuration available. Try using -f opt ion.
-
jo, první tři příkazy do terminálu, ve třetím jsem měl chybku a opravil ho. ten zadáš, otevře ti k editaci soubor sudoers, tam přidáš řádek který jsem napsal a CTRL+o uložíš, CTRL+x zavřeš.
pak vytvoř ten php soubor a vyzkoušej. Případný chyby a výpisy sem pak pošli
-
doporucuji ohledat jine moznosti, nez to poustet se sudo .. nicmene pokud to se sudo poustis, tak udelej ten skript alespon aby ho vlastnil root s pravy 755
-
Tak jsem udělal vše jak jste napsali a nic.
Přes FileZillu jdem vlez do Pi a nastavil souboru prava na 777.
Pak ho překopiroval.
cp /home/pi/test.py /var/www/scripts
Nevím zda mu ty prava 777 při kopirovaní zustanou?
Pak chmod +x /var/www/scripts/test.py
Pak sudo visudo
A do něj jsem na konec vložil lighttpd ALL=NOPASSWD: /var/www/scripts/test.py a uložil.
No nefunguje to :-\
-
Tak jsem udělal vše jak jste napsali a nic.
Přes FileZillu jdem vlez do Pi a nastavil souboru prava na 777.
Pak ho překopiroval.
cp /home/pi/test.py /var/www/scripts
Nevím zda mu ty prava 777 při kopirovaní zustanou?
Pak chmod +x /var/www/scripts/test.py
Pak sudo visudo
A do něj jsem na konec vložil lighttpd ALL=NOPASSWD: /var/www/scripts/test.py a uložil.
No nefunguje to :-\
tak tos udelal uplne spatne s plnou ignoraci vseho co rikam .. uz me to nebavi ... delejte si to lidi jak chcete
-
Co jsem posmolil?
Každy jednou začinal :-\
-
1) ty mas ohledat, jestli vubec potrebujes sudo na ten skript !! pokud ne, tak zadne editovani sudoers, mozna budes muset lighthttpd uzivatele pridat do nejake skupiny navic, aby mohl pristupovat k prislusnym /dev/xyz souborum asociovanym se Tvym fyzickym zarizenim
2) pokud to sudo opravdu potrebujes, tak jsem ti rekl, ze prava 777 proste ten skript nesmi mit !!!!! ma ho vlastnit root a ma mit 755 .. Nicmene pokud to spravne nastavis, tak na 99% zadne sudo nebudes potrebovat
3) pokud ten skript poustis pomoci ``exec('sudo python /var/www/scripts/test.py');'' a v sudoers mas ``lighttpd ALL=NOPASSWD: /var/www/scripts/test.py'' tak to taky nemuze fungovat, protoze to bys tam musel mit ``lighttpd ALL=NOPASSWD: python /var/www/scripts/test.py'' .. A to ani neresim, jestli to skutecne vubec bezi pod uzivatelem "lighthttpd"
-
1) ty mas ohledat, jestli vubec potrebujes sudo na ten skript !! pokud ne, tak zadne editovani sudoers, mozna budes muset lighthttpd uzivatele pridat do nejake skupiny navic, aby mohl pristupovat k prislusnym /dev/xyz souborum asociovanym se Tvym fyzickym zarizenim
No mam odzkoušene že pokud se přihlasím jako PI tak sudo potřebují.
Pokud jako root, tak mi to jede bez sudo.
-
Hm,budu hadat.
a) Skončila pracovní doba a všichni šli domu.
b) Vy--ali jste se na mně.
Asi B je spravně :-X
-
Hm,budu hadat.
a) Skončila pracovní doba a všichni šli domu.
b) Vy--ali jste se na mně.
Asi B je spravně :-X
uz jsme ti napsali co mas udelat .. proste psat to porad dokola nikam nevede .. nevim, co by sis vic predstavoval
-
Tak vyřešeno.