Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

Exécuter un script python lors d'un téléchargement.
#1

Bonjour,

j'aimerai votre aide car je ne me rappel plus comment faire.

Voila j'aimerai lancer un script python ( qui est un compteur de téléchargement ) lorsque quelqu'un télécharge un fichier.

voici le code de ma page index.php:

Code :
[== PHP ==]
<html>
   <head>

     <title> Download Fichier </title>

   </head>
   <body>

    <h1> Download X </h1>
    <a href="fichier.txt">Download Fichier TXT</a>

    <?php exec("sudo python3 counter.py"); ?>




    </body>

</html>


Lorsque le fichier.txt est téléchargé le script "counter.py" n'est pas exécute!

Dans le passé j'avais réussi a utiliser la commande "php exec" mais ici je ne me souvient plus si il y avait une astuce en particulier.

Si vous pouvez m'aider ?

Merci!!!
Répondre
#2

Indique le chemin complet vers python3 et counter.py.
Comme pour les crontab, php s'exécute sous un utilisateur qui par défaut n'a pas les paths de chargés, il faut donc lui expliciter l'emplacement des fichiers.
Répondre
#3

Merci CrazyCat de ton aide.

je viens de tester ça mais pas de résultat possitif :

Code :
[== Indéfini ==]

<html>
   <head>

     <title> Download Fichier </title>

   </head>
   <body>

    <h1> Download  </h1>
    <FORM>
    <a href="fichier.txt">Download Fichier TXT </a>

    <?php exec("sudo /var/www/python3 counter.py"); ?>
    </FORM>



    </body>


Je ne suis pas sure que mon code ci-dessus soit bon à 100%. A confirmer.

J'ai également un vague souvenir qu'il faut ajouter une ligne dans /etc/sudoers et donner les droit à www-data.


Pour info j'ai installer lighttpd php Mysql.

Je ne sais pas dans quel fichier log allé voir pour voir ce qui pose problème.

merci d'avance
Répondre
#4

Hello,

Ok j'ai compris d’où venait le problème, il fallait bien donner les droits à www-data dans sudoers.

Si je comprend bien "www-data" est l'utilisateur de lighttpd.

Maintenant mon script python est bien exécute, sauf que il est exécute lors du chargement de de la page ou lors de l'actualisation de celle-ci.

Or ce que je voudrais s'est que le script python soit exécuté lorsqu'on clique sur le lien de téléchargement.

Si quelqu'un peut m'éclairer?

Voici le code:
Code :
[== PHP ==]
<html>
   <head>

     <title> Download Fichier </title>

   </head>
   <body>

    <h1> Download  </h1>
    <FORM>
    <a href="fichier.txt">Télécharger le Fichier  </a>

    <?php exec("sudo python3 counter.py"); ?>
    </FORM>



    </body>

</html>
Répondre
#5

En fait, il faudrait que ton lien pointe vers une page qui va délivrer le fichier et non pas le fichier lui-même, par exemple download.php?file=fichier.txt

Et ton download.php serait :
Code :
<?php
define('DL_DIR', '/var/www/files/');
$file = filter_var($_GET['file'], FILTER_SANITIZE_STRING);
if (trim($file)=='' || !is_file(DL_DIR.$file)) {
   die('Error ! No file');
}
exec('sudo python3 counter.py --file='.$file);

$mime = mime_content_type(DL_DIR.$file);
header("Pragma: no-cache, public");
header("Expires: 0");
header("Cache-Control: public, no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Content-type: ".$mime);
header("Content-Length: ".filesize(DL_DIR.$file));
header("Content-Disposition: attachment; filename=\"".$file."\"");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: binary");
readfile(DL_DIR.$file);
Répondre
#6

Salut CrazyCat,

avec du retard un grand merci pour ton code!!! Cela m'as permis de bien avancer dans mon projet.

Encore merci!
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)