2015-09-16 2 views
3

Я запускаю документ PHP на сервере Apache на моем малине Pi, и я хочу, чтобы он запускал файл при нажатии кнопки. Я поместил несколько команд эха под командой, чтобы сделать файл запущен, и он распечатывается, но файл не запускается. Файлы index.php и lightson.py и lightsoff.py находятся в одном каталоге (/var/www), и я добавил #!/Usr/bin/env python в начало обоих файлов и сделал их выполнимыми, используя chmod + x lights.png. Если я запускаю команду из оболочки, она работает и включает свет точно так же, как я хочу, с той же командой, что и в файле, но все же она не будет выполняться через команду. Код:Невозможно выполнить скрипт Python из документа PHP

<html> 
<head> 
<title>Light Controller</title> 
</head> 


<?php 
if (isset($_POST['LightON'])) 
{ 
shell_exec("sudo python /var/www/lightson.py"); 
echo("on"); 
} 
if (isset($_POST['LightOFF'])) 
{ 
shell_exec("sudo python /var/www/lightsoff.py"); 
echo("Off"); 
} 
?> 

<form method="post"> 
<button name="LightON">Light ON</button>&nbsp; 
<button name="LightOFF">Light OFF</button><br><br> 
</form> 


</html> 

ответ

2

, как вы сказали, что вы работаете его как apache->php->shell_exec(SUDO..)

Таким образом, пользователь апач должен быть в sudoers файла, лучше не давать Sudo в Apache вместо этого дать апача (WWW-данные) право пользователя, чтобы запустить ваш питон программа

поставить первую строку в питон скрипт: #!/usr/bin/env python поэтому скрипт знает, какую программу, чтобы открыть его ..

затем

изменение группы:

chgrp www-data /path/to/python-script.py 

сделать executabel

chmod +x /path/to/python-script.py 

попробовать

shell_exec("/path/to/python-script.py"); 

Я надеюсь, что он работает;)

TIPP: Apache и PHP являются для доставки Documents and Strings , если вы хотите, чтобы какой-то контроль и API начинались без dejs и https://www.npmjs.com/package/rpi-gpio упаковка. Таким образом, вы будете иметь одно место для вашей твердой среды автоматизации

+0

Итак, как я могу предоставить права доступа к файлам apache? @webdeb – Bruh

+0

Я сделал все это, но он все еще не хочет этого делать. @webdeb – Bruh

+1

Используя команду ls -l, она дает мне следующие разрешения для каждого файла: -rw-r - r-- 1 root root 391 Sep 16 02:46 index.php, -rwxr-xr-x 1 root www-data 654 Sep 16 01:11 lightson.py, -rwxr-xr-x 1 root www-data 653 Sep 16 01:10 lightsoff.py @webdeb – Bruh

1

Это работает для меня:

test.php

<?php 
    echo shell_exec("python test.py"); 
?> 

test.py

f = open("test.txt", "a+") 
f.write("hiya buddy!!\n") 
f.close() 
print "some output" 

Вот мой соответствующий ls -l вывод от /var/www/html:

[email protected] /var/www/html $ ls -l 
-rw-r--r-- 1 jason jason 44 Sep 20 18:12 test.php 
-rwxr-xr-x 1 jason jason 82 Sep 20 17:44 test.py 
-rw-rw-rw- 1 jason jason 38 Sep 20 18:15 test.txt 

Поскольку у меня нет контактов GPIO на моем ноутбуке, я решил написать файл в качестве теста. Заметьте, мне не пришлось использовать sudo из-за того, как я установил разрешения на test.py.

+0

Это не сработало для меня ... правильный вывод ls -l будет корнем вместо jason, поскольку Я запускаю пользователя pi по умолчанию на моем малиновом пи? – Bruh

+0

'root' должно быть в порядке, если разрешения файла python имеют три' x' в нем. Вы пробовали мой код и записывали в файл, или вы пытались манипулировать контактами GPIO, используя этот код в качестве руководства? – Jason

+0

Я пытался манипулировать контактами GPIO с помощью моего кода ... должен ли я использовать код, который вы вставили выше, и поместить мой код в файл .txt? – Bruh

Смежные вопросы