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.
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();
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
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
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.
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 ?
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
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
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 !
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.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique