SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 229 visiteurs en ce moment

Accueil > Interactivité, échanges > Archives > Lancer un script PHP dans un article

Lancer un script PHP dans un article

23 avril 2004 – par GoUaRfIg ! – 126 commentaires

8 votes

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Pouvoir lancer un script personnel dans un article spécifique et créer ainsi des articles à contenu « dynamique ».

Introduction :

La philosophie de SPIP est de pouvoir publier des articles.
Donc on ne peut pas faire un <?php include( "script.php"); ?> dans un article, ca n’est pas fait pour ca.

Pourtant dans certains cas précis, vous pouvez avoir besoin d’afficher dans un article des informations que vous avez calculé et surtout qui peuvent évoluer.

Exemple

Je dois gérer sur mon site une liste des membres d’un club.

Cette liste est modifiée régulièrement, et je l’ai donc mise dans une table de ma base de données.

J’aurai pu créer une page spécifique pour afficher cette liste, et pourtant j’aurai aimé qu’elle s’intègre parfaitement dans l’environnement SPIP, déjà niveau design, mais aussi qu’on puisse faire une recherche SPIP sur la partie fixe de l’article (autour de la liste), qu’elle apparaisse dans les rubriques, etc.

J’aurai également pu utiliser la fonction de redirection d’article, mais elle ne me plait pas non plus parce que j’ai envie d’utiliser une fonctionnalité importante de SPIP qui est le cache des pages !

Je vais donc vous montrer comment j’ai fait !

Avantages :

Par rapport au développement d’un partie spéciale d’un site, cette solution permet :
-  de garder une arborescence homogène avec les rubriques de SPIP, et compatible avec le moteur de recherche.
-  de pouvoir habiller un script dans un article et donc de le modifier facilement.
-  de bénéficier du moteur de cache de SPIP.

Sécurité :

Pour une question de sécurité, chaque script proposé dans les articles DOIT être inscrit dans une liste de scripts autorisés, pour ne pas que chaque rédacteur puisse faire n’importe quoi avec n’importe quel script !

Concrètement :

Ce que nous allons pouvoir faire c’est inclure à n’importe quel endroit de l’article la commande suivante :

#INCLURE (mon_script.php3)

Ceci plusieurs fois, et avec plusieurs scripts différents.

Le filtre qui va bien

J’ai créé un filtre appelé "autoriser_php" à appliquer sur le champs voulu (en particulier #TEXTE)

Voici ce filtre, à ajouter au fichier « mes_fonctions.php3 »

  1. /*****************************************************************************/
  2. /** Cette fonction permet de lancer un script PHP dans un article
  3. /**
  4. /** La syntaxe est la suivante :
  5. /** #INCLURE ( nom_fichier )
  6. /**
  7. /** Auteur : F. Quointeau
  8. /** Version : 0.0.2
  9. /** Date : 16 Mai 2004
  10. /*****************************************************************************/
  11. function autoriser_php( $texte) {
  12.  
  13. // Dossier où sont stockés les scripts
  14. $dossier_inclus = './';
  15.  
  16. // Liste des scripts autorisés
  17. $scripts_autorises = Array(
  18. 'mon_premier_script.php3',
  19. 'mon_second_script.php3'
  20. );
  21.  
  22.  
  23. // Les fichiers inclus autorises sont : *.php, *.php3, *.php4, *.phtml, *.htm, *.html, *.inc
  24. $chaine_recherche = '/#INCLU[R|D]E( *)\(( *)([^\)]*\.(php|php3|php4|phtml|htm|html|inc))( *)\)/i';
  25.  
  26. // Recherche la chaine #INCLUDE(script)
  27. while( preg_match( $chaine_recherche, $texte, $resultats)) {
  28. // Verifie le droit d'inclure ce fichier script !
  29. $autorise = false;
  30. reset( $scripts_autorises);
  31. while( $script = each( $scripts_autorises)) {
  32. if( strcasecmp( $script[value], $resultats[3]) == 0) $autorise = true;
  33. }
  34. if( $autorise == true) {
  35. // Verifie que le fichier existe
  36. if( file_exists ( $dossier_inclus . $resultats[3])) {
  37. // Vide le buffer de sortie
  38. $affichage_php = '';
  39. // Et lance le fichier inclu !!!
  40. include( $dossier_inclus . $resultats[3]);
  41. } else {
  42. $affichage_php = "<b>#INCLURE: Le fichier de script n'existe pas !</b>";
  43. }
  44. } else {
  45. $affichage_php = "<b>#INCLURE: Script NON autoris&eacute; !</b>";
  46. }
  47. // Attention, n'effectue qu'un seul remplacement à la fois !
  48. $texte = preg_replace( $chaine_recherche, $affichage_php, $texte, 1);
  49. }
  50.  
  51. return( $texte);
  52. }

Télécharger

Attention :
Au début de la fonction, il y a un tableau php qui décrit la liste des scripts qui ont le droit d’être lancé à partir d’un article. Pensez à le mettre à jour avec vos scripts.

Dossier des scripts

Si vous souhaitez mettre vos scripts dans un dossier spécial, mettez également le chemin des scripts dans la variable
$dossier_inclus au début de la fonction filtre. Par exemple :

   $dossier_inclus = 'mes_scripts/';

Notez le ’/’ obligatoire à la fin du dossier.

Mais vous pouvez aussi « cacher » vos scripts (non disponibles par une requête HTTP dessus) en les placant en amont du dossier racine du site web :

   $dossier_inclus = '../mes_scripts_caches/';

Attention, en fonction de votre hébergeur, vous n’aurez pas forcément la possibilité de le faire !

Le script des familles :

Voici le script que vous voulez promouvoir :

  1. <?php
  2. echo( "Hello World !");
  3. ?>

Télécharger

Puissant, mais vous allez devoir l’écrire sous cette forme :

  1. <?php
  2. $affichage_php = "Hello World !";
  3. ?>

Télécharger

Vous suivez ?

Vous ne pouvez pas vous permettre d’afficher sauvagement vos informations directement par un echo( ), celles-ci ne seraient pas prises en compte dans le cache de SPIP, et souvenez-vous que votre script travaille à l’intérieur d’un filtre, et qu’il y a peut être d’autres filtres qui attendent derrière :-)

Et maintenant, comment relier le tout ?

Créez un article comme celui-ci par exemple :

Bonjour,
voici le résultat de ma fonction :
#INCLURE (mon_premier_script.php3)

Hop

Créez ensuite un fichier mon_premier_script.php3 qui contient le script énoncé plus haut ; mettez le dans le dossier de SPIP si vous n’avez pas spécifié de dossier dans la variable $dossier_inclus (par défaut elle contient le dossier courant).

Dans votre squelette, vous devez avoir quelque chose du genre :

<BOUCLE_1 (ARTICLES) {id_article}>
 [(#TEXTE|autoriser_php)]
</BOUCLE_1>

J’ai appliqué le filtre "autoriser_php" à l’affichage de #TEXTE.

Et votre article affiche désormais :

Bonjour,
voici le résultat de ma fonction :
Hello World !

Hop

Pour aller un peu plus loin...

Imaginons que vous ayez besoin de récupérer une variable de l’url dans votre script. Les variables globales de SPIP sont accessibles depuis votre script, puisqu’il fonctionne à l’intérieur d’un filtre SPIP.

Regardez le script suivant

  1. <?php
  2. // Ma variable
  3. $id_machin = $GLOBALS['id_machin'];
  4.  
  5. $affichage_php = "Hello machin n°$id_machin";
  6. ?>

Télécharger

Je récupère la variable globale $id_machin et je l’affiche dans mon script. Cette variable globale est tout simplement une des variables passées en paramètres.

Si j’essaye l’url :
article.php3?id_article=x{{&id_machin=11}}

J’aurai alors l’affichage :

Bonjour,
voici le résultat de ma fonction :
Hello machin n°11

Hop

C’est d’autant plus pratique que SPIP va générer un cache pour TOUTES les url différentes.

Fort heureusement, sinon l’affichage de
article.php3 ?id_article=x&id_machin=1
serait le même que l’affichage de
article.php3 ?id_article=x&id_machin=2

puisque la page article.php3 ?id_article=x est à priori déjà dans le cache.

Attention toutefois à ne pas remplir votre cache de millions de fichiers si votre script peut comporter des millions de combinaisons de paramètres dans l’url !

Récupérer des variables globales de SPIP

En plus de pouvoir récupérer des variables de l’url, vous pouvez récupérer des variables de l’environnement SPIP, comme celle-ci :

$GLOBALS['spip_lang']

qui vous permet de récupérer la langue courante (si vous utilisez SPIP multilingue).
Ca peut en effet être très pratique si vous avez besoin de générer un affichage « localisé » avec votre script. [1]

Mise en garde avec MySQL

SPIP utilise par défaut la connexion courante à la base de données MySQL. Autrement dit, si dans votre script, vous ouvrez une base MySQL autre que celle utilisée par SPIP, celui-ci n’aura plus accès à sa base une fois le filtre exécuté.

Pour remédier à ca, il y a deux solutions :

-  Utiliser la base de SPIP. Pour avoir la base toujours ouverte au début de votre script, utilisez
include_ecrire( "inc_connect.php3") ;
En effet ce sript ouvre la base seulement si elle n’est pas déjà ouverte, et l’avantage c’est que vous n’avez pas besoin de gérer vous même les paramètres d’ouverture.

-  Demander à SPIP de faire des accès complets à la base (avec sélection de la base à chaque requête). Pour ca, renseignez la variable
$mysql_rappel_connexion = true ;
dans mes_options.php3 [2].

Exemple d’utilisation :

  1. <?php
  2. include_ecrire( "inc_connect.php3");
  3.  
  4. $ma_requete = mysql_query( "SELECT id, nom, prenom, DATE_FORMAT(naissance, '%d/%m/%Y') as naissance, FROM utilisateur ORDER BY nom,prenom");
  5. if( $ma_requete) {
  6. if( mysql_num_rows($ma_requete) > 0) {
  7. $affichage_php .= "<table cellpadding=\"2\" align=\"center\" border=\"0\" class=\"spip\">\n";
  8. $affichage_php .= "<tr align=\"center\" class=\"row_first\"> <td><b>Nom</b></td> <td><b>Date de naissance</b></td> </tr>\n";
  9. while ($mon_resultat = mysql_fetch_array($ma_requete)) {
  10. $affichage_php .= "<tr class=\"row_" . ($ncr_numero_ligne++ % 2 ? 'odd' : 'even') . "\">";
  11. $affichage_php .= "<td>" . $mon_resultat["nom"] . " " . $mon_resultat["prenom"] . "</a></td> <td align=\"right\">" . $mon_resultat["naissance"] . "</td>";
  12. $affichage_php .= "</tr>\n";
  13. }
  14. $affichage_php .= "</table>\n";
  15. }
  16. }
  17. ?>

Télécharger

Conclusion

Attention, ceci ne fonctionne que dans la partie publique évidemment !

J’utilise actuellement ce script sur mon site, et ca fonctionne plutôt bien ! Et ce qui est génial, c’est que le cache est géré correctement par SPIP.

Notez : la page est regénérée quand elle a expirée, et pas quand le résultat de votre script a changé !

Notes

[1Merci à Paolo pour l’info

[2Je l’indique pour information puisque je ne l’ai pas testé

Dernière modification de cette page le 30 novembre 2012

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 28 mai 2008 à 18:58, par INHA En réponse à : Lancer un script PHP dans un article

    Jusqu’à présent j’utilisais cette méthode.
    Encore récemment avec un psip 1.9.1 cela fonctionnait.
    Je viens de passer à la version 1.9.2.
    j’aimerais savoir en quoi cette façon de faire est osbolète et pourquoi il vaut mieux passer par les modèles.

    Répondre à ce message

  • Le 20 août 2007 à 16:56, par Michel En réponse à : Lancer un script PHP dans un article

    Merci à tous les contributeurs

    En faisant une synthèse de tout ce que j’ai pu lire ici, ça fonctionne parfaitement...., pour du php comme du html

    J’ai choisi de placer mes scripts dans un dossier "inc/" placé dans le même dossier que "spip.php" et qui peut être protégé par un hichier ".htaccess" contenant uniquement "deny from all"
    De ce fait, le seul accès à ce dossier se fait par FTP, donc par le webmaster, et la protection peut être considérée comme suffisante.

    J’ai donc automatisé la recherche des fichiers présents dans ce répertoire qui évite de modifier le fichier mes_fonctions.php à chaque ajout de fichier à inclure

    Voici le résultat le plus abouti de ma réflexion... d’autres améliorations sont certainement encore possibles

    Le code ci-dessous doit bien sûr être placé “mes_fonctions.php

    Remarque importante :
    Tous les liens contenus dans les fichiers inclus devront, pour le chemin, être libellés comme si ce fichier à inclure se trouvait dans “spip.php”
    Et rien n’empèche d’inclure, par la fonction Php include() , d’autres fichiers contenus dans d’autres répertoires, toujours en respectant cette règle

    <?php
    /*************************************************************/
    /**  Cette fonction permet de lancer un script PHP dans un article
    /**
    /**  La syntaxe est la suivante :
    /**    #INCLURE ( nom_fichier )
    /**
    /**  Auteur  : F. Quointeau
    /**  Version : 0.0.2
    /**  Date    : 16 Mai 2004
    /*****************************************************************/

    /*****************************************************************
          Aménagements : Michel MAILLARD - 20 Août 2007

        * recherche automatisée des fichiers dans le dossier de stockage
         * ajout des fonctions ob_....() 
               (pour assurer l'affichage à l'emplacement désiré et non en haut de page)
        * variable $f pour le fichier inclus 
               (pour compatibilité avec certains serveurs)
     
           Ne pas  oublier de placer cette fonction dans les squelettes ad-hoc, 
           en particulier article.html
            [......(#TEXTE|autoriser_php)........]

    /************************************************************/

        
    function autoriser_php$texte) {

        
    // Dossier où sont stockés les scripts 
        //(à partir du fichier spip.php et non à partir du répertoire squelettes)
        
    $dossier_inclus 'inc/';

        
    // Les fichiers inclus autorises sont : 
        // *.php, *.php3, *.php4, *.phtml, *.htm, *.html, *.inc
        
    $fichiers_autorises="(php|php3|php4|phtml|htm|html|inc)";

        
    // Recherche des fichiers inclus autorisés dans le dossier de stockage
        
    $dir=opendir("$dossier_inclus");
        while (
    $fichier=readdir ($dir))
            {
                 if(( 
    preg_match$fichiers_autorises$fichier)))
                       {
                       
    $scripts_autorises[]= $fichier;
                       }
            }
        
    closedir($dir);



        
    // Recherche la chaine #INCLURE(script)
        
    $chaine_recherche "/#INCLURE( *)\(( *)([^\)]*\.".$fichiers_autorises.")( *)\)/i";

        while( 
    preg_match$chaine_recherche$texte$resultats)) {
            
    // Verifie le droit d'inclure ce fichier script !
            
    $autorise false;
            
    reset$scripts_autorises);
            while( 
    $script each$scripts_autorises)) {
                if( 
    strcasecmp$script[value], $resultats[3]) == 0$autorise true;
            }
            if( 
    $autorise == true) {
                
    // Verifie que le fichier existe
                
    $f=$dossier_inclus $resultats[3];
                if( 
    file_exists ($f )) {
                    
    // Vide le buffer de sortie
                    
    $affichage_php '';
                    
    // Et lance le fichier inclu !!!
                    
    ob_start();
                    include (
    $f);
                } else {
                    
    $affichage_php "<b>#INCLURE: Le fichier de script $f n'existe pas !</b>";
                }
            } else {
                
    $affichage_php "<b>#INCLURE: Script NON autoris&eacute; !</b>";
            }
            
    // Attention, n'effectue qu'un seul remplacement à la fois !
            
    $affichage_php ob_get_contents();
            
    ob_end_clean();
            
    $texte preg_replace$chaine_recherche$affichage_php$texte1);
        }

        return( 
    $texte);
    }

    ?>

    • Le 3 juin 2008 à 10:56, par hermine En réponse à : Lancer un script PHP dans un article

      Bravo Michel et merci, ton script fonctionne parfaitement

    • Le 4 juin 2008 à 22:15, par Louis En réponse à : Lancer un script PHP dans un article

      Bonsoir,

      Vous serait-il possible de préciser pour un non expert, les points suivants :
      1)Avec SPIP 1.9.2d ce script reste t-il d’actualité ?
      2)Quel nom de fichier donné à celui qui contient le script ?
      3)Où mettre ce fichier ?

      Je cherche simplement à entrer $a=9 dans un article. Puis à récupérer la valeur de $a dans un squelette.

      Merci pour vos précisions.

    • Le 5 juin 2008 à 01:24, par Michel En réponse à : Lancer un script PHP dans un article

      Bonjour

      Ce script reste parfaitement d’actualité avec la dernière version de SPIP (1.9.2d à ce jour)

      Il est ajouté au contenu du fichier « mes_options.php » (à créer avec ce contenu s’il n’existe pas)

      Ce fichier soit être placé de préférence dans le dossier « squelette » (à crér si nécessaire)

      Il permet d’exécuter un script en php contenu dans un dossier spécifié (voir les remarques dans le script) ce qui provoque directement un affichage lors de la génération de la page web.


      Voir ce lien : L’affichage des photos est déclenché par l’instruction

      #INCLURE(AG_Saint-Malo.php)

      qui fait appel à un module extérieur (simpleviewer) après une lecture dynamique du contenu du répertoire de photos (celles ci ont été mises en ligne par FTP indépendamment de SPIP)

      On pourrait plus simplement afficher sous forme de tableau le contenu d’un répertoire qui aurait été lu (et filtré) en utilisant les fonctionnalités de php


      Pour le reste, (récupération de la valeur d’une variable) je ne garantis rien... car je crains que les variables déclarées dans le script ne restent que locales.

      Il conviendrait donc de lire
      -  la rubrique « pour aller plus loin » dans l’article initial
      -  le contenu de cet article

    • Le 5 juin 2008 à 08:52, par Louis En réponse à : Lancer un script PHP dans un article

      Bonjour,

      Merci pour votre éclairage...
      Je suggère que soit étudiée, puis intégrée, pour une prochaine version de spip, la possibilité de pouvoir entrer directement la valeur d’une variable, dans un article.
      Cela aurait pour effet d’augmenter de manière très intéressante, le champ d’action des rédacteurs.
      Aujourd’hui pour eux, donner une valeur à une variable est impossible et c’est bien dommage. Seul, actuellement, l’administrateur peut insérer des données dans les fichiers, et les mettre en place par FTP.

      Vous avez certainement le pouvoir de communiquer cette proposition et suggestion, auprès des différents responsables du développement de SPIP..

    • Le 6 juin 2008 à 00:17, par Michel En réponse à : Lancer un script PHP dans un article

      Je ne suis qu’un utilisateur lambda.. et je n’ai pas la compétence....

      Mais SPIP est une grande communauté, nul doute que quelqu’un saura le faire

    • Le 24 août 2011 à 16:03, par Henri En réponse à : Lancer un script PHP dans un article

      Perso, je suis un peu perdu avec Spip. Mais bon, comme vous le dites il y a une belle communauté qui permet à nous autres néophytes de se perfectionner toujours un peu plus, merci d’ailleurs ;)

      humour

    Répondre à ce message

  • Le 24 août 2010 à 10:15, par J-L En réponse à : Lancer un script PHP dans un article

    Bonjour,
    Je suis depuis 3 jours en train d’essayer d’intégrer mon formulaire en HTML/PHP dans un article SPIP mais rien y fait malgrès le tuto et vos coms, je suis désespéré.
    Je suis sous SPIP 2.0.9 et avec sarka-SPIP 3.01.
    J’ai essayer la plupart de vos solutions mais aucune ne marche, quand je met le filtre, la partie privée n’est plus accessible.
    Je ne sais plus quoi faire, si quelqu’un à une solution..Je suis tout ouïe..
    Merci

    • Le 24 août 2010 à 10:41, par Cerdic En réponse à : Lancer un script PHP dans un article

      Cette méthode est tout à fait déconseillée, et ce tuto concerne de vieilles versions de SPIP.

      Pour faire un formulaire dans SPIP, il est conseillé d’utiliser CVT : http://www.spip.net/fr_article3800.html
      Ensuite, le formulaire peut être simplement inséré dans un article via <formulaire|xxx>.

      Qui plus est, il peut fonctionner en ajax très simplement, comme expliqué dans la documentation.

    • Le 24 août 2010 à 10:49, par J-L En réponse à : Lancer un script PHP dans un article

      Merci pour ta réponse.
      Le probléme c’est que j’ai déja tout mon code pour les différents formulaires que j’ai, avec dérriére la génération d’un PDF avec les valeurs rentrées et l’enregistrement dans une bdd.
      C’est pour cela que je souhaiterai intégrerle code directement dans l’article.

    Répondre à ce message

  • Le 10 janvier 2010 à 13:58, par Svetlana R. En réponse à : Lancer un script PHP dans un article

    Bonjour,
    Les versions de SPIP concernées par ce plugin vont jusqu’à la 1.8.
    Ayant mis à jour certains de mes sites utilisant SPIP, je suis passé à la version 2, et cette option m’intéresse pour un de mes sites dans la niche du vetement enfant, et un autre dans le domaine mode et vetement. Je souhaiterais que mes lectrices puissent profiter des interactions que ce script permet (notamment en fonction de leur provenance sur le net).
    Est-ce que quelqu’un aurait testé sur la nouvelle version de SPIP ?
    Merci !!

    • Le 10 janvier 2010 à 14:25, par Maïeul En réponse à : Lancer un script PHP dans un article

      a titre personnel, je déconseillerai de faire cela. C’est la voie ouverte à des trous de sécurité.

      Tu peux remplacer cela par des modèles intelligement conçus ou/et des formulaires CVT

    Répondre à ce message

  • Le 10 avril 2009 à 17:36, par Murphy En réponse à : Lancer un script PHP dans un article

    Merci pour l’article, je viens de tester et ça fonctionne bien avec SPIP 2.

    • Le 6 juillet 2009 à 17:07, par Philippe En réponse à : PHP dans un article et modélisation

      Bonjour,

      Merci pour ce tutoriel très complet. Je confirme qu’il marche très bien avec Spip 2. Je n’arrive cependant pas à mes fins.

      Question : comment passer un paramètre issu de l’URL appelant un article à un modèle appelé depuis cet article ?

      -  je sais afficher dans le texte de l’article la valeur d’un paramètre de l’URL mais je ne sais pas la passer au modèle que l’article appelle.

      -  J’affiche le contenu d’une table à l’aide d’un modèle appelé dans le texte d’un article :
      <article|x|tripar=nom>. L’idée serait de pouvoir changer « nom » par « ville » par exemple.

      Mon but est de modifier les critères de tri d’une boucle présente dans le modèle en cliquant sur l’en-tête d’une colonne de la page HTML générée. le code html du modèle est :

      <tr class="row_first" style="text-align: center">
          <th scope='col'><strong class="spip"><a href="chemin Spip /spip.php?article71&tripar=nom&var_mode=calcul" target="_self">NOM</a></strong></th>
      </tr>

      -  J’ai noté que les variables d’environnement passées par l’URL notamment, ne sont pas passées dans le modèle (visible en mode debug). J’avais pensé écrire par inclusion php et de façon dynamique le texte de l’article.
      -  Mon script php inclus aurait donné en retour quelque chose comme :

      <article|71|tripar=nom> si dans la boucle de mon modèle j’avais :

      <BOUCLE_x(table) {par #ENV{tripar}>

      Est-il possible de générer le « texte » <article|71|tripar=nom> de façon à ce que Spip l’interprète au bon moment ?
      Il me semble que le filtre #TEXTE|autoriser_php agit en dernier alors que la page article est déjà constituée.

      Une solution possible réside dans l’utilisation des formulaires CVT. Je peux récupérer la valeur d’un bouton radio et générer une erreur dans la fonction vérifier pour revenir au formulaire contenant les boucles. Je voulais savoir si c’était possible en restant sur des "modèles".

      Merci pour le support.

      Philippe

    Répondre à ce message

  • Le 14 février 2009 à 21:40, par Guillaume Clarys En réponse à : Lancer un script PHP dans un article

    Bonsoir,

    Pour utiliser #INCLURE (mon_script.php) dans un article spip 2, on peut placer le code du filtre dans ecrire/inc/filtre.php à la place de mes_fonctions.php.
    et ne pas oublier d’éditer #TEXTE|autoriser_php dans votre squelette d’article.

    Répondre à ce message

  • Le 1er février 2009 à 22:59, par H2Fooko En réponse à : Lancer un script PHP dans un article

    Bonsoir à tous,

    Le post de tracolin m’a un peu refroidi pour passer en V2, en attendant j’ai résumé les différentes méthodes récupérées ici ou là pour exécuter du PHP dans nos articles. J’y ai même contribué en mettant en oeuvre le passage des paramètres pour 2 d’entre-elles grâce à l’idée de Jim Wanderscheid.

    Par contre je pense que la méthode des modèles évoquée par Cédric Morin devrait fonctionner avec la V2 à défaut de celles utilisant les filtres.

    J’avoue que j’aimerais savoir ;-) Je ne suis qu’en 1.9.2d.

    En pièce jointe ou sur mon site le résultat de mes comparaisons.

    Enjoy

    Répondre à ce message

  • Le 23 décembre 2008 à 23:11, par tracolin En réponse à : Lancer un script PHP dans un avec spip V2

    Bonjour,

    Je viens d’installer Spip V2 et il me semble que la fonctionnalité d’appel de script php ne marche plus...

    Avez vous des informations ? , Le paramétrage reste il le même ?

    Merci de votre réponse.

    Répondre à ce message

  • Le 16 septembre 2007 à 09:52, par Aurore En réponse à : Lancer un script PHP dans un article

    Bonjour,

    J’utilise la version 1.9.2 de SPIP. J’ai suivi à la lettre votre explication. Mais il ne se passe rien, le script php est trouvé mais il ne s’affiche pas.

    Avez-vous déjà testé ce type d’inclusion dans un article sur cette version de SPIP, quelle solutions sont possibles pour faire la même action dans cette version de SPIP ?

    Je précise :
    j’ai bien créé un fichier mes_fontions.php à la racine du site avec successivement le script de GoUaRfIg ! puis de Michel

    J’ai créé un script de test : testscript.php que j’ai mis dans un dossier mes_scripts à la racine du site qui contient juste :
    <?php
    $affichage_php 
    "Hello World !";
    echo 
    "hello the world";
    ?>

    Dans mon article, j’ai mis seulement :
    #INCLURE(mes_scripts/testscript.php)

    Dans le squelette je fais l’appel dans une boucle article vers le numéro exact de l’article :
    « 
    (#TEXTE
     »

    Concrètement, il ne met pas d’erreur, ce qui signifie qu’il trouve le script. Mais il ne l’interprête pas. Pourquoi ? une histoire de cache ? de délai ????

    • Le 18 septembre 2007 à 00:56, par Michel En réponse à : Lancer un script PHP dans un article

      à mon sens, si la déclaration dans mes_fonctions.php est déjà

      $dossier_inclus = ’mes_scripts/’ ;

      il ne faut mettre dans l’article que :

      #INCLURE(testscript.php)


      Attention, si tu as utilisé le script initial de GoUaRfIg, il faut en plus déclarer

      $scripts_autorises = Array(
      ’testscript.php’
      ) ;


      Dans la version modifiée que j’ai proposée :
      • cette dernière déclaration est inutile puisque la routine va lire le contenu du répertoire “mes_scripts” pour renseigner le tableau “$scripts_autorises
      • la variable “$affichage_php” ne doit pas être utilisée (elle n’affiche rien !), on utilise normalement “echo”.

      J’ai notamment utilisé cette fonctionnalité pour lire et mettre en page des tableaux Excel au format .csv sur cette page dont l’unique contenu est “#INCLURE (bretagne.php)”

    • Le 18 septembre 2007 à 18:22, par Aurore En réponse à : Lancer un script PHP dans un article

      Merci Michel,

      C’était effectivement un problème de déclaration de dossier en double.....
      1 fois dans mes_fonctions.php puis ensuite dans l’article.

      ouf,

      Merci beaucoup :)

    • Le 24 septembre 2007 à 19:08, par Philippe Guérindon En réponse à : Lancer un script PHP dans un article

      Bonjour,
      J’ai lu avec intérêt vos récents posts.
      J’utilise le squelette Sarka-Spip version 2.0.1 avec Spip 1.9.2c et je n’arrive pas à inclure du code php dans les articles quelque soit la méthode.
      Une idée.
      Merci.
      Philippe

    • Le 24 septembre 2007 à 19:57, par Michel En réponse à : Lancer un script PHP dans un article

      Difficile de répondre dans l’absolu....

      J’ai moi même galèré avant d’y arriver (et je ne suis pas le seul....)

      Il y a plusieurs sources d’erreurs possibles !!!

      • dans le squelette article.html :

      Bien mettre (#TEXTE dans la boucle des articles

      • dans le fichier mes_fonctions.php :

      Bien indiquer le chemin des fichiers autorisés (à partir de la racine du site dans laquelle se trouve « spip.php » et non à partir du dossier des squelettes)
      (il faut terminer par un /)

      Une copie (même partielle) de ce qui a été fait qui ne fonctionne pas (comme l’a fait Aurore), et l’indication de la variante utilisée pour « mes_fonctions.php » pourrait nous éclairer.... il suffit parfois de pas grand chose.... (comme d’hab. en informatique)

    • Le 25 septembre 2007 à 10:34, par ? En réponse à : Lancer un script PHP dans un article avec Sarka-Spip 2

      Bonjour,
      Mon problème venait du squelette Sarka-Spip 2.
      L’implémentation est un peu différente dans ce cas.

      Les fonctions personnelles doivent être placées dans le fichier "sarkaspip_fonctions.php" et j’ai modifié le chemin de $dossier_inclus pour pointer vers ../spip/inc/ :

      $dossier_inclus = ’/inc/’ ;

      Le fichier article.php du squelette doit être modifié comme suit dans la zone “corps de l’article” :

      (#TEXTE|autoriser_php|typo_couleur|image_reduire#CONFIGtaille_preview)]

      Merci pour l’aide. Il fallait mettre les mains dans le camboui.
      Philippe

    • Le 21 août 2008 à 01:21, par ? En réponse à : Lancer un script PHP dans un article

      Bonjour à tous,

      version de Spip + Sarkaspip : SPIP 1.9.2d [11132] | Sarka-SPIP 2.0.2 [18368]

      Modification du fichier article.html : [(#TEXTE|autoriser_php|typo_couleur|image_reduire{#CONFIG{taille_preview}})]

      Filtre placé dans le fichier sarkaspip_filtres.php et chemin des fichiers autorisés : $dossier_inclus = './inc/';

      /*************************************************************/
      /**  Cette fonction permet de lancer un script PHP dans un article
      /**
      /**  La syntaxe est la suivante :
      /**    #INCLURE ( nom_fichier )
      /**
      /**  Auteur  : F. Quointeau
      /**  Version : 0.0.2
      /**  Date    : 16 Mai 2004
      /*****************************************************************/

      /*****************************************************************
           Aménagements : Michel MAILLARD - 20 Août 2007

         * recherche automatisée des fichiers dans le dossier de stockage
          * ajout des fonctions ob_....()
                (pour assurer l'affichage à l'emplacement désiré et non en haut de page)
         * variable $f pour le fichier inclus
                (pour compatibilité avec certains serveurs)

            Ne pas  oublier de placer cette fonction dans les squelettes ad-hoc,
            en particulier article.html
             [......(#TEXTE|autoriser_php)........]

      /************************************************************/

         function autoriser_php( $texte) {

         // Dossier où sont stockés les scripts
         //(à partir du fichier spip.php et non à partir du répertoire squelettes)
         $dossier_inclus = './inc/';

         // Les fichiers inclus autorises sont :
         // *.php, *.php3, *.php4, *.phtml, *.htm, *.html, *.inc
         $fichiers_autorises="(php|php3|php4|phtml|htm|html|inc)";

         // Recherche des fichiers inclus autorisés dans le dossier de stockage
         $dir=opendir("$dossier_inclus");
         while ($fichier=readdir ($dir))
             {
                  if(( preg_match( $fichiers_autorises, $fichier)))
                        {
                        $scripts_autorises[]= $fichier;
                        }
             }
         closedir($dir);



         // Recherche la chaine #INCLURE(script)
         $chaine_recherche = "/#INCLURE( *)\(( *)([^\)]*\.".$fichiers_autorises.")( *)\)/i";

         while( preg_match( $chaine_recherche, $texte, $resultats)) {
             // Verifie le droit d'inclure ce fichier script !
             $autorise = false;
             reset( $scripts_autorises);
             while( $script = each( $scripts_autorises)) {
                 if( strcasecmp( $script[value], $resultats[3]) == 0) $autorise = true;
             }
             if( $autorise == true) {
                 // Verifie que le fichier existe
                 $f=$dossier_inclus . $resultats[3];
                 if( file_exists ($f )) {
                     // Vide le buffer de sortie
                     $affichage_php = '';
                     // Et lance le fichier inclu !!!
                     ob_start();
                     include ($f);
                 } else {
                     $affichage_php = "<b>#INCLURE: Le fichier de script $f n'existe pas !</b>";
                 }
             } else {
                 $affichage_php = "<b>#INCLURE: Script NON autoris&eacute; !</b>";
             }
             // Attention, n'effectue qu'un seul remplacement à la fois !
             $affichage_php = ob_get_contents();
             ob_end_clean();
             $texte = preg_replace( $chaine_recherche, $affichage_php, $texte, 1);
         }

         return( $texte);
      }

    Répondre à ce message

  • Le 8 avril 2007 à 21:09, par ? En réponse à : Lancer un script PHP dans un article

    Bonjour, et bravo pour cette astuce du tonnerre !

    Toutefois, j’ai suivi les indications à la lettre et je n’obtiens pas le résultat voulu.
    Voyez par vous même :
    http://www.logiktribe.free.fr/spip.php?article9

    Voici les étapes que j’ai suivies :

    1- J’ai publié mon article :
    #INCLURE (mon_script.php)

    2- J’ai édité le fichier “mes_fonctions.php” :
    $dossier_inclus = ’dossier_du_script/’ ;
    $scripts_autorises = Array(
    ’mon_script.php’
    ) ;

    3- “mon_script.php” est le suivant :
    <?php
    include ("http://monsite/../index.php");
    ?>

    4- Et j’ai édité le fichier “article.html” de mon squelette :
    (#TEXTE|autoriser_php)

    Voilà, j’éspère que mes explications sont assez claires.
    Je sent bien que je suis à deux doigts de résoudre ce disfonctionnement, mais je n’y arrive vraiment pas

    Merci d’avance au spip(eur/euse) qui voudra bien me sortir de ce mauvais pas.
    A bientôt.

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Mailsubscribers

    16 janvier 2013 – 274 commentaires

    Ce plugin permet de gérer les inscriptions (ou abonnements) à la diffusion de contenu par email. Mailsubscribers permet de gérer les inscriptions par Opt-in simple ou double et la désinscription par URL. Ce plugin gère également plusieurs listes (...)

  • noiZetier v2

    9 novembre 2012 – 36 commentaires

    Le noiZetier offre une interface d’administration permettant d’insérer au choix des éléments modulaires de squelettes (noisettes) et de les ajouter ainsi à ses squelettes. Compatibilité La version 2 du noizetier fonctionne sous SPIP 3. Elle est (...)

  • cirr : plugin « rédacteur restreint »

    29 octobre 2010 – 60 commentaires

    Ce plugin « cirr : rédacteur restreint » permet d’affecter des rubriques aux rédacteurs et modifie les droits afin qu’un rédacteur restreint (ou un administrateur restreint) voit dans l’espace privé uniquement les rubriques qui lui sont affectées (et leur (...)

  • Un retour d’expérience d’utilisation de Formidable

    26 octobre – commentaires

    Il s’agissait de créer un formulaire d’inscription à un évènement modérer les inscriptions dans le privé publier les inscriptions dans le public Nous avons discuté de cette présentation lors de l’apéro SPIP du 15 février 2016 à la Cantine (...)

  • Métas +

    3 décembre – 14 commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)

Ça spipe par là