Cron executant php avec arguments

Bonjour à tous,

Je suis sous debian lenny, et j’ai un script php que j’aimerai faire tourner regulierement avec un cron.
Le souci c’est qu’il semblerait que l’on ne puisse pas mettre ce type de commande : php -f /home/mondossier/monscript.php?id=1&bl=y

Donc pour parvenir à mes fins, que me conseilleriez vous?

Merci

Je te conseille ce tutoriel :
siteduzero.com/tutoriel-3-29 … ments.html
C’est plutôt bien expliqué ; si tu ne veux pas avoir à modifier tous tes fichiers php, tu peux aussi faire, avec lynx,
lynx 127.0.0.1/chemin/vers/monfichier … 1=x&arg2=y
Avec bien sûr, dans ton userdir.conf ou dans un .htaccess, un
<Files /chemin/vers/monfichier.php>
Order Deny,allow
Deny from All
Allow from 127.0.0.1

Pour resteindre l’accès à localhost. Mais bon, si quelqu’un se connecte sur le serveur, il peut quand même aller exécuter le fichier.
(tu peux aussi mettre tous tes scripts dans le genre dans un répertoire et resteindre ce répertoire, en utilisant à la place de )

[quote=“Glorf”]Je te conseille ce tutoriel :
siteduzero.com/tutoriel-3-29 … ments.html
C’est plutôt bien expliqué ; si tu ne veux pas avoir à modifier tous tes fichiers php, tu peux aussi faire, avec lynx,
lynx 127.0.0.1/chemin/vers/monfichier … 1=x&arg2=y
Avec bien sûr, dans ton userdir.conf ou dans un .htaccess, un
<Files /chemin/vers/monfichier.php>
Order Deny,allow
Deny from All
Allow from 127.0.0.1

Pour resteindre l’accès à localhost. Mais bon, si quelqu’un se connecte sur le serveur, il peut quand même aller exécuter le fichier.
(tu peux aussi mettre tous tes scripts dans le genre dans un répertoire et resteindre ce répertoire, en utilisant à la place de )[/quote]
Monter un serveur web pour ça… :confused:

[quote=“El-Cherubin”]Bonjour à tous,

Je suis sous debian lenny, et j’ai un script php que j’aimerai faire tourner regulierement avec un cron.
Le souci c’est qu’il semblerait que l’on ne puisse pas mettre ce type de commande : php -f /home/mondossier/monscript.php?id=1&bl=y

Donc pour parvenir à mes fins, que me conseilleriez vous?

Merci[/quote]
Qu’est ce qui te fait dire ça ?

Tu as bien protégé ton url ?

[quote=“MisterFreez”][quote=“Glorf”]Je te conseille ce tutoriel :
siteduzero.com/tutoriel-3-29 … ments.html
C’est plutôt bien expliqué ; si tu ne veux pas avoir à modifier tous tes fichiers php, tu peux aussi faire, avec lynx,
lynx 127.0.0.1/chemin/vers/monfichier … 1=x&arg2=y
Avec bien sûr, dans ton userdir.conf ou dans un .htaccess, un
<Files /chemin/vers/monfichier.php>
Order Deny,allow
Deny from All
Allow from 127.0.0.1

Pour resteindre l’accès à localhost. Mais bon, si quelqu’un se connecte sur le serveur, il peut quand même aller exécuter le fichier.
(tu peux aussi mettre tous tes scripts dans le genre dans un répertoire et resteindre ce répertoire, en utilisant à la place de )[/quote]
Monter un serveur web pour ça… :/[/quote]
Je partais du principe qu’il avait déjà un serveur web, et qu’il avait pas forcément envie de créer un formulaire de traiter ses variables en arguments. Mais c’est vrai que s’il a pas de serveur web, effectivement c’pas très pratique.

Bonjour,

J’utilise des serveurs web donc ça me sera utile, je ne savais pas qu’on pouvait utiliser lynx de cette façon par exemple.
Pour ce qui est de protéger l’url je ne l’ai pas fait non plus, je vais donc essayer.

Merci à tous les 2

[quote=“El-Cherubin”]Bonjour,

J’utilise des serveurs web donc ça me sera utile, je ne savais pas qu’on pouvait utiliser lynx de cette façon par exemple.
Pour ce qui est de protéger l’url je ne l’ai pas fait non plus, je vais donc essayer.

Merci à tous les 2[/quote]
C’est juste que tu vas sur l’adresse comme t’y vas de chez toi, l’avantage de lancer un cron sur le serveur ça permet de restreindre l’accès à localhost uniquement. Là, t’exécutes ton script via le mod_php d’apache2, comme d’habitude si t’as un serveur web. (t’es pas obligé d’utiliser lynx hein, par contre je pense que c’est mieux de faire un lynx url, et genre 1 minute plus tard, tu le tues (à adapte suivant le temps que mets ton script à s’exécuter))

Si je suis dans le cas d’un script php que je dois lancer régulièrement, avec divers arguments, le plus simple est de faire X cron avec lynx, de calculer approximativement le temps que ça va prendre puis de tuer le process, ou un cron lynx, je tue, un cron lynx, je tue, X fois.

Je suis pas un pro de ce type d’utilisation donc quelle serait la meilleure option?

Merci :slightly_smiling:

Ça ne marche pas la protection de l’url ?
Sinon le plus simple c’est d’utiliser curl ou wget qui te feront tout ce dont tu as besoin sans avoir besoin d’X, de tuer un processus ou quoi que ce soit.

je vais tester avec les ’ ’ mais le sujet déviant un peu et cela m’interessant je creuse un peu :wink:

Pour wget et curl je peux simuler de la même façon l’appel à une page php avec argument? Oui oui… je suis un (peu) noob sur les bords :unamused:

Autre chose, si par exemple mon script (monscript.php?id=1&bl=y) peut avoir comme argument un chiffre entre 1 et 99 (id) et une lettre soit a, soit r, soit y (bl), y a t-il un moyen de m’éviter d’écrire toutes les urls à la main et d’avoir un système similaire au paramètre crontab avec *, intervale 1-5, etc ?

Merci encore pour votre aide.

[quote=“El-Cherubin”]je vais tester avec les ’ ’ mais le sujet déviant un peu et cela m’interessant je creuse un peu :wink:

Pour wget et curl je peux simuler de la même façon l’appel à une page php avec argument? Oui oui… je suis un (peu) noob sur les bords :unamused:

Autre chose, si par exemple mon script (monscript.php?id=1&bl=y) peut avoir comme argument un chiffre entre 1 et 99 (id) et une lettre soit a, soit r, soit y (bl), y a t-il un moyen de m’éviter d’écrire toutes les urls à la main et d’avoir un système similaire au paramètre crontab avec *, intervale 1-5, etc ?

Merci encore pour votre aide.[/quote]
curl est celui que je connais le mieux. Avec tu peut par exemple :
[ul]
[li]définir un user agent[/li]
[li]utiliser un cookies[/li]
[li]passer des paramètres POST (et GET bien sûr)[/li][/ul]

Si tu veut lancer plusieurs requêtes tu peut le faire avec lui et des expressions régulières par exemple (je pense que les expressions parlent d’elle même) :
[ul]
[li]http://example.fr/[1-6][/li]
[li]http://example.fr/{A,z,E,r,T,y}[/li][/ul]

tu aurais un lien “curl pour les nuls” …?

man curl
Je n’ai pas trouvé mieux dans mes deux minutes de recherche (il y a beaucoup de truc sur PHP).
En fait curs, c’est libcurl qui possède des bindings dans pleins de langages (dont PHP) et une interface CLI pour l’utiliser (curl).

Accès impossible `file://localhost/home/script.php?id=25popul=y' Alerte! : Impossible d'accéder au document.

Avec lynx aussi impossible car il ne semble pas intégrer les arguments finaux et me renvoie des erreurs sql que je n’ai pas via navigateur.
Reste curl, j’ai le mod php d’installé mais je ne sais pas si j’ai curl “classique”, va falloir tester.

[quote=“El-Cherubin”]Accès impossible `file://localhost/home/script.php?id=25[b][color=#FF0000]&[/color][/b]popul=y' Alerte! : Impossible d'accéder au document. [/quote]
tu mélange fichier et url … avec le “file://” tu ne peut pas mettre "?id=25&popul=y"
Si tu utilise lynx/wget il faut absolument passer par le serveur web, donc avoir une URL du genre “http://127.0.0.1/monscript.php?id=1&bl=y

Ta première idée de passer par l’interpréteur php me semble pas mal si ton script est dans un dossier totalement inaccessible à ton serveur web.

tu peux rajouter au début de ton script ce code, il suffit d’éditer $liste_get : t’associes au numéro de l’argument (dans php -f /chemin/vers/fichier.php argument1 argument2) le nom de la variable $_GET correspondante (mais faut donner les arguments dans le bon ordre).
Mais c’est si t’as la flemme de reprendre ton code pour modifier les variables

<?php $liste_get=array(1=>'id', 2=>'page',); foreach($argv as $key=>$item) { if($key>0) { $_GET[$liste_get[$key]]=$item; } }
Mais si tu veux faire varier tes variables, tu peux :

  1. te baser sur l’heure(tu la récupères via date(), tu prends la minute, et hop, t’envoie comme ça)
  2. à chaque exécution de ton script, tu enregistres dans un fichier le précédent chiffre, ensuite tu ouvres le fichier, tu incrémentes, tu sauvegarde, tu exécute.
    Par contre, si tu lances tes scripts via crontab toutes les minutes, et qu’ils manipulent les mêmes données, faut faire gaffe qu’ils mettent moins d’une minute, car si script1 accède à (par exemple) la table users et supprime des entrées, et que script2 essaie d’accéder à des entrées supprimées …

Une solution propre serais de mettre un lock (fichier “.lock” par exemple) et de vérifié son existance, si inexistant alors on s’exécute normalement sinon on ne fait rien …

C’est géré par la base de données.

Il me semble que faire

php /home/mondossier/monscript.php id=1 bl=y fonctionne