Executer un script en dehors du site

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Executer un script en dehors du site

Message le Mer Mar 15, 2006 21:12

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. :? :?


nuxvomica
WRInaute discret
WRInaute discret
 
Messages: 76
Inscription: Sam Déc 03, 2005 0:15

Message le Mer Mar 15, 2006 23:07

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?

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Message le Mer Mar 15, 2006 23:11

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. :wink:

zimounet
WRInaute accro
WRInaute accro
 
Messages: 1796
Inscription: Lun Nov 08, 2004 20:57

Message le Mer Mar 15, 2006 23:54

message supprimé
Dernière édition par zimounet le Jeu Avr 06, 2006 3:38, édité 1 fois.

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Message le Mer Mar 15, 2006 23:57

zimounet a écrit:Si c'est un cron programmé sur ton serveur, et qui execute un script de ton serveur, je ne vois pas le probleme...

par rapport à quoi ? :?

zimounet
WRInaute accro
WRInaute accro
 
Messages: 1796
Inscription: Lun Nov 08, 2004 20:57

Message le Jeu Mar 16, 2006 0:10

message supprimé
Dernière édition par zimounet le Jeu Avr 06, 2006 3:39, édité 1 fois.


nuxvomica
WRInaute discret
WRInaute discret
 
Messages: 76
Inscription: Sam Déc 03, 2005 0:15

Message le Jeu Mar 16, 2006 0:54

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.

Robinson
WRInaute accro
WRInaute accro
 
Messages: 1857
Inscription: Mar Oct 25, 2005 23:10

Message le Jeu Mar 16, 2006 1:23

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

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Message le Jeu Mar 16, 2006 8:15

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é ?

zimounet
WRInaute accro
WRInaute accro
 
Messages: 1796
Inscription: Lun Nov 08, 2004 20:57

Message le Jeu Mar 16, 2006 8:19

message supprimé
Dernière édition par zimounet le Jeu Avr 06, 2006 3:39, édité 1 fois.


Bourriquet
WRInaute passionné
WRInaute passionné
 
Messages: 635
Inscription: Lun Sep 19, 2005 22:10

Message le Jeu Mar 16, 2006 8:46

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 :
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 :) Comment ? En lui précisant l'option "-q" qui permet de le lancer en "quiet mode".

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 ;)

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Message le Jeu Mar 16, 2006 9:45

..
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é
WRInaute passionné
 
Messages: 635
Inscription: Lun Sep 19, 2005 22:10

Message le Jeu Mar 16, 2006 10:01

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 :

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.

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Message le Jeu Mar 16, 2006 10:33

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:
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


cardoule
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 233
Inscription: Jeu Fév 19, 2004 16:24

Message le Jeu Mar 16, 2006 10:36

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 8) ... si aucun .htaccess ne vient en interdire ni l'accès ni l'indexation !

Executer un script en dehors du site

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 :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités