Serait il possible d'ajouter par exemple
if (defined('_IS_BOT')) return;
en début de fichier ecran_securite.php
pour faciliter l'usage avant l'appel standard par spip ?
En l'occurence j'aimerais tester _IS_BOT dans un gestionnaire d'erreur
appelé via le htaccess avant SPIP.
Pas compris ce que tu veux faire mais :
- return; va finir le hit Php vu qu'on est pas dans une fonction.
- la constante _IS_BOT peut être personnalisée en amont et donc en aucun cas servir à détecter que l'écran est déjà joué ou non.
Le but de ce petit ajout est de pouvoir inclure l'ecran de sécurité
sans que cela pose probleme à SPIP de le ré-inclure plus tard.
( Souhaitant alléger la charge php sur le serveur,
je sers des pages d'erreurs allégées et sans SPIP pour les bots,
et des pages d'erreurs complètes avec SPIP pour les utilisateurs.
Je l'ai fait actuellement en dupliquant le code de calcul de _IS_BOT.
Cf par exemple : Passerelle Eco - Ecovillage Global et Permaculture
à tester tel quel + en fakant le user_agent. travail en cours )
> mais :
- return; va finir le hit Php vu qu'on est pas dans une fonction.
On est pas dans une fonction, non,
mais ecran_securite est appelé par un include dans inc_version,
et la doc fr dit :
"Si appelée depuis une fonction, la commande return termine immédiatement la fonction, et retourne l'argument qui lui est passé. return interrompt aussi l'exécution de commande eval() ou de scripts.
Si appelée depuis l'environnement global, l'exécution du script est interrompue.
Si le script courant était inclus avec la structure include ou require, alors le contrôle est rendu au script appelant."
Donc ça rend la main au php incluant, c'est tout, le hit continue.
- la constante _IS_BOT peut être personnalisée en amont et donc en aucun cas servir à détecter que l'écran est déjà joué ou non.
Ah, c'est la situation d'inclusion dans l'ordre inverse de celle que que j'envisage.
En fait la constante à tester existe déjà est n'est pas _IS_BOT mais _ECRAN_SECURITE
au lieu de
define('_ECRAN_SECURITE', '1.1.4');
il faudrait simplement :
if (defined ("_ECRAN_SECURITE")) return;
define ("_ECRAN_SECURITE",1.1.4);
Le but de ce petit ajout est de pouvoir inclure l'ecran de sécurité
sans que cela pose probleme à SPIP de le ré-inclure plus tard.
L'écran est conçu pour pouvoir être appelé plusieurs fois sans dommage.
( Souhaitant alléger la charge php sur le serveur,
je sers des pages d'erreurs allégées et sans SPIP pour les bots,
et des pages d'erreurs complètes avec SPIP pour les utilisateurs.
Je l'ai fait actuellement en dupliquant le code de calcul de _IS_BOT.
Cf par exemple : Passerelle Eco - Ecovillage Global et Permaculture
à tester tel quel + en fakant le user_agent. travail en cours )
> mais :
- return; va finir le hit Php vu qu'on est pas dans une fonction.
On est pas dans une fonction, non,
mais ecran_securite est appelé par un include dans inc_version,
et la doc fr dit :
"Si appelée depuis une fonction, la commande return termine immédiatement la fonction, et retourne l'argument qui lui est passé. return interrompt aussi l'exécution de commande eval() ou de scripts.
Si appelée depuis l'environnement global, l'exécution du script est interrompue.
L'écran est conçu pour pouvoir être appelé depuis l'environnement global avec une directive auto_prepend_file au niveau du serveur (ce qui permet de sécuriser tout un serveur d'un seul coup, avec une seule occurence de l'écran à mettre à jour).
Dans ce cas le return; casse donc tout le serveur.
Si le script courant était inclus avec la structure include ou require, alors le contrôle est rendu au script appelant."
Donc ça rend la main au php incluant, c'est tout, le hit continue.
- la constante _IS_BOT peut être personnalisée en amont et donc en aucun cas servir à détecter que l'écran est déjà joué ou non.
Ah, c'est la situation d'inclusion dans l'ordre inverse de celle que que j'envisage.
En fait la constante à tester existe déjà est n'est pas _IS_BOT mais _ECRAN_SECURITE
au lieu de
define('_ECRAN_SECURITE', '1.1.4');
il faudrait simplement :
if (defined ("_ECRAN_SECURITE")) return;
define ("_ECRAN_SECURITE",1.1.4);
Pas possible de faire un return donc. Mais on pourrait conditionner tout ce qui suit à ce define en effet.
L'écran est conçu pour pouvoir être appelé depuis l'environnement global
avec une directive auto_prepend_file au niveau du serveur (ce qui permet de
sécuriser tout un serveur d'un seul coup, avec une seule occurence de
l'écran à mettre à jour).
c'est comme ça que je l'utilise et c'est hyperpratique : en cas de
problème, il suffit d'un simple svn up (pour chaque machine) pour être
protégé.
Dans ce cas le return; casse donc tout le serveur.
Oui ok.
La solution évoquée par Cerdic de conditionner le reste du contenu
à un ifdef semble satisfaire tous les cas d'usages :
if (!defined ('_ECRAN_SECURITE')) {
...tout le reste...
}