Bonjour,
Je recherche un moyen d'exécuter une commande en arrière plan.
Je veux pouvoir avec un lien, démarrer une comparaison entre le contenu d'un dossier de photos et les photos déjà enregistrée en BDD. Puis récupérer les infos des nouvelles photos ou de celle qui auraient été modifiée pour mettre à jour la BDD.
Ceci peut prendre du temps, et je souhaite que celà se fasse en arrière plan sur le serveur afin que je puisse continuer de naviguer sur le site ou même fermer ma fenêtre de navigation.
J'ai commencé par utiliser un exec() avec une sortie sur un fichier txt mais je me heurte vite à un soucis: la page php que j’exécute dans ma commande est indépendante de symfony, et il me faudrait revenir à un codage classique pour me connecter à ma base de données... Je crois pas être sur la bonne piste...
En fouinant, je croise le composant "Process" puis "PhpProcess"... Ils semble pouvoir m'aider à faire ce que je veux, mais je trouve pas suffisamment de documentation à ce sujet et je comprend pas bien comment l'utiliser...
Un peu de code provenant de http://symfony.com/fr/doc/2.3/components/process.html modifié pour mon objectif
Dans mon controller:
Ce que je comprends (ou crois comprendre, vous me corrigerez
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 use Symfony\Component\Process\Process; public function admin_majAction() { $chemin=dirname($_SERVER['SCRIPT_FILENAME']).'/img/galerie/script/'; $process = new Process('php'.$chemin.'maj.php'); $process->run(function ($type, $buffer) { if ('err' === $type) { echo 'ERR > '.$buffer; } else { echo 'OUT > '.$buffer; } }); $this->get('session')->getFlashBag()->add('maj', ' => Mise à jour en cours... '); return $this->redirect($this->generateUrl('gg_site_admin') ); }) de ce code, c'est que je démarre mon script maj.php grâce à la méthode run. Ce que je saisi pas, c'est cette fonction avec $type et $buffer. C'est elle qui doit pouvoir me permettre d'avoir des retours? Mais où est ce que je peux les récupérer? $type et $buffer, c'est quoi? où et comment dois je les déclarer?
Dans la doc, ils disent: "Si vous voulez exécuter du code PHP de manière isolée, utilisez plutôt le PhpProcess à la place:"
Dans ce cas, j'utiliserais plutôt:
Je suis un peu beaucoup passionnément largué! :/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7use Symfony\Component\Process\PhpProcess; public function admin_majAction() { $chemin=dirname($_SERVER['SCRIPT_FILENAME']).'/img/galerie/script/'; $process = new PhpProcess(<?php include('$chemin.'maj.php'); ?>); $process->run();
Partager