Aller au contenu


Photo
- - - - -

RasPi avec Apache et CGI


  • Veuillez vous connecter pour répondre
33 réponses à ce sujet

#1 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 06 octobre 2015 - 09:49

Bonjour à tous,

 

Je veux utiliser pour la première fois un script cgi sur un serveur WEB ! sur ma raspberry Pi mais cela ne veut pas fonctionner !!!

 

apache renvoit tjrs l'erreur : 

Internal Server Error

 

Voila j'ai installé apache qui fonctionne correctement ensuite j'ai placé dans le repertoire cgi-bin un fichier test.py et un fichier index.html dans var/www

 

fichier html

<html>
<head><title>KBOT</title></head>
<body>
<form action='cgi-bin/test.py' method='post'><input type='text' name='post'><input type='submit'></form>
</body>
</html>

fichier .py

#!/usr/bin/env python

import cgi
import cgitb

cgitb.enable()

print "Content-type: text/html\n\n"

form=cgi.FieldStorage()

if "post" not in form:
    print "<h1>The text area was empty.</h1>"
else:
    text=form["post"].value
    print "<h1>Text from text input:</h1>"
    print cgi.escape(text)

Ensuite j'ai modifié mon fichier de configuration apache par défaut en faisant :

 

nano /etc/apache2/sites-available/default :
 
j'ai ajouté les extensions .py
 
 
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                AddHandler cgi-script cgi pl py
                Order allow,deny
                Allow from all
        </Directory>
 
 
redemmarré le service apache2 ! j'ai mm testé en faisant un chmod +x test.py !!
 
j'ai suivi plusieurs tutoriaux mais je reste coincé ;-)
 
J'ai bien les modules python et cgi d'installé !
 
root@raspberrypi:~# a2enmod python
Module python already enabled
root@raspberrypi:~# a2enmod cgi
Your MPM seems to be threaded. Selecting cgid instead of cgi.
 
 
Cordialement,
bypbop


#2 Gyro49

Gyro49

    Membre occasionnel

  • Membres
  • Pip
  • 246 messages
  • Gender:Male
  • Location:Angers, France
  • Interests:Les nouvelles technologies

Posté 07 octobre 2015 - 10:54

Bonjour,

 

Est-ce que c'est la méthode cgi-bin que tu recherche ?

Sinon j'ai trouvé ça : le lien chercher la rémponse de 'Torgar' du 16/05/2013

 

A+



#3 Gyro49

Gyro49

    Membre occasionnel

  • Membres
  • Pip
  • 246 messages
  • Gender:Male
  • Location:Angers, France
  • Interests:Les nouvelles technologies

Posté 07 octobre 2015 - 11:07

Avec le lien c'est mieux

 

http://www.developpez.net/forums/d1343780/php/scripts/lancer-script-python-php/



#4 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 07 octobre 2015 - 11:47

Bonjour Gyro49,

 

Je chercher à envoyer des infos  à un sript python que j'ai placé dans le répertoire cgi-bin !

pour cela j'ai un form html placé dans www et un script py placé dans lib/cgi-bin .

 

par contre j'ai pas trop compris !!!

 

qd je fais :

root@raspberrypi:~# python /usr/lib/cgi-bin/test.py

Content-type: text/html

<h1>The text area was empty.</h1>
root@raspberrypi:~#
 

Cordialement,

bypbop



#5 Gyro49

Gyro49

    Membre occasionnel

  • Membres
  • Pip
  • 246 messages
  • Gender:Male
  • Location:Angers, France
  • Interests:Les nouvelles technologies

Posté 07 octobre 2015 - 12:35

C'est encore moi

 

Personnellement, en plus d'Apache j'aurais installé PHP pour faire ça :

 

index.php

<?php

if (isset($_POST['valider']))
	{
	system("sudo python /chemin_complet_du_script/cgi-bin/test.py ".$_POST["variable"]);
	}
?>
<html>
<head><title>KBOT</title></head>
<body>
   <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
      <input type='text' name='variable'> 
      <input type='submit' name='valider'>
   </form>
</body>
</html>

puis le script python un peu modidifié

#!/usr/bin/env python

import sys

cmd = sys.argv

wf = open("variable.txt", "at")

wf.writelines(cmd[1] + "\n")

Maintenant il n'y a pas de retour entre le python et la page web. Si il y a un controle à faire il faut le faire dans le PHP avant d'exécuter la commande system()

La variable est placé dans un fichier 'variable.txt' qui doit apparaitre dans le dossier où se trouve le fichier python.

 

Maintenant je n'ai pas accès à mes ordinateurs perso pour tester.

 

A+



#6 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 09 octobre 2015 - 06:49

Merci gyro49, je continue a chercher un peu pour voir si je peux le faire avec une page HTML et ensuite je test en faisant un page PHP.

 

Cordialement,

bypbop 



#7 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 09 octobre 2015 - 09:18

re Gyro49

 

alors je viens d'installer php5 , le php fonctionne correctement !

 

j'ai fait ceci :

<?php

if (isset($_POST['variable']))
	{
	echo "test";
	system("sudo python /media/share/raspistill.py");
	}
?>
<html>
<head><title>KBOT</title></head>
<body>
   <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
      <input type='text' name='variable'> 
      <input type='submit' name='valider'>
   </form>
</body>
</html>

cela n execute pas le script ! il fonctionne bien qd je fais python raspistill.py

 

et j'ai bien le echo test !

 

Y a t'il qqhose d'autres à faire ?

 

ps: Pour l'instant je cherche juste a exécuter le script ! pas passer une variable

 

Cdlt,

bypbop



#8 Gyro49

Gyro49

    Membre occasionnel

  • Membres
  • Pip
  • 246 messages
  • Gender:Male
  • Location:Angers, France
  • Interests:Les nouvelles technologies

Posté 10 octobre 2015 - 01:04

Bonjour,

 

Aprés une recherche sur le web, il s'avère que le php est interprété comme un utilisateur.

Dans google "www-data php python problème"

 

Pour avoir la liste des erreurs

sudo nano /var/log/apache2/error.log

 

Dans "sudo nano /etc/sudoers" il faudrait rajouter à la fin les droits de www-data

www-data ALL = NOPASSWD: /media/share/raspistill.py

les liens

https://openclassroo...xeption-sudoers

http://forums.framboise314.fr/viewtopic.php?f=38&t=365&start=20

 

Je poursuis mes recherches.

 

Cordialement



#9 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 10 octobre 2015 - 01:38

Bonjour

<?php
ini_set('display_errors', 1);
if (isset($_POST['variable']))
	{
	
	$lastline = system("sudo ls" , $commande);
	echo "$lastline<br>";
	echo $commande;
	}
?>
<html>
<head><title>KBOT</title></head>
<body>
   <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
      <input type='text' name='variable'> 
      <input type='submit' name='valider'>
   </form>
</body>
</html>

Je viens de tester ceci et ca marche bien !



#10 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 10 octobre 2015 - 03:06

Re, alors j'ai bien mis :

 

www-data ALL = NOPASSWD: /media/share/raspistill.py mais cela ne change rien

 

Voila le log !

[Sat Oct 10 13:17:50 2015] [error] python_init: Python version mismatch, expected '2.7.2+', found '2.7.3'.
[Sat Oct 10 13:17:50 2015] [error] python_init: Python executable found '/usr/bin/python'.
[Sat Oct 10 13:17:50 2015] [error] python_init: Python path being used '/usr/lib/python2.7/:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/pyt$
[Sat Oct 10 13:17:50 2015] [notice] mod_python: Creating 8 session mutexes based on 150 max processes and 0 max threads.
[Sat Oct 10 13:17:50 2015] [notice] mod_python: using mutex_directory /tmp
[Sat Oct 10 13:17:51 2015] [notice] Apache/2.2.22 (Debian) PHP/5.4.45-0+deb7u1 mod_python/3.3.1 Python/2.7.3 configured -- resuming normal operations
[Sat Oct 10 14:02:01 2015] [error] [client 192.168.1.3] File does not exist: /var/www/favicon.ico, referer: http://192.168.1.27/index.php
sudo: effective uid is not 0, is sudo installed setuid root?


#11 Gyro49

Gyro49

    Membre occasionnel

  • Membres
  • Pip
  • 246 messages
  • Gender:Male
  • Location:Angers, France
  • Interests:Les nouvelles technologies

Posté 10 octobre 2015 - 04:48

Chez moi ça marche

 

installation de php et html

sudo apt-get install apache2 php5 libapache2-mod-php5

 

sudo nano sudoers

www-data ALL = NOPASSWD: ALL

 

dans index.php

<?php

if (isset($_POST['variable']))
	{
	echo "test";
	system("sudo python /home/pi/raspistill.py");
	}
?>
<html>
<head><title>KBOT</title></head>
<body>
   <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
      <input type='text' name='variable'> 
      <input type='submit' name='valider'>
   </form>
</body>
</html>

dans raspistill.py

import os
import sys

os.system('raspistill -vf -hf -o cam2.jpg')

cmd = sys.argv

wf = open("variable.txt", "at")

wf.writelines(cmd[1] + "\n")

Maintenant si tu cherche la photo  et le fichier variable.txt ils sont dans /var/ww



#12 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 11 octobre 2015 - 02:10

cela ne veut vraiment pas fonctionner chez moi !!! sorry newbie i am ;-)  :kez_13:  :kez_13:



#13 Gyro49

Gyro49

    Membre occasionnel

  • Membres
  • Pip
  • 246 messages
  • Gender:Male
  • Location:Angers, France
  • Interests:Les nouvelles technologies

Posté 11 octobre 2015 - 09:16

Bonsoir,

 

ce qui ne fonctionne pas c'est

-mes scripts sur ton raspberry

ou

-tes scripts

 

Courage.



#14 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 12 octobre 2015 - 09:35

Bonjour Gyro49,

 

les deux !

 

merci

Cordialement,

bypbop



#15 Gyro49

Gyro49

    Membre occasionnel

  • Membres
  • Pip
  • 246 messages
  • Gender:Male
  • Location:Angers, France
  • Interests:Les nouvelles technologies

Posté 12 octobre 2015 - 06:32

Bon ça commence à se compliquer.

 

Est ce que le scrip python fonctionne en ligne de commande ?

->sudo python /home/pi/raspistill.py 15

ne pas oublier le chiffre 15 sinon -> error

 

Est ce que le fichier /etc/sudoers et bien modifié comme suit ?

-> www-data ALL = NOPASSWD: ALL

avec un reboot ça ne fait pas de mal



#16 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 13 octobre 2015 - 05:38

Bonjour Gyro,

 

alors je prends mon script un peu plus haut !

 

oui il fonctionne bien en ligne de commande.

 

je fais : 

 

cd /media/share

python raspistill.py

 

et j'ai bien ma photo qui va dans le rep camera !

#!/usr/bin/env python
import os
import time
import subprocess
cmd = 'raspistill -w 640 -h 320 -o /media/share/camera/photo.jpg'

pid = subprocess.call(cmd, shell=True)


pour le sudoers oui et j'ai fait plusieurs reboot !


root@raspberrypi:/media/share# sudo nano /etc/sudoers
  GNU nano 2.2.6             File: /etc/sudoers


# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
pi ALL=(ALL) NOPASSWD: ALL
www-data ALL = NOPASSWD : ALL

Je te mets le fichier complet

 

Cordialement,

bypbop



#17 Gyro49

Gyro49

    Membre occasionnel

  • Membres
  • Pip
  • 246 messages
  • Gender:Male
  • Location:Angers, France
  • Interests:Les nouvelles technologies

Posté 13 octobre 2015 - 09:36

