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
- thierry8
- WRInaute accro

- Messages: 3251
- Inscription: 11 Juil 2005
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.
-

nuxvomica - WRInaute discret

- Messages: 76
- Inscription: 3 Déc 2005
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

- Messages: 3251
- Inscription: 11 Juil 2005
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.
-

nuxvomica - WRInaute discret

- Messages: 76
- Inscription: 3 Déc 2005
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 passionné

- Messages: 2231
- Inscription: 25 Oct 2005
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
- Bourriquet
- WRInaute impliqué

- Messages: 637
- Inscription: 19 Sep 2005
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
- thierry8
- WRInaute accro

- Messages: 3251
- Inscription: 11 Juil 2005
..
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 impliqué

- Messages: 637
- Inscription: 19 Sep 2005
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.
- thierry8
- WRInaute accro

- Messages: 3251
- Inscription: 11 Juil 2005
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
-

cardoule - WRInaute discret

- Messages: 233
- Inscription: 19 Fév 2004
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 les experts Google Analytics de Ranking Metrics.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- 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
- Javascript : détecter mot clés Google et exécuter un script
- Résolu : Executer un script php à la réception d'un mail
- Les robots qui crawl les sites pourait il executer des script php ?
- Exécuter fichier sql
- Les albums web Picasa passent à 1 Go de stockage - 08-03-2007
- Google Chrome dépasse Safari aux USA - 29-06-2010
- Photos satellite des incendies en Grèce dans Google Earth - 30-08-2007
- Ajouter un Gadget Google sur son site - 04-10-2006
- Google Desktop pour Mac OS X - 05-04-2007
- Picasa Web Albums en français - 08-12-2006
- Google Pack s'enrichit de 2 nouveaux logiciels gratuits - 28-03-2007
- Résultats des élections présidentielles du 1er tour 2007 - 22-04-2007
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
