La validation de la commande " Crontab Entrées avec PHP
Quel est le meilleur moyen de valider une entrée crontab avec PHP? Dois-je utiliser une regex, ou une bibliothèque externe? J'ai un script PHP qui ajoute/supprime des données à partir d'un fichier crontab, mais qui veulent avoir un moyen de vérifier que l'intervalle de temps de la partie est dans un format valide.
Vous devez vous connecter pour publier un commentaire.
Hmmm, intéressant problème.
Si vous allez vraiment valider, regex ne va pas être suffisant, vous aurez à fait d'analyser l'entrée et de valider chaque de la planification bits. C'est parce que chaque bit peut être un nombre, un mois/jour de la semaine de la ficelle, une gamme (2-7), un ensemble (3, 4, samedi), un Vixie cron-style raccourci (60/5) ou toute combinaison de ce qui précède -- toute seule regex approche va à obtenir de très poilu, rapide.
Juste en utilisant le
crontab
programme de Vixie cron pour valider n'est pas suffisant, car il ne fait pas de valider complètement! Je peux obtenircrontab
à accepter toutes sortes de choses illégales.Dave Taylor Wicked Cool Scripts Shell (Google livres lien) a un script sh qui n'validation partielle, je trouve la discussion intéressante. Vous pouvez également utiliser ou adapter le code.
J'ai aussi mis en place des liens vers deux classes PHP qui font ce que vous dites (dont la qualité, je n'ai pas évalué):
Une autre approche (selon ce que votre application a besoin de le faire) peut-être que PHP construire l'entrée crontab par programmation et de l'insérer, de sorte que vous savez que c'est toujours valable, plutôt que d'essayer de valider un non approuvés chaîne. Ensuite, vous juste besoin de faire un "bâtir une entrée crontab" de l'INTERFACE utilisateur, ce qui pourrait être simple si vous n'avez pas besoin de vraiment compliqué la planification des combinaisons.
Qui a dit que les expressions régulières peuvent pas le faire?
Aimable autorisation de mon employeur, Salir.com, voici un PHPUnit test qui n'cette validation. N'hésitez pas à modifier & distribuer. Je vais apprécier si vous gardez le @author avis & lien vers le site web.
Grâce à Jordi Salvat i Alabart qui a posté excellente solution.
J'ai seulement modifié solution existante posté par Jordi Salvat i Alabart. Il a travaillé pour moi, mais je voulais extraire certaines parties en capturant des groupes. J'ai ajouté des non-capture des parenthèses pour être en mesure d'extraire certaines parties de la crontab de l'enregistrement. Il est facile de voir quel groupe de capture à utiliser lors de la sortie de test regex à:
http://www.regexplanet.com/advanced/java/index.html
Ce code génère regex:
Ou Java alternative pour générer cette regex (sans @X stuff):
* * * * *
. Que dois-je faire de mal? regex101.com/r/rO2wW9/2Il y a une belle bibliothèque PHP qui peut être utilisé pour l'expression Cron validation:
Installation de cette bibliothèque via compositeur:
De vérifier si l'expression Cron est valable
Vous devriez être en mesure de le faire assez facilement avec la regex. En fait, je ne serais pas surpris si vous pouviez trouver un regex pour cela sur Google. Ce n'est pas testé, mais peut-être quelque chose comme:
@reboot
,@daily
,2-39/4
et plusieurs autres extensions de VixieGrâce à Jordi Salvat i Alabart et ph4r05.
J'ai des petits modifié solution existante posté sur php. Perl alternative pour générer des regex:
Utiliser le modèle:
/^((?:[1-9]?\d|\*)\s*(?:(?:[\/-][1-9]?\d)|(?:,[1-9]?\d)+)?\s*){5}$/
En PHP: