Partage
  • Partager sur Facebook
  • Partager sur Twitter

Crontab Script Php

Sujet résolu
    30 août 2022 à 14:02:29

    Bonjour,

    J'ai une application web d'hébergé sur une VM Ubuntu (22.04). Je voudrais qu'un script soit automatisé afin que les images d'un dossier puisse être sélectionnées de façon aléatoire pendant suivant une plage horaire définie, et venant substituer l'image en cours. Mon script PHP est bien fonctionnel en l'exécutant mais le Crontab défini ne me permet pas pour le moment d'automatisé la tâche. J'ignore pourquoi. L'image actuelle étant toujours la même après réactualisation. 

    Voici mon Crontab actuel : * * * * * /usr/bin/php /var/www/dossierprojet/fichier.php 

    Le dossier du projet est en full www-data 

    -
    Edité par Alexgones 30 août 2022 à 14:03:36

    • Partager sur Facebook
    • Partager sur Twitter
      30 août 2022 à 20:29:03

      salut,

      pourquoi du PHP ?

      on peut voir le script ?

      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        31 août 2022 à 8:53:42

        dantonq a écrit:

        salut,

        pourquoi du PHP ?

        on peut voir le script ?


        Si tu as une meilleure solution, je suis preneur outre un script php. (surtout que ça a déjà marché auparavant..)

        Si tu veux. 

        $dossier = './upload/';
        
        $handle = dir($dossier);
        
        $i = 0;
        while (false !== ($fichier = $handle->read())) {
        	if (is_file($dossier . $fichier)) {
        		$i++;
        		$fichiers[] = $dossier . $fichier;
        	}
        }
        
        if ($i > 1) {
        
        	// On recupere le flyer en cours pour le comparer au prochain a afficher
        	do {
        		$flyer = "./flyer.jpg";
        
        		// On compare le flyer actuel au nouveau choisi aléatoirement
        		$aleatoire = rand(0, count($fichiers) - 1);
        		$retenu = $fichiers[$aleatoire];
        		var_dump($retenu);
        	} while (filesize($flyer) == filesize($retenu));
        
        	// on copie le nouveau flyer retenu vers l'image accessible depuis le web
        	copy($retenu, $flyer);
        }
        
        $handle->close();
        



        -
        Edité par Alexgones 31 août 2022 à 9:05:35

        • Partager sur Facebook
        • Partager sur Twitter
          31 août 2022 à 9:26:20

          il ne s'agit, finalement, que d'une tâche d'administration, qui pourrait être très simplement réalisée en shell (bash pour plus de commodité).
          en ce qui me concerne, je n'utiliserais le PHP que pour rendre des pages web dynamiques côté serveur.

          le principal problème des scripts qui fonctionnent, mais pas dans crontab, c'est l'emploi de chemins relatifs.
          il est préférable de toujours utiliser des chemins absolus, même hors crontab. :)

          edit :

          la seule taille d'un fichier ne permet pas de différencier des fichiers.
          il vaudrait mieux utiliser leur somme de contrôle (md5sum)

          -
          Edité par dantonq 31 août 2022 à 9:40:43

          • Partager sur Facebook
          • Partager sur Twitter

          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

            31 août 2022 à 9:34:09

            dantonq a écrit:

            il ne s'agit, finalement, que d'une tâche d'administration, qui pourrait être très simplement réalisée en shell (bash pour plus de commodité).
            en ce qui me concerne, je n'utiliserais le PHP que pour rendre des pages web dynamiques côté serveur.

            le principal problème des scripts qui fonctionnent, mais pas dans crontab, c'est l'emploi de chemins relatifs.
            il est préférable de toujours utiliser des chemins absolus, même hors crontab. :)

            Il va falloir que je me renseigne un minimum au sujet du bash alors..


            Et là ce n'est pas que le cas ? car j'utilise normalement à chaque fois des chemins absolus. 

            • Partager sur Facebook
            • Partager sur Twitter
              31 août 2022 à 9:53:00

              ./chemin est un chemin relatif, à partir du répertoire courant.

              /chemin est un chemin absolu à partir de la racine du système de fichier.

              -
              Edité par dantonq 31 août 2022 à 9:54:13

              • Partager sur Facebook
              • Partager sur Twitter

              Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                31 août 2022 à 10:08:31

                dantonq a écrit:

                ./chemin est un chemin relatif, à partir du répertoire courant.

                /chemin est un chemin absolu à partir de la racine du système de fichier.

                -
                Edité par dantonq il y a 13 minutes


                Ah concernant le dossier upload oui en effet !
                • Partager sur Facebook
                • Partager sur Twitter
                  31 août 2022 à 10:13:52

                  le fichier flyer.jpg, aussi.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                    31 août 2022 à 10:26:27

                    dantonq a écrit:

                    le fichier flyer.jpg, aussi.


                    Yes j'ai vu. Mais ici le chemin absolu '/fichier' engendre une erreur. 

                    Cependant par rapport à ce script bash, je peux appeler le script php directement dans le contenu du code bash, où sera t-il placé sur le serveur de préférence ? 

                    -
                    Edité par Alexgones 31 août 2022 à 10:38:35

                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 août 2022 à 12:33:00

                      il faut indiquer le vrai chemin du fichier : /je/ne/sais/pas/où/flyer.jpg

                      faire un script bash qui appelle ton script php ne sert à rien.

                      quand je parle de script shell, je parle de quelque chose comme ça :

                      #!/bin/bash
                      
                      dossier='/chemin/vers/upload'
                      flyer='/chemin/vers/flyer.jpg'
                      
                      mdSum() { md5sum "$1" 2>/dev/null || echo '0' | cut -d ' ' -f 1;}
                      
                      for f in "$dossier"/*; do test -f "$f" && fichiers+=( "$f" ); done
                      
                      if ((${#fichiers[*]}))
                      then
                          while test "$(mdSum "$aleatoire")" = "$(mdSum "$flyer")"
                          do
                              aleatoire="${fichiers[RANDOM%${#fichiers[*]}-1]}"
                          done
                          cp "$aleatoire" "$flyer"
                      else
                          : gestion erreur "pas de fichiers"
                      fi
                      



                      -
                      Edité par dantonq 31 août 2022 à 12:36:10

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                        31 août 2022 à 13:49:58

                        dantonq a écrit:

                        il faut indiquer le vrai chemin du fichier : /je/ne/sais/pas/où/flyer.jpg

                        faire un script bash qui appelle ton script php ne sert à rien.

                        quand je parle de script shell, je parle de quelque chose comme ça :

                        #!/bin/bash
                        
                        dossier='/chemin/vers/upload'
                        flyer='/chemin/vers/flyer.jpg'
                        
                        mdSum() { md5sum "$1" 2>/dev/null || echo '0' | cut -d ' ' -f 1;}
                        
                        for f in "$dossier"/*; do test -f "$f" && fichiers+=( "$f" ); done
                        
                        if ((${#fichiers[*]}))
                        then
                            while test "$(mdSum "$aleatoire")" = "$(mdSum "$flyer")"
                            do
                                aleatoire="${fichiers[RANDOM%${#fichiers[*]}-1]}"
                            done
                            cp "$aleatoire" "$flyer"
                        else
                            : gestion erreur "pas de fichiers"
                        fi
                        



                        -
                        Edité par dantonq il y a environ 1 heure

                        J'ai mis le chemin absolu pour les deux dans le script flyercron et cela fonctionne. Effectivement c'est indispensable. Merci !

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Crontab Script Php

                        × 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