Partage
  • Partager sur Facebook
  • Partager sur Twitter

Planification de tache OVH

script PHP, comment l'écrire ?

Sujet résolu
    31 mars 2011 à 13:26:24

    Bonjour,
    je souhaite lancer un script php automatiquement via le planificateur de taches OVH.
    J'ai un hebergement mutualisé pro.

    J'ai créé la planification de tache via Manager, j'ai reçu le log par mail donc le script a bien été lancé.

    Mon souci est que le script n'a pas fonctionné.

    C'est un script qui fonctionne lorsque je lance manuellement en saisissant l'URL.
    Ce script parse un flux XML et insère des enregistrement dans la BDD.

    Je sais que mon script fonctionne manuellement, mais maintenant je voudrais savoir si un script PHP "classique" est lisible par le cron OVH.

    Dans la doc OVH, ils disent:

    Citation : OVH

    D'abord, il faut s'assurer que le script fonctionne en mode shell, c'est à dire qu'il est capable de s'exécuter depuis la ligne de commande. Pour cela, il faut placer dans la première ligne #!/usr/local/bin/php s'il s'agit d'un script php, #!/usr/bin/perl si c'est un script perl, ou #!/bin/bash pour un script shell, puis utiliser la commande chmod 700 script.cgi sur le script. Si vous avez l'accès telnet/ssh, vous pouvez tester son exécution avec ./script.cgi Cela est facultatif pour l'exécution d'un script PHP.



    Le souci est que je n'ai aucune idée de ce que veut dire "il faut s'assurer que le script fonctionne en mode shell"

    Ya-t-il un code particulier a mettre dans le script ?
    J'ai bien ajouté le "#!/usr/local/bin/php" en premiere ligne.

    Voici mon script (desolé de masquer certains caractères par souci de confidentialité, je pense que l'essentiel est là pour la compréhension de mon problème)
    <?php
    #!/usr/local/bin/php
    include("includes/fonctions.php");
    // VERIFICATION DU DERNIER FLUX //
    $strReq = "SELECT xxx FROM xxxs WHERE xxx = 'xxx' ORDER BY date_rss DESC";
    // CONNEXION BDD //
    $intReq = db_query($strReq);
    $date_dernier_flux = mysql_result($intReq, 0, 'date_rss');
    
    $nb_flux_ajoute = 0;
    /// PARSE XML ///
    $rss = simplexml_load_file('http://www.xxx.com/xxx/feed','SimpleXMLElement',LIBXML_NOCDATA); 
    $ns=$rss->getNamespaces(true);
    
    $flag_stop = 0;
    
    foreach ($rss->channel->item as $item) {
         if($flag_stop == 0) {
    	// RECUPERATION DE LA DATE //
    	$date_post = explode(' ', $item->pubDate);
    	switch($date_post[2]) {
    		case 'Jan':	$mois_post = '01'; break;
    		case 'Feb':	$mois_post = '02'; break;
    		case 'Mar':	$mois_post = '03'; break;
    		case 'Apr':	$mois_post = '04'; break;
    		case 'May':	$mois_post = '05'; break;
    		case 'Jun':	$mois_post = '06'; break;
    		case 'Jul':	$mois_post = '07'; break;
    		case 'Aug':	$mois_post = '08'; break;
    		case 'Sep':	$mois_post = '09'; break;
    		case 'Oct':	$mois_post = '10'; break;
    		case 'Nov':	$mois_post = '11'; break;
    		case 'Dec':	$mois_post = '12'; break;
          }
          $date_bd = $date_post[3].'-'.$mois_post.'-'.$date_post[1].' '.$date_post[4];
           // SI PAS DE NOUVEAUX FLUX ON S'ARRETE //
    	if($date_dernier_flux == $date_bd) {
    		$flag_stop = 1;
    	}
    	else {
    	
    	// SOURCE //
    	$source_rss = 'xxx';
    	/// GESTION DES CARACTERES SPECIAUX ET ENCODAGE ///
    	$title=addslashes(utf8_decode(str_replace("’" , "'", $item->title)));
    	$description=addslashes(utf8_decode(str_replace("’" , "'", $item->description)));
    	$description=str_replace("…" , "...", $description);
    	$content=addslashes(utf8_decode(str_replace("’" , "'", $item->children($ns['content']))));
    	$content=str_replace("…" , "...",$content);
    	$link=$item->link;
    	$category=addslashes(utf8_decode(str_replace("’" , "'", $item->category)));
    	
            /// INSERT SQL ///
    	$strReq = "INSERT INTO xxx VALUES (
    				'',
    				'".$date_bd."',
    				'".$source_rss."',
    				'".$title."',
    				'".$description."',
    				'".$content."',
    				'".$link."',
    				'".$category."'
    			)";
    
    	$intReq = db_query($strReq);
    	}
    }
    }
    ?>
    


    Si vous avez une idée, merci beaucoup

    Mica
    • Partager sur Facebook
    • Partager sur Twitter
      31 mars 2011 à 13:56:33

      Bonjour,

      Déjà, essaye de mettre "#!/usr/local/bin/php" sur la première ligne de ton fichier, pas du script PHP (donc avant <?PHP)

      Ensuite, pour donner les droits d'execution sur un script, utilise chmod +x

      Tiens nous au courant
      • Partager sur Facebook
      • Partager sur Twitter
        31 mars 2011 à 14:25:40

        Comme la dit lanoochK, #!/usr/local/bin/php doit etre avant tout code donc sur la première ligne de ton script
        Ensuite, toujours comme la dit lanoochK tu dois donner certaines permissions à ton fichier pou que le serveur puisse l’exécuter. Pour ma part, mes tâches cron sont au chmod 504.
        Ton code :
        #!/usr/local/bin/php
        <?php
        include("includes/fonctions.php");
        // VERIFICATION DU DERNIER FLUX //
        $strReq = "SELECT xxx FROM xxxs WHERE xxx = 'xxx' ORDER BY date_rss DESC";
        // CONNEXION BDD //
        $intReq = db_query($strReq);
        $date_dernier_flux = mysql_result($intReq, 0, 'date_rss');
        
        $nb_flux_ajoute = 0;
        /// PARSE XML ///
        $rss = simplexml_load_file('http://www.xxx.com/xxx/feed','SimpleXMLElement',LIBXML_NOCDATA); 
        $ns=$rss->getNamespaces(true);
        
        $flag_stop = 0;
        
        foreach ($rss->channel->item as $item) {
             if($flag_stop == 0) {
        	// RECUPERATION DE LA DATE //
        	$date_post = explode(' ', $item->pubDate);
        	switch($date_post[2]) {
        		case 'Jan':	$mois_post = '01'; break;
        		case 'Feb':	$mois_post = '02'; break;
        		case 'Mar':	$mois_post = '03'; break;
        		case 'Apr':	$mois_post = '04'; break;
        		case 'May':	$mois_post = '05'; break;
        		case 'Jun':	$mois_post = '06'; break;
        		case 'Jul':	$mois_post = '07'; break;
        		case 'Aug':	$mois_post = '08'; break;
        		case 'Sep':	$mois_post = '09'; break;
        		case 'Oct':	$mois_post = '10'; break;
        		case 'Nov':	$mois_post = '11'; break;
        		case 'Dec':	$mois_post = '12'; break;
              }
              $date_bd = $date_post[3].'-'.$mois_post.'-'.$date_post[1].' '.$date_post[4];
               // SI PAS DE NOUVEAUX FLUX ON S'ARRETE //
        	if($date_dernier_flux == $date_bd) {
        		$flag_stop = 1;
        	}
        	else {
        	
        	// SOURCE //
        	$source_rss = 'xxx';
        	/// GESTION DES CARACTERES SPECIAUX ET ENCODAGE ///
        	$title=addslashes(utf8_decode(str_replace("’" , "'", $item->title)));
        	$description=addslashes(utf8_decode(str_replace("’" , "'", $item->description)));
        	$description=str_replace("…" , "...", $description);
        	$content=addslashes(utf8_decode(str_replace("’" , "'", $item->children($ns['content']))));
        	$content=str_replace("…" , "...",$content);
        	$link=$item->link;
        	$category=addslashes(utf8_decode(str_replace("’" , "'", $item->category)));
        	
                /// INSERT SQL ///
        	$strReq = "INSERT INTO xxx VALUES (
        				'',
        				'".$date_bd."',
        				'".$source_rss."',
        				'".$title."',
        				'".$description."',
        				'".$content."',
        				'".$link."',
        				'".$category."'
        			)";
        
        	$intReq = db_query($strReq);
        	}
        }
        }
        ?>
        

        Techniquement tu ne devrais pas avoir de souci. Pour vérifier si ta tâche cron s'est effectuée, met un log par e-mail et si ça fonctionne pas tu aura le message d'erreur ;)
        • Partager sur Facebook
        • Partager sur Twitter
          31 mars 2011 à 14:39:55

          Ca fonctionne, merci beaucoup pour votre aide !
          • Partager sur Facebook
          • Partager sur Twitter

          Planification de tache OVH

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown