Schtasks /Create

Fermé
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 - 17 mai 2011 à 10:40
Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 - 17 mai 2011 à 16:15
Bonjour,

Actuellement en stage au service informatique dans une grande école d'ingénieurs je dois effectuer une fonction php qui se répète toute les 24h.
Pour ça j'ai utiliser schtasks /create

Dans la partie /tr je dois mettre le lien de la fonction à exécuter or j'aimerai que se soit une fonction php qui s'exécute.

Je m'explique, ici ils développent sous la forme MVC et j'aimerai que ma fonction
public function planifier (){

schtasks /Create /tn "Delete à 1" /tr delete.php /sc DAILY /st 20:00
}

qui est dans un contrôleur appelle la fonction public function delete() qui est elle aussi dans le contrôleur.

Est-ce que je peux donc mettre /tr delete() ? Car je n'es pas trouvé d'aide affirmant que c'est possible.

Merci
A voir également:

11 réponses

Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
17 mai 2011 à 11:25
Bonjour,

je ne pense pas que cela soit possible...

si tu veux faire cela tu vas devoir passer par un bout de procédural...

je pense que le plus "propre" dans ton cas est de faire un script a part qui fait appel a ta fonction.

donc un delete.php qui appel la fonction delete de ton controleur

0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
17 mai 2011 à 11:38
Tu m'as dis ce que j'ai effectué.
En faite j'ai dans un 1er .php ma fonction
<?
public function planifier (){

schtasks /Create /tn "Delete à 1" /tr delete.php /sc DAILY /st 20:00
}
?>

Puis dans un autre .php ma fonction:
<?

public function delete(){
//Instruction
}
?>

Et j'aurai aimer que cette dernière fonction soit dans le 1er .php en l'appelant par /tr delete()
Mais apparement, c'est pas possible :/
0
Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
17 mai 2011 à 14:08
je voyais plutot:

schtasks /Create /tn "Delete à 1" /tr delete.php /sc DAILY /st 20:00 


ca tapé a la main en ligne de commande parce que une fois que la tache est créée et qu elle s execute tous les jours tu vas pas faire appel a ta fonction tous les 4 matins.

et le fichier delete.php:

<?php
include_once('controleur.php');

delete();
?>


donc ta tache périodique appel tous les jours delete.php qui appel la fonction delete du controleur
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
Modifié par patrice86 le 17/05/2011 à 14:40
Oula doucement Gremy87 stp, je suis encore en 1ere année de BTS IG ^^
Mais je te remercie de m'aider en tout cas !

En fait la 1ere fonction (planifier() )est dans un contrôleur gestionPC.php et j'aimerai qu'elle appel la fonction delete() qui serait alors dans le même contrôleur.