Ton script fonctionne nickel chez moi, j'ai bien la photo.

 

avec la commande : 

ls -l /media/share 

est-ce que tu as comme moi

 

drwxr-xr-x 2 root root 4096 Oct 13 19:57 camera
-rw-r--r-- 1 root root  168 Oct 13 19:33 raspistill.py

 

Sinon la solution miracle modifier la ligne cmd=...

mettre le 2> suivi d'un chemin ce qui va te créer un journal d'erreur


#!/usr/bin/env python
import os
import time
import subprocess
cmd = 'raspistill -w 640 -h 320 -o /media/share/camera/photo.jpg 2>/media/share/raspistill_error.txt'

pid = subprocess.call(cmd, shell=True)

Au fait chez moi ça marche super :yahoo:



#18 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 14 octobre 2015 - 11:20

Re, 

 

 

Alors j'ai ceci :

ls -l /media/share
total 48
drwxr-xr-x 2 guest guest 4096 Oct 13 16:33 camera
-rwxr--r-- 1 guest guest  692 Nov 14  2013 Client.py
-rwxr--r-- 1 guest guest 1440 May 26 12:13 kbot.py
-rwxr--r-- 1 guest guest 1044 Oct 30  2014 MailIP.py
-rwxr-xr-x 1 guest guest  176 Oct  9 18:06 raspistill.py
-rwxr--r-- 1 guest guest 1016 Apr 27 12:53 serverpython.py
-rwxr--r-- 1 guest guest  335 Oct 30  2014 sms.py
-rwxr--r-- 1 guest guest  737 Oct 30  2014 smsstart.py
-rwxr--r-- 1 guest guest  412 Oct 30  2014 testclavier.py
-rwxr--r-- 1 guest guest  282 May 26 12:09 TestMotor.py
-rwxr-xr-x 1 guest guest  314 Oct  9 19:09 test.py
-rwxr--r-- 1 guest guest  250 Nov 15  2014 touche.py

je suis bien logué en root ! moi j'ai guest ! 

ca vient peut etre du fait que c'est un répertoire partagé sur mon réseau ...

 

pour :

cmd = 'raspistill -w 640 -h 320 -o /media/share/camera/photo.jpg 2>/media/share/raspistill_error.txt'

je viens de le mettre cela ne crée pas de fichier qd je lance à partir de la page php ! cela vient bien donc de la partie www qui ne lance rien !

enfin je pense ...

 

cela crée bien le fichier qd je lance en faisant en ligne de cmd ...

 

cdlt,

bypbop



#19 Gyro49

Gyro49

    Membre occasionnel

  • Membres
  • Pip
  • 246 messages
  • Gender:Male
  • Location:Angers, France
  • Interests:Les nouvelles technologies

Posté 14 octobre 2015 - 11:30

Bon ben alors

cmd = 'raspistill -w 640 -h 320 -o /media/share/camera/photo.jpg 1>/media/share/raspistill_ok.txt 2>/media/share/raspistill_error.txt'

Sachant que le 1> c'est lorsque tout va bien et le 2> c'est pour les bugs
.

Maintenant il doit y avoir l'un des deux fichiers avec raspistill_ok.txt de vierge parce qu'il n'y a rien à dire quand tout va bien.

 

Dans PHP il faudrait essayer les deux commandes pour voir

system("sudo python /media/share/raspistill.py");
exec("sudo python /media/share/raspistill.py");


#20 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 14 octobre 2015 - 12:53

re, 

 

alors j'ai bien les fichiers crée , cela fonctionne en ligne de commande et j'ai bien 2 fichiers logs avec rien dedans ! j'ai bien la photo aussi !

ensuite j efface les 2 logs et la photo et j essaye a partir de la page php ! à partr de la page php j'ai testé avec system et exec !

j'ai rien du tout ni photo ni log

 

 

cdt,

bypbop






3 utilisateur(s) li(sen)t ce sujet

0 members, 3 guests, 0 anonymous users