Exécuter le script Python à partir de Php

j'ai une page Web PHP sur mon raspberry pi avec 2 boutons (on et off)) Le bouton le bouton redirige Sur.php Le bouton off redirige vers Off.php Dans "/ usr / lib / cgi-bin", j'ai un script python que je voudrais exécuter (script.py) Je peux parfaitement l'exécuter à partir du terminal en tapant

cd /usr/lib/cgi-bin
sudo python script.py

ça marche si je le fais depuis le terminal.

le problème est le fichier PHP (On.php) dans mon "/var/www" le dossier. C'est ce que j'ai écrit:

<?php
exec('cd /usr/lib/cgi-bin');
exec('sudo python script.py');
?>

Pourquoi le script qui s'exécute depuis le terminal, mais pas depuis mon PHP?

10
demandé sur ChubbyChocolate 2015-08-04 16:54:22

3 réponses

vous ne pouvez pas utiliser sudo à partir d'un script PHP. Apache s'exécute à partir d'un utilisateur (www-data generaly), alors éditez ce fichier:/etc/sudoers

puis ajouter cette ligne:

www-data ALL=(ALL) NOPASSWD:ALL

Soins ! cela autorisera toutes les fonctions à être appelées par un script PHP, vous pouvez adapter la modification de "tout" par votre script ou la commande Python.

alors précisez votre utilisateur dans votre commande exec:

<?php
exec('sudo -u www-data python /usr/lib/cgi-bin/script.py')
12
répondu Vincent Decaux 2015-08-04 14:03:02

Essayer, cela devrait fonctionner:

<?php 
system("cd /usr/lib/cgi-bin");
system("sudo python script.py");
?>

Ou encore:

<?php 
system("cd /usr/lib/cgi-bin && sudo python script.py");
?>
3
répondu Alberto Pagani 2016-02-21 21:45:59

sur une ancienne distribution Raspbian, vous devez placer votre fichier dans /var/www/file.py. Donc, dans votre fichier.php vous ajoutez:

{
    exec("sudo python /var/www/file.py");
}

sur une Jessie Raspabe plus récente vous devez placer votre fichier dans /var/www/html/file.py, donc dans votre fichier.php, vous devez ajouter:

{
    exec("sudo python /var/www/html/file.py");
}

ou n'importe laquelle file.py

<?php
{
  exec("sudo python test.py");
}