Ils (les informaticiens de l'école) souhaitent ne pas avoir plusieurs fichiers .php avec des fonctions, qu'elles soient toutes dans le même contrôleur gestionPC.php

Donc ne pas taper à chaque fois la ligne de commande dans une invite, ils veulent que ça se lance tout seul à 20h et je n'ai trouvé que cette solution.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
17 mai 2011 à 15:07
lol on va faire ca doucement alors^^


donc ton controlleur gestionPC.php doit etre, en toute logique mais corrige moi si je me trompe, un simple ensemble de fonctions:

<?php
function toto()
{

}

function tutu()
{

}

function tata()
{

}

.
.
.
?>


c'est le cas? il n'y a pas de code qui s'exécute directement dedans?

dans ces fonctions tu dois donc avoir delete()

ce que tu veux c'est que cette fonction delete soit exécutée tous les jours a 20h, c'est ca?

pour faire cela il faut l'appeler d'une manière ou d une autre. j'ai 2 solutions qui me viennent la.

la 1ère est celle que j'ai postée plus haut:

tu crée un fichier delete.php contenant

<?php
include_once('gestionPC.php');

delete();


et c'est ce fichier delete.php qui va etre appelé par la tâche périodique.

(rappel sur les tâches périodiques)

une fois que ta tâche périodique est crée, elle s'exécute toute seule aux moments qu'on lui a précisé.

schtasks /Create /tn "Delete à 1" /tr delete.php /sc DAILY /st 20:00 


crée une tache périodique qui s'appelle "Delete à 1" qui s'éxecute tous les jours a 20:00 et qui exécute le fichier "delete.php" (ce qui d'ailleurs ne marchera pas mais j'y arrive)

une fois cette tâche crée plus besoin d'y toucher.


la 2eme solution est de mettre dans ta tâche périodique directement ton contrôleur gestionPC.php avec une variable GET comme suit:

schtasks /Create /tn "Delete à 1" /tr delete.php?perio=true /sc DAILY /st 20:00 


et dans ton contrôleur gestionPC.php

if(isset($_GET['perio']) && $_GET['perio']=='true' )
{
delete();
}


mais je trouve cela moins propre.


ensuite, (piuw marre d'écrire) n'importe quelle page php doit être lancée sous un serveur web. donc par exemple si tu utilise un serveur comme wamp, tu devras mettre dans ta tache périodique:

schtasks /Create /tn "Delete à 1" /tr C:\wamp\bin\php\php5.3.5\php.exe delete.php?perio=true /sc DAILY /st 20:00 


et pas juste delete.php?perio=true

voila je crois que j'ai tout dit ^^
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
17 mai 2011 à 15:22
* Oui le contrôleur est comme tu l'a dit.
* Oui la fonction delete() doit être effectuer automatiquement tout les jours à 20h.

delete() => Met à jour le champs delete de la table exceptionModel à 1.
Ce n'est pas un delete au sens 'supprimer' (je sais, c'est tordu ^^)

Si je te comprends bien, la commande schtasks je la rentre dans l'invite de commande du serveur et une fois qu'elle est créer je n'es plus besoin d'y toucher, elle est enregistrer et c'est bon point final ?

=> schtasks /Create /tn "Delete à 1" /tr gestionPC.php /sc DAILY /st 20:00

Et dans gestionPC.php :

<?
// fonction 1
// fonction 2
// ...
public function delete(){
//Instructions..
}

Mais, comment faire pour que le tr sache que dans le fichier gestionPC il faut qu'il utilise la function delete() ?
0
Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
17 mai 2011 à 15:26
voila, ca avance t'as presque tout compris ^^

"Si je te comprends bien, la commande schtasks je la rentre dans l'invite de commande du serveur et une fois qu'elle est créer je n'es plus besoin d'y toucher, elle est enregistrer et c'est bon point final ? "

absolument!


=> schtasks /Create /tn "Delete à 1" /tr gestionPC.php /sc DAILY /st 20:00

comme je t'ai dit, avec cette syntaxe ca ne marchera pas, il faut que tu passe par un client PHP (tu en as forcement un, trouve juste l'executable)

schtasks /Create /tn "Delete à 1" /tr C:\wamp\bin\php\php5.3.5\php.exe delete.php?perio=true /sc DAILY /st 20:00


"Mais, comment faire pour que le tr sache que dans le fichier gestionPC il faut qu'il utilise la function delete() ?"

avec la variable GET:
dans gestionPC.php tu met

if(isset($_GET['perio']) && $_GET['perio']=='true' )
{
delete();
}


si la variable est la et qu elle vaut true, c'est que c'est la tâche périodique qui appel la page, donc paf direct a delete()

compris?
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
17 mai 2011 à 15:35
Je crois avoir compris.
Pour le schtasks c'est réglé, lui j'ai compris.

Après j'ai fait comme suis (toujours dans gestionPC.php) :

public function planifier() {
if(isset($_GET['perio']) && $_GET['perio']=='true' )

{ delete(); }
}

public function delete() {
//Instructions
}

Je penses avoir compris le coup du gestionPC.php?perio=true il va chercher dans gestionPC.php perio et une fois trouver lancer la function delete() ?

Bon ça c'est ok (enfin j'espères), juste pour mieux améliorer le code et pas que les lignes
if(isset($_GET['perio']) && $_GET['perio']=='true' )

{ delete(); }
}

trainent dans le gestionPC.php en vrac au milieu des 510 lignes de code... je les ai mise dans une function planifier() dans le coup je dois modifier le tr du schtasks ? (gestionPC.php?planifier() => ça fonctionne ?)
0
Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
17 mai 2011 à 15:56
et non malheureusement sinon tu retombe sur le même problème de comment appeler directement une fonction.

ces lignes doivent "trainer", tu les mets tout en haut et surtout pas dans une fonctions.

tu n'as pas trop le choix
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
17 mai 2011 à 16:12
Ok, je testerai cela quand je pourrais. Je ne peux pas tester en local.

Merci beaucoup de ton aide et de ta patience !
Et si jamais j'ai encore des soucis sur se code, je reposterais ici =)
0
Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
17 mai 2011 à 16:15
pas de soucis^^

bon courage
0