Retour Accueil

Connectez vous
Inscrivez-vous







Ou que vous soyez dans la lecture de ce TOPO, vous pouvez retrouver le menu général en utilisant le bouton en haut à gauche de votre page ...


AJAX lanceur de PHP


Bonjour,
Vous avez besoin de faire de grosses mises à jour en PHP , seulement CRON c'est difficile à aborder la première fois ... et même la deuxième fois ... :o
Dans certains cas il serait tout aussi efficace de lancer un PHP sur votre serveur PHP qui tournera peut-être une journée, mais sans vous "bloquer" un micro-ordinateur ...
Voici précisément le but de ce mini-tutoriel.
Icône du chapitre

Requis
Bonne nouvelle, il vous suffit de savoir rédiger votre outil php qui sera lancé par la méthode, objet de ce mini-tutoriel. C'est magique non ? :magicien:

Description de la méthode
Il vous faut utiliser le lanceur. Nous l'appellerons ajax_cron.php
Il devra impérativement être sur le serveur qui héberge votre site
Pour ceux d'entre vous qui connaissez AJAX, il vous sera facile de voir simplement que ce lanceur php/AJAX
ne fait que lancer votre outil PHP sur le serveur. Voici donc le code du lanceur

 <?php
  header ( 'Content-type: text/html; charset=ISO-8859-1' );
 ?>
 <script type= "text/javascript" >
  var MonAjax ;
  if ( window . XMLHttpRequest ){ MonAjax = new XMLHttpRequest ();}
  else if ( window . ActiveXObject ) { MonAjax = new ActiveXObject ( 'Microsoft.XMLHTTP' );}
  else {  alert ( "Votre navigateur ne supporte pas les objets XMLHTTPRequest..." );
  MonAjax = false ; }
  MonAjax.open ( 'POST' , "ajax_cron.php" , true );
  MonAjax.onreadystatechange = function () { var Ajax = 1 ; }
  MonAjax.setRequestHeader ( 'Content-type' , 'application/x-www-form-urlencoded' );
  MonAjax.send ();
 </script>


Donc une seule chose à faire pour vous : mettre le bon nom de votre php ICI:



<?php 
 MonAjax.open('POST','ajax_cron.php',true);
?>


Lorsque votre PHP sera prêt mettez les deux PHP sur le serveur et à chaque fois
que vous aurez besoin de réaliser votre tâche

1) allez sur votre site
2) lancez votre lanceur
3) vous avez une page blanche bien sûr ... alors fermez votre navigateur quelque part dans le monde votre PHP tourne pour vous !

Règles à respecter pour votre outil PHP

Maintenant c'est à vous de jouer, il vous faut faire votre outil.
Vous devez veiller de très près à ceci:
1) votre PHP ne doit en aucun cas en appeler un autre
2) votre PHP ne doit envoyer strictement aucun echo header BOM etc.
3) par définition étant un traitement long, il y a donc un FOR ou WHILE mettez dans votre (vos) boucle(s) set_time_limit(10);

Voilà tout est prêt, à vos tests :)
Je poste ici un exemple d'un PHP outil !
Code : PHP



<?php
 $chri = "christele" ;
 try
  {
   $bdd = new PDO ( 'mysql:host=localhost;dbname=wwwwww' , 'root' , '' );
   $bdd -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION );
  }
 catch ( Exception $e )
  {
   die ( 'Erreur : '.$e -> getMessage ());
  }
 for ( $a = 0 ; $a < 100000 ; $a ++ )
  {
   $req = $bdd -> prepare ( "SELECT * FROM 0_test WHERE pseudo= :chri " );
   $req -> execute ( array ( ':chri' => $chri ));
   $donnees = $req -> fetch ();
   $lieu = intval ( $donnees [ 'mdp' ]) + 1 ;
   $req -> closeCursor ();
   $result = $bdd -> prepare ( "UPDATE 0_test SET mdp = :mdp WHERE pseudo= :chri " );
   $result -> execute ( array ( ':mdp' => $lieu , ':chri' => $chri ));
   $result -> closeCursor ();
   set_time_limit ( 10 );
  }
$bdd = NULL ;
?>


Pour terminer j'ai mis quelques remarques à lire ...


Remarques

Pour ceux qui ont le temps, quelques explications

1) Le fameux set_time_limit(10);
Le seul vrai problème était que ne pouvant relancer, rappeler ou ... le PHP
nous avions ce paramètre de 30 secondes d'attente avant qu'un PHP non terminé n'avorte.
Cette fonction est un vrai secours, c'est mon Ami Sabotage de developpez.com
qui m'a mise sur cette piste ... que fait set_time_limit(10);?
Il remet le compteur des 30 secondes à zéro et recompte jusque 10 nouvelles secondes ...
ainsi la boucle se réalisant en moins de 1 seconde le PHP peut tourner trois jours s'il le faut !

2) Pour ceux qui voudraient comprendre le lanceur AJAX, posez vos questions sur le forum,
ceci n'étant pas l'objet de ce tutoriel.

3) BIEN SUR veillez à ce que votre php ait une fin ... sinon il faudrait appeler votre hébergeur pour qu'il arrête la tâche !

Bon courage à vous

Voilà juste un outil de lancement AJAX qui résoudra je l'espère bien des petites tâches
Vous aurez bien noté que vous n'avez que le nom du PHP à modifier, dans le "lanceur",
ce qui signifie que vous n'avez en fait qu'à connaître le PHP MySql pour faire votre outil.
Pas besoin de connaissances CRON ni AJAX Image utilisateur


HOP THIS HELP ...