SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Interactivité, communication > Archives Interactivité, communication

Lancer un script PHP dans un article

vendredi 23 avril 2004, par GoUaRfIg !. Dernier ajout dimanche 9 décembre 2007


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

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.  
  2. <?php
  3.     echo( "Hello World !");
  4. ?>
  5.  

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

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

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.  
  2. <?php
  3.   // Ma variable
  4.   $id_machin = $GLOBALS['id_machin'];
  5.  
  6.   $affichage_php = "Hello machin n°$id_machin";
  7. ?>
  8.  

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

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

[1] Merci à Paolo pour l’info

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


Répondre à cet article

  • Lancer un script PHP dans un article

    16 septembre 2007 09:52, par Aurore

    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|autoriser_php)]  »

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

    Répondre à ce message

    • Lancer un script PHP dans un article 18 septembre 2007 00:56, par Michel

      à 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)”

      Répondre à ce message

      • Lancer un script PHP dans un article 18 septembre 2007 18:22, par Aurore

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

        Répondre à ce message

      • Lancer un script PHP dans un article 24 septembre 2007 19:08, par Philippe Guérindon

        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

        Répondre à ce message

        • Lancer un script PHP dans un article 24 septembre 2007 19:57, par Michel

          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|autoriser_php)] 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)

          Répondre à ce message

          • 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

            Répondre à ce message

          • 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

    Retour au début des forums

  • Lancer un script PHP dans un article

    13 juillet 2007 11:10, par rzawutang44

    Salut,

    Deux précisions, prenez bien soin de NE PAS :

    1. Changer le nom de la variable d’affichage ($affichage_php) puisque c’est précisément le nom utilisé dans le filtre autoriser_php (mes_fonctions.php).

    2. Faire de echo dans vos scripts autorisés (mais c’est déjà dit dans le tutoriel)

    Répondre à ce message

    Retour au début des forums

  • Lancer un script PHP dans un article

    20 août 2007 16:56, par Michel

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

    ?>

    Répondre à ce message

    • Lancer un script PHP dans un article 3 juin 2008 10:56, par hermine

      Bravo Michel et merci, ton script fonctionne parfaitement

      Répondre à ce message

    • Lancer un script PHP dans un article 4 juin 2008 22:15, par Louis

      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.

      Répondre à ce message

      • Lancer un script PHP dans un article 5 juin 2008 01:24, par Michel

        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

        Répondre à ce message

        • Lancer un script PHP dans un article 5 juin 2008 08:52, par Louis

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

          Répondre à ce message

    Retour au début des forums

  • Lancer un script PHP dans un article

    28 mai 2008 18:58, par INHA

    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

    Retour au début des forums

  • Bonjour, Ce serait génial de pouvoir faire ce qui est indiqué dans l’article mais pour moi cela ne fonctionne pas même pour l’exemple donné. le texte statique s’affiche mais pas la variable d’environnement. mon script :

    $GLOBALS[’spip_lang’] ;

    #

    $id_machin = $GLOBALS[’id_machin’] ;

    #

    le positionnement du filtre :

    — perso : Utilisation zone PS pour appliquer filtre au texte —> #DEBUT_SURLIGNE[

    (#CHAPO)
    ][
    (#TEXTE|autoriser_php|reduire_image[(#PS)])
    ](#PS)]—>[
    (#NOTES)
    ]#FIN_SURLIGNE

    le résultat :

    Hello machin n°

    Ps : désolé je suis un peu obsolète en version spip 1.8.2 d

    Répondre à ce message

    Retour au début des forums

  • inclure des php ca marche, mais pour les HTML, y a t il une manoeuvre spéciale ?

    quand j’inclus mon fichier HTML, a l’affichage son contenu se trouve avant celui de la boucle

    par exemple dans mon article je mets :

    avant

    #INCLURE(test.html)

    apres

    et a l’affichage j’obtient

    contenu de test.html

    avant

    apres

    Répondre à ce message

    • > Lancer un script PHP dans un article 27 mai 2005 19:15, par Philippe G.

      J’ai le même problème : le texte inséré se place AU-DESSUS du cadre de la page ! (La variable $texte ne contient qu’un #INCLURE...)

      Répondre à ce message

    • > Lancer un script PHP dans un article 31 mai 2005 20:32, par GoUaRfIg !

      C’est normal !!!

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

      C’est pourquoi vous pouvez utiliser la fonction

      ob_start();

      avant d’envoyer le fichier HTML et

      $affichage_php = ob_get_contents();

      pour récupérer le fichier HTML et le passer à SPIP

      Répondre à ce message

      • fonctionnement de ob_start 8 décembre 2005 21:48, par DoriaN

        cette réponse du forum mériterait d’être intégré dans l’article, car ça peut permettre d’inclure des pages html à la volée lorsqu’on rédige un article, puissant. voir même des boucles spip ?

        une piste pour tester ?

        Répondre à ce message

      • > Lancer un script PHP dans un article 16 janvier 2006 20:23, par Florence

        Je ne comprend pas cette réponse, où dois-je mettre les fonctions ob_start() et $affichage_php = ob_get_contents() ? Dans le squelette ?

        Florence

        Répondre à ce message

        • > Lancer un script PHP dans un article 10 février 2007 00:44, par yaumgui

          Bonsoir,

          j’ai positionné les appels des fonctions ob_start() ; et ob_get_contents() ; comme suit dans le fichier mes_fonctions.php :

          function autoriser_php( $texte) {

              ...

                 if( $autorise == true) {
                       // Verifie que le fichier existe
                       if( file_exists ( $dossier_inclus . $resultats[3])) {
                              // Vide le buffer de sortie
                              $affichage_php = '';
                              // Et lance le fichier inclu !!!i

          ob_start();

                              include( $dossier_inclus . $resultats[3]);
                       } else {
                              $affichage_php = "<b>#INCLURE: Le fichier de script 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);

          Et cela semble fonctionner ...

          G.

          Répondre à ce message

          • > Lancer un script PHP dans un article 22 février 2008 00:39, par Infoctet

            Bonjour,

            J’ai aussi le problème d’affichage du HTML. Il s’affiche au début hors cadre. J’ai essayé d’utiliser les fonctions ob_start() ; et ob_get_contents() dans mes_fonctions.php comme c’est indiqué ci-dessus, mais là, je n’ai plus rien qui s’affiche. J’ai juste la ligne #INCLURE(mon_fichier.html). J’utilise SPIP version 1.9.2c avec la squelette Alternatives Quelqu’un a une idée. Merci d’avance

            Répondre à ce message

    Retour au début des forums

  • OBSOLETE

    9 décembre 2007 11:11, par Cédric

    Cet article est obsolète ou à reserver dans le cadre d’un usage sur les version 1.8.x ou inférieures.

    En version de SPIP 1.9.x et suivantes, on utilisera bien evidemment la méthode érpouvée et supportée des modeles qui permettent d’inclure le résultat d’un squelette dans un article :
    le contenu d’un squelette modeles/annuaire.html peut être affiché dans l’article avec un simple tag <annuaireXX> ou <annuaire|id_machin=truc>

    Le tag doit comporter un numero d’identifiant (celui de l’article en cours par exemple) ou un | afin de ne pas être confondu avec une balise html.

    Libre à vous de mettre ce que vous voulez dans ce squelette, y compris du php.

    Répondre à ce message

    • OBSOLETE - basculé en archives 9 décembre 2007 15:13, par NicolasR

      Merci de la précision, l’article à donc été basculé en archives et taggé de même.

      @+ NicolasR

      Répondre à ce message

    • OBSOLETE 29 janvier 2008 08:32, par cb

      Bonjour,

      Judicieux, mais lorsque je passe par cette méthode <nomdufichierscriptphpXXX> où XXX est le numéro de l’article et "nomdufichierscriptphp" le modèle, j’ai l’erreur suivante :

      Fatal error : Cannot redeclare adv_showlinks() (previously declared in /var/www/vhosts/nomsite.com/httpdocs/ecrire/public/assembler.php(398) : eval()’d code:52) in /var/www/vhosts/nomsite.com/httpdocs/ecrire/public/assembler.php(398) : eval()’d code on line 52

      Une idée ?

      Répondre à ce message

    • variables dynamiques 20 février 2008 15:33, par jean-eric

      J’essaye de savoir comment faire la chose suivante : ayant un article qui décrit un phénomène physique, je voudrais que le lecture puisse entrer une ou plusieurs variables numériques afin que l’article calcule des valeurs qui mettront à jour celles par défaut de l’article.

      Est-ce possible ? Est-ce réalisable (et comment) ?

      comme dit la pub...

      Répondre à ce message

    Retour au début des forums

  • 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

    Retour au début des forums

  • > Lancer un script PHP dans un article

    28 mai 2004 11:44, par Sam

    Bonjour à tous,

    Je parviens bien à inclure du php dans un article (par exemple mon_premier_script.php3 marche sans problème).

    Par contre, j’ai plus de soucis si j’utilise une base de données MySQL autre que celle de SPIP : j’ai créé une base "Annuaire" contenant une table "Personnel" dans laquelle j’effectue des recherches : Voici le début du script (la fin étant l’affichage du résultat grace a $affichage_php) :

    <?php
      include_ecrire
    "inc_connect.php3" );
      
                                                                                                                                                                                                                                                                                                                       
    define