Executer un script en dehors du site
48 messages • Page 1 sur 4 • 1, 2, 3, 4
Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics
Executer un script en dehors du site
Bonjour,
Voila, je souhaite exécuter un script en-dehors des dossiers de mon site.
C'est un cron qui lance une tâche (un php) pour exécuter certaines opérations.
Faut-il qu'il soit obligatoirement dans mon dossier du site ?
ah oui...
j'ai un dédié donc accès ssh.
Ce que je voudrais c'est créer un dossier spécifique pour les tâche php à exécuter en cron, qui n'a rien a voir avec le reste. Est-ce que le php sera exécuté ? ou faut-il paramètrer apache ou php de tel sorte qu'il reconnaisse le dossier ?
J'espère que vous m'aurez compris.

Voila, je souhaite exécuter un script en-dehors des dossiers de mon site.
C'est un cron qui lance une tâche (un php) pour exécuter certaines opérations.
Faut-il qu'il soit obligatoirement dans mon dossier du site ?
ah oui...
j'ai un dédié donc accès ssh.
Ce que je voudrais c'est créer un dossier spécifique pour les tâche php à exécuter en cron, qui n'a rien a voir avec le reste. Est-ce que le php sera exécuté ? ou faut-il paramètrer apache ou php de tel sorte qu'il reconnaisse le dossier ?
J'espère que vous m'aurez compris.
Bein pas sur que le php s'execute hors de l'arbo du site (quoiqu'en dédié, tu fais bien ce que tu veux non? Mais question sécurité, ça me semble un peu limite). Sinon, pourquoi pas tout simplement un sous dossier du site avec .htaccess qui empeche tout accès via le web?
nuxvomica a écrit:Bein pas sur que le php s'execute hors de l'arbo du site (quoiqu'en dédié, tu fais bien ce que tu veux non? Mais question sécurité, ça me semble un peu limite). Sinon, pourquoi pas tout simplement un sous dossier du site avec .htaccess qui empeche tout accès via le web?
Pourquoi limite niveau sécurité ?
Je suis preneur pour le .htaccess qui empêche tout accès venant du web.
thierry8 a écrit:Pourquoi limite niveau sécurité ?
Autoriser l'execution de scripts dans l'arbo de ton serveur, hors répertoires web, me semble douteux. On regroupe en général les cgi dans un seul rep autorisé par exemple. Enfin bon, je suis loin d'être pointu sur le sujet, c'est juste une hypothèse.
euuuh pour ma part, je ne vois pas en quoi cela peut poserait problème.
Au contraire, tous mes crons sont dans un répertoire différent de l'arborescence du site ! Ainsi pas besoin de placer un .htaccess, ceux là ne sont pas accessibles.
Exemple :
/var/www/site1 => répertoire du site www.domaine.com
/var/www/cronsite1 => répertoire des crons
Au contraire, tous mes crons sont dans un répertoire différent de l'arborescence du site ! Ainsi pas besoin de placer un .htaccess, ceux là ne sont pas accessibles.
Exemple :
/var/www/site1 => répertoire du site www.domaine.com
/var/www/cronsite1 => répertoire des crons
Merci Robinson.
Une question, lorsque tu créé manuellement le dossier cronsite1, rajoute tu quelque chose dans le httpd.conf, au dans un autre fichier de config. pour que les scripts se trouvant à l'intérieure soit exécuté ?
Une question, lorsque tu créé manuellement le dossier cronsite1, rajoute tu quelque chose dans le httpd.conf, au dans un autre fichier de config. pour que les scripts se trouvant à l'intérieure soit exécuté ?
-

Bourriquet - WRInaute passionné

- Messages: 635
- Inscription: Lun Sep 19, 2005 22:10
Il est fortement déconseillé de mettre un script destiné à être un cron dans l'arborescence de ton site...
Tout d'abord, il faut bien comprendre une chose: dans ton script cron, apache n'intervient nulle part !
Ton script cron risque d'avoir besoin de droit d'accès à certains fichiers (suivant ce que fait exactement le cron) et le mettre sous l'arborescence apache présente le risque que :
1- quelqu'un le sollicite alors que tu ne le veux pas
2- quelqu'un trouve une faille dans ton script qui risque alors de devenir un vrai danger publique sur ton serveur.
3- si tu le fais passer par apache, lorsque tu as un plantage de Apache, ton cron ne marche plus.
Pour exécuter un cron en PHP, tu n'as même pas besoin de Apache. J'en avais parlé dans un post préccédent, mais je le retrouve plus, alors je vais me la refaire
PHP c'est un programme qui va interprêter du code que tu lui fournis, soit par le biais d'un fichier, soit même à la volée.
On l'utilise surtout avec Apache car il permet de créer des pages dynamiques, et qu'il dispose d'une floppée de fonctions bien utiles pouir une application en mode cgi.
Dans ta configuration Apache, pour un serveur qui supporte les pages Web en PHP, la seule chose que tu lui dis, c'est :
"lorsqu'il y a une page qui porte l'extension '.php', je la donne à l'interprêteur, qui fait son taff, et me renvoie le résultat, que je ferai suivre à l'internaute".
Bref. PHP peut être utilisé indépendamment de Apache. Comment ?
Puisque Apache n'est pas là pour dire à PHP d'interprêter un fichier, tu dois utiliser la syntaxe prévue sous Linux pour ce genre de cas: dans le fichier, donner le chemin vers l'interprêteur du script.
Par exemple si tu faisais un script en SH, ça donnerait :
en première ligne, car, le programme qui interprête le SH se trouve dans /bin et est SH.
Pour PHP, c'est génériquement :
Le "#!" ça veut dire "Attention, voici le chemin vers l'interprêteur.
Par contre, sur ton serveur tu dois avoir installé un PHP qui est compilé pour optimiser les échanges avec Apache. Donc si tu lances ton script sous SSH, la sortie de ton script sera formaté avec des headers html
Toi tu n'en as pas besoin, car tu le lance en mode console. Donc tu vas lui dire gentillement de se la fermer
Comment ? En lui précisant l'option "-q" qui permet de le lancer en "quiet mode".
Ta première ligne dans ton php devient :
Ensuite, dans ton code, tu précise bien les balises "<?php" et "?>" là où il y a du code à interprêter. En dehors, le reste sera affiché en tant que texte.
Ensuite, pour le passage de variables au script, tu as deux globales à connaitres :
$argc : qui contient le nombre d'argument passé au script.
$argv : un tableau qui te donne le nom du script puis les différents arguments.
Le premier argument est $argv[1] .
Ensuite, il te reste une seule manip à faire: donner les bons droits à ton script. Je te laisse gérer ça, sauf que tu dois absolument lui donner le droit d'exécution :
Et vala c'est tout bon
Tout d'abord, il faut bien comprendre une chose: dans ton script cron, apache n'intervient nulle part !
Ton script cron risque d'avoir besoin de droit d'accès à certains fichiers (suivant ce que fait exactement le cron) et le mettre sous l'arborescence apache présente le risque que :
1- quelqu'un le sollicite alors que tu ne le veux pas
2- quelqu'un trouve une faille dans ton script qui risque alors de devenir un vrai danger publique sur ton serveur.
3- si tu le fais passer par apache, lorsque tu as un plantage de Apache, ton cron ne marche plus.
Pour exécuter un cron en PHP, tu n'as même pas besoin de Apache. J'en avais parlé dans un post préccédent, mais je le retrouve plus, alors je vais me la refaire
PHP c'est un programme qui va interprêter du code que tu lui fournis, soit par le biais d'un fichier, soit même à la volée.
On l'utilise surtout avec Apache car il permet de créer des pages dynamiques, et qu'il dispose d'une floppée de fonctions bien utiles pouir une application en mode cgi.
Dans ta configuration Apache, pour un serveur qui supporte les pages Web en PHP, la seule chose que tu lui dis, c'est :
"lorsqu'il y a une page qui porte l'extension '.php', je la donne à l'interprêteur, qui fait son taff, et me renvoie le résultat, que je ferai suivre à l'internaute".
Bref. PHP peut être utilisé indépendamment de Apache. Comment ?
Puisque Apache n'est pas là pour dire à PHP d'interprêter un fichier, tu dois utiliser la syntaxe prévue sous Linux pour ce genre de cas: dans le fichier, donner le chemin vers l'interprêteur du script.
Par exemple si tu faisais un script en SH, ça donnerait :
- Code: Tout sélectionner
#!/bin/sh
en première ligne, car, le programme qui interprête le SH se trouve dans /bin et est SH.
Pour PHP, c'est génériquement :
- Code: Tout sélectionner
#!/usr/local/bin/php
Le "#!" ça veut dire "Attention, voici le chemin vers l'interprêteur.
Par contre, sur ton serveur tu dois avoir installé un PHP qui est compilé pour optimiser les échanges avec Apache. Donc si tu lances ton script sous SSH, la sortie de ton script sera formaté avec des headers html
Toi tu n'en as pas besoin, car tu le lance en mode console. Donc tu vas lui dire gentillement de se la fermer
Ta première ligne dans ton php devient :
- Code: Tout sélectionner
#!/usr/local/bin/php -q
Ensuite, dans ton code, tu précise bien les balises "<?php" et "?>" là où il y a du code à interprêter. En dehors, le reste sera affiché en tant que texte.
Ensuite, pour le passage de variables au script, tu as deux globales à connaitres :
$argc : qui contient le nombre d'argument passé au script.
$argv : un tableau qui te donne le nom du script puis les différents arguments.
Le premier argument est $argv[1] .
Ensuite, il te reste une seule manip à faire: donner les bons droits à ton script. Je te laisse gérer ça, sauf que tu dois absolument lui donner le droit d'exécution :
- Code: Tout sélectionner
chmod +x script.php
Et vala c'est tout bon
..
Merci pour cette explication.
Dans mon cas il s'agit d'un script en PHP.
Je devrais donc mettre:
Le -q permet de ne pas renvoyer quelque chose, si j'ai bien compris.
En revanche, le chemin /usr/local/bin/ est bien existant, mais je n'ai pas de php à l'intérieur. C'est normal !?
Je ne passe aucune variable (normalement), je n'aurais donc pas besoin de $argc et de $argv.
Mais peut tout de même m'expliquer comment passer une variable, parce que j'avoue, ne pas avoir compris comment les utiliser.
C'est un script qui intervient sur toutes les bases de données mysql, de ce fait il possède les droits root.
.. .. .. .. ..
En revanche, sous Plesk, il y a déjà des cron d'établis, en voici un exemple:
Dois-je également mettre le >/dev/null 2>&1 ?
A quoi cela correspond ?
Si je comprends cette tâche, par rapport à ce que tu m'as dis le début permettrait d'indiqué le chemin pour interpréter le script. (Plesk fonctionne sous PHP 5). Ensuite, la ligne d'après, le chemin du script, puis derrière, quelque chose d'autre...
Merci pour cette explication.
Dans mon cas il s'agit d'un script en PHP.
Je devrais donc mettre:
- Code: Tout sélectionner
#!/usr/local/bin/php -q
<?php
/* mon script */
/* rapport par mail */
?>
Le -q permet de ne pas renvoyer quelque chose, si j'ai bien compris.
En revanche, le chemin /usr/local/bin/ est bien existant, mais je n'ai pas de php à l'intérieur. C'est normal !?
Je ne passe aucune variable (normalement), je n'aurais donc pas besoin de $argc et de $argv.
Mais peut tout de même m'expliquer comment passer une variable, parce que j'avoue, ne pas avoir compris comment les utiliser.
C'est un script qui intervient sur toutes les bases de données mysql, de ce fait il possède les droits root.
.. .. .. .. ..
En revanche, sous Plesk, il y a déjà des cron d'établis, en voici un exemple:
- Code: Tout sélectionner
/opt/psa/admin/bin/php /opt/psa/admin/plib/report/autoreport.php --auto monthly >/dev/null 2>&1
Dois-je également mettre le >/dev/null 2>&1 ?
A quoi cela correspond ?
Si je comprends cette tâche, par rapport à ce que tu m'as dis le début permettrait d'indiqué le chemin pour interpréter le script. (Plesk fonctionne sous PHP 5). Ensuite, la ligne d'après, le chemin du script, puis derrière, quelque chose d'autre...
-

Bourriquet - WRInaute passionné

- Messages: 635
- Inscription: Lun Sep 19, 2005 22:10
L'option -q permet d'être en quiet mode : c'est à dire d'afficher quelque chose si tu fais un echo, mais de ne pas envoyer d'entête html.
Le /usr/local/bin/php est un emplacement qu'on retrouve souvent sur les distributions linux, mais ce n'est une règle générale. Pour savoir où se trouve ton exécutable, soit tu fais un phpinfo(), soit tu fais un whereis en ligne de commande :
Le /dev/null n'est pas obligatoire.
Pour ton rapport tu te l'envoie par mail, mais je te conseille tout de même de faire un petit log au cas ou y est un plantage.
Ca peut être fait très simplement comme ça :
Pour le passage d'argument c'est simple :
$argv[0] contiendra : /chemin/vers/ton/script.php
$argv[1] contiendra : pouet
$argv[2] contiendra : prout
$argv[3] contiendra : biloute
$argv[4] contiendra : NuNux
$argv[5] contiendra : et plein d'autre choses possible encore
Après c'est à toi en PHP de faire des traitements différents en fonction des arguments.
Le /usr/local/bin/php est un emplacement qu'on retrouve souvent sur les distributions linux, mais ce n'est une règle générale. Pour savoir où se trouve ton exécutable, soit tu fais un phpinfo(), soit tu fais un whereis en ligne de commande :
- Code: Tout sélectionner
[Bourriquet@sms-gift.com] whereis php
php: /usr/local/bin/php /usr/local/lib/php /usr/local/lib/php.ini
Le /dev/null n'est pas obligatoire.
Pour ton rapport tu te l'envoie par mail, mais je te conseille tout de même de faire un petit log au cas ou y est un plantage.
Ca peut être fait très simplement comme ça :
- Code: Tout sélectionner
/chemin/vers/ton/script.php >> fichier_log.txt
Pour le passage d'argument c'est simple :
- Code: Tout sélectionner
/chemin/vers/ton/script.php pouet prout biloute NuNux "et plein d'autre choses possible encore"
$argv[0] contiendra : /chemin/vers/ton/script.php
$argv[1] contiendra : pouet
$argv[2] contiendra : prout
$argv[3] contiendra : biloute
$argv[4] contiendra : NuNux
$argv[5] contiendra : et plein d'autre choses possible encore
Après c'est à toi en PHP de faire des traitements différents en fonction des arguments.
Merci, merci, merci !!!
Concernant le fichier .txt, il sera créé je suppose à la racine tu dossier du script courant ?
Une question encore: (confirmation de ma bonne compréhension
)
Finallement je met le #!/usr/local/bin/php -q au début de mon fichier php. Et ma tâche cron serait :
/chemin/vers/ton/script.php var1 >> fichier_log.txt
Et mon fichier php:
Tout somplement ?
Merci beaucoup à toi ! Tu m'as été d'une grande aide sur bien des points.
note: sur plesk l'emplacement est donc là: /usr/bin/php
Concernant le fichier .txt, il sera créé je suppose à la racine tu dossier du script courant ?
Une question encore: (confirmation de ma bonne compréhension
Finallement je met le #!/usr/local/bin/php -q au début de mon fichier php. Et ma tâche cron serait :
/chemin/vers/ton/script.php var1 >> fichier_log.txt
Et mon fichier php:
- Code: Tout sélectionner
#!/usr/bin/php -q
<?php
/* mon script */
/* rapport par mail */
?>
Tout somplement ?
Merci beaucoup à toi ! Tu m'as été d'une grande aide sur bien des points.
note: sur plesk l'emplacement est donc là: /usr/bin/php
Robinson a écrit:euuuh pour ma part, je ne vois pas en quoi cela peut poserait problème.
Au contraire, tous mes crons sont dans un répertoire différent de l'arborescence du site ! Ainsi pas besoin de placer un .htaccess, ceux là ne sont pas accessibles.
Exemple :
/var/www/site1 => répertoire du site www.domaine.com
/var/www/cronsite1 => répertoire des crons
AMHA, il y a erreur, là (hum, au moins dans les hébergements mutualisés où www est le répertoire de base, mais peut-être en dédié tu peux gérer ça différemment)
en effet, au moins dans ce cas, il suffit de -http://ton-domaine.tld/cronsite1 pour avoir l'index de tous les fichiers présents dans cronsite1... et en faire à peu près ce que l'on veut
48 messages • Page 1 sur 4 • 1, 2, 3, 4
Formation recommandée sur ce thème :
Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Les albums web Picasa passent à 1 Go de stockage
- Photos satellite des incendies en Grèce dans Google Earth
- Ajouter un Gadget Google sur son site
- Google Desktop pour Mac OS X
- Picasa Web Albums en français
- Google Pack s'enrichit de 2 nouveaux logiciels gratuits
- Résultats des élections présidentielles du 1er tour 2007
- AdSense Tracking : statistiques détaillées sur les clics AdSense
- Résultats des élections législatives du 1er tour 2007
- Suivre le parcours de la flamme Olympique 2008 dans Google Earth
- Executer script PHP puis visualiser le script Impossible?
- executer un script C++ sous PHP !
- Executer un script par une seule IP
- Executer un script 5 minutes apres un autre
- [Resolu] Executer un script à la réception d'un mail
- [réglé] Executer un script avant la sortie du site
- Résolu : Executer un script php à la réception d'un mail
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités






le forum