IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[Symfony 5.4] Mettre en tâche cron une fonction du controller admin


Sujet :

Symfony PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut [Symfony 5.4] Mettre en tâche cron une fonction du controller admin
    Bonjour à tous,

    Chez mon hébergeur pour mon site de prod, je peux créer des taches cron, en précisant l'url à lancer.

    Sur mon site, dans l'espace admin, j'ai une fonction qui fait un dump de ma base mysql et me l'envoie par mail.
    ça marche bien manuellement, quand je clique sur mon lien dans mon menu admin, ça exécute le code de ma fonction et m'envoie le mail.
    Ainsi, à ma demande, j'ai une sauvegarde de ma base dans mes mails, au cas où un jour j'en aurais besoin...

    Maintenant, je veux automatiser cette fonction en la mettant dans une tâche cron.

    Problème : Il faut que je sois connecté en admin sur mon site pour pouvoir lancer cette fonction.
    En testant en prod ma tâche cron, ça me renvoit comme résultat mon redirect vers ma page de connection pour que je me logue en admin.
    C'est normal, c'est ce que j'ai défini dans mon fichier security.yaml, pour pas que les visiteurs aient accès à mon espace admin, avec, entre autres, cette fonction.

    Maintenant, je ne vois pas comment faire :
    - Laisser ma fonction côté admin : Je ne vois pas du tout comment ça serait possible, mais y a t'il une configuration à mettre dans mon security.yaml pour permettre l'exécution de cette fonction quand elle est exécutée à partir de la tâche cron ?
    - Mettre ma fonction côté visiteur, sans lien sur mon site, où je serai le seul à connaitre l'url : Si un jour un visiteur ou un hackeur découvre que ce lien existe, il peut m'inonder de mails s'il exécute plein de fois mon url, ce que je veux éviter. Et d'autre part, est ce que les robots des moteurs de recherches passeront pas cette url, ce qui générera l'envoi d'un mail à chaque fois, ce que je veux aussi éviter ?

    Merci d'avance pour vos aides et idées !

    Edit : orthographe dans le titre

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    d'habitude les taches en arrière-plan sont gérées par une fonctionnalité à part qui vérifie la fréquence et l'unicité de lancement.
    je ne connais pas symfony donc je ne sais pas si ce système est déjà prévu ou si vous devez le développer vous même.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    bonjour,
    symfony ne se réduit pas exclusivement à la création d'une app Web ou d'une API. Il est possible de créer une application console qui ne soit utilisable qu'en ligne de commande ce qui correspond à ce dont tu as besoin. Pour ton cas nul besoin d'une authentification pour exécuter la console car ton script n'est connu que de ton serveur. Ton script de dump tu peux le créer à l'aide d'une console command.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    php bin/console make:commande MyDump
    https://symfony.com/doc/current/cons...ting-a-command

    Après envoyé les données de la BD par mail n'est pas non plus un gage de sécurité car le protocole SMTP n'est pas du tout sécurisé à moins de chiffrer les données avant envoi.

    L'une des stratégie en matière de sauvegarde de BD c'est d'envoyer des données sur un autre serveur par exemple envoyer les données vers le CLOUD ( Google Drive, Amazone S3 ...) d'autant plus que S3 ou Drive dispose des SDK PHP installable via composer.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut
    Merci beaucoup à vous 2 pour vos indications, ça m'avance grandement
    Je vois les problématiques (unicité de lancement, sécurité du mail...), et j'ai parcouru le lien, ça répond à mon problème
    J'avance ce sujet dès que je peux, et reviens vers vous la semaine prochaine... pour le mettre en résolu j'espère !

    Merci encore, et bonne fin d'année à vous et à tous !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut
    Bon, ça avance : j'ai créé ma commande grace aux indications ci dessus, ça marche nickel en local.

    Maintenant, j'ai uploadé tout mon site chez mon hébergeur, et je teste sous Putty la commande :
    php bin/console app:dumpbase
    Et j'ai le message d'erreur :
    X-Powered-By: PHP/4.4.9
    Content-type: text/html

    <br />
    <b>Parse error</b>: syntax error, unexpected T_STRING, expecting T_CONSTANT_ENCAPSED_STRING or '(' in <b>/homepages/10/d762932445/htdocs/bin/console</b> on line <b>4</b><br />
    D'après mes recherches, je vois dans ce message que ma commande cherche la version 4.4.9 de PHP.
    Chez mon hébergeur, je suis en PHP 8.1 !

    Selon la doc de composer ici : https://getcomposer.org/doc/articles...ng-php-scripts
    J'ai ajouté dans mon composer.json le bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	"scripts" : {
    		"prod" : [
    			"@php bin/console app:dumpbase"
    		]
    	}
    ça devrait forcer la version de PHP, mais j'ai toujours le même message d'erreur.

    Merci d'avance pour votre aide !!!

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    Citation Envoyé par merou19 Voir le message
    ma commande cherche la version 4.4.9 de PHP.
    le problème n'est pas qu'elle l'a cherche, le problème est qu'elle la trouve !

    regardez les autres exécutables qui commencent par "php" ou "php-cgi", vous avez peut-être accès a d'autres versions.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut
    YYYEEEEEEEESSSSSSSSSSSSS !!!

    Merci beaucoup, en effet, j'avais percuté dans le mauvais sens !

    Finalement, voilà ce qui marche :

    Dans composer.json :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	"scripts" : {
    		"dumpbase" : "@php bin/console app:dumpbase"
    	}
    En ligne de commande (et dans mon crontab) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/bin/php8.1-cli composer.phar dumpbase
    Sujet résolu, je suis content :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre le return d'une fonction dans une balise input
    Par khaled.mann dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/04/2009, 06h55
  2. mettre un parametre d'une fonction dans un request.setAttribute
    Par john_wili dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/03/2009, 14h34
  3. ArrayList:Mettre en parametre dans une fonction
    Par skulled dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 24/11/2007, 11h15
  4. Réponses: 9
    Dernier message: 22/08/2007, 12h25
  5. Réponses: 9
    Dernier message: 22/08/2007, 12h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo