SIEPS, script d’import/export d’articles SPIP

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

SIEPS (Script d’Import/Export pour SPIP) est un script PHP permettant de faire de l’import/export d’articles SPIP. Les objets attachés aux articles sont aussi transférés : auteurs, documents, mots-clés, logos, rubriques.

Fonctionnement général

L’objet de base manipulé par SIEPS est l’article SPIP : l’utilisateur sélectionne des articles SPIP, qui sont empaquetés dans un fichier XML stocké au niveau du site d’orgine. Ce paquet peut ensuite être récupéré au niveau du site cible ; l’utilisateur peut l’ouvrir, et choisir le ou les articles qu’il veut importer.

Il faut installer SIEPS sur chacun des sites SPIP visés :

-  les sites depuis lesquels on veut exporter les articles (sites origine ou d’export).
-  les sites vers lesquels on veut importer les articles (sites cibles ou d’import).

Règles d’import

L’import teste l’existence des articles sélectionnés sur le site cible. Lorsque un article existe déjà, celui-ci est soit écrasé avec les nouvelles valeurs, soit créé en tant que nouvel article, suivant un critère fixé au préalable par l’utilisateur.

Lors de l’import d’un article, toutes les rubriques desquelles dépend celui-ci sont aussi importées. Si ces rubriques n’existaient pas, elles sont créées. En aucun cas, l’article ne sera importé dans un rubrique autre que celle dans laquelle il se trouvait au départ (l’article est « fortement » lié aux rubriques dans lesquelles il se trouve).

Fonctionnement interne

Le numéro de chaque objet est recalculé lors de l’opération d’import. C’est à dire, le numéro d’un article sur le site cible (ou tout autre objet attaché à l’article) peut être différent de son numéro sur le site d’origine. Le site cible peut donc avoir une structure différente du site origine.

SIEPS gère les correspondances entre les numéros ; lorsque l’objet existe déjà sur le site cible, le nouveau numéro est calculé et remis à jour. Pour tester la présence des différents objets sur le site cible, une règle particulière est appliquée suivant le type de l’objet.

Type d’objetTest de présence
article titre de l’article et présence des rubriques mères
rubrique titre de la rubrique et rubrique mère
mot titre
groupe mots titre
auteur nom
document document de même nom, de taille identique, et attaché au même article

Le format d’échange utilisé pour transférer les articles est un XML basique. Les objets binaires (images, documents) sont codés en base 64 directement dans le XML.

Impression d’écrans

L’export des articles :

L’import des articles :

Page d’accueil de SIEPS / Téléchargement
Cliquer Ici.

Discussion

19 discussions

  • Bonjour,

    Connaissez vous une mise à jour de cet excellent script pour la 1.9.2 ?

    Cordialement

    Répondre à ce message

  • 1

    Bonjour,
    j’ai installé sieps et voici le message d’erreur quand je pointe sur mon-url/sieps/

    Fatal error : Cannot redeclare get_extraabo() (previously declared in /web/www/html/html1/ecrire/options_spip_listes.php3:14) in /web/www/html/html1/ecrire/options_spip_listes.php3 on line 14

    comment faire pour éviter ce conflit avec un autre script ?

    autre question : en 1.9.1 est-ce que sieps fonctionne ?

    • voila pour 1.9.1 ; merdum moi qui profiter de la 1.9 pour vouloir fusionner les differnets sites de l’asso

      Warning : include(ecrire/inc_version.php3) [function.include] : failed to open stream : No such file or directory in /var/www/sieps/scripts/spip.php on line 29

      Warning : include() [function.include] : Failed opening ’ecrire/inc_version.php3’ for inclusion (include_path=’. :/usr/share/php :/usr/share/pear’) in /var/www/sieps/scripts/spip.php on line 29

      Warning : include(ecrire/inc_lang.php3) [function.include] : failed to open stream : No such file or directory in /var/www/sieps/scripts/spip.php on line 30

      Warning : include() [function.include] : Failed opening ’ecrire/inc_lang.php3’ for inclusion (include_path=’. :/usr/share/php :/usr/share/pear’) in /var/www/sieps/scripts/spip.php on line 30

      Warning : include(ecrire/inc_filtres.php3) [function.include] : failed to open stream : No such file or directory in /var/www/sieps/scripts/spip.php on line 31

      Warning : include() [function.include] : Failed opening ’ecrire/inc_filtres.php3’ for inclusion (include_path=’. :/usr/share/php :/usr/share/pear’) in /var/www/sieps/scripts/spip.php on line 31

      Warning : include(ecrire/inc_charsets.php3) [function.include] : failed to open stream : No such file or directory in /var/www/sieps/scripts/spip.php on line 32

      Warning : include() [function.include] : Failed opening ’ecrire/inc_charsets.php3’ for inclusion (include_path=’. :/usr/share/php :/usr/share/pear’) in /var/www/sieps/scripts/spip.php on line 32

    Répondre à ce message

  • Ayant rencontré des difficultés (« Erreur : fichier non valide : controle negatif (lisez la remarque sur le champ ’secret’ dans la documentation) ») avec la version 07 de Sieps et la v 1.8.3 de Spip (comme d’autres), je me suis rabattu sur la v 06.

    Tout semble marcher, mais il faut sur la 1.8.3, inverser l’ordre des « include » (voir réponse de Florent ci-dessous).
    NB. Le code modifié fonctionne alors aussi sur la 1.8.2 apparemment.

    Trois remarques, à l’usage :
    1. N’oubliez pas, si votre site cible est vierge, de créer un premier article.

    2. Attention si vous décrivez plusieurs sites (d’export par ex) dans le script sites.php, car selon l’ordre d’inscription dans ce fichier, le site sur lequel Sieps écrit le fichier est différent.

    3. Si vous rencontrez un message d’erreur au moment de l’export (probablement lié à une surcharge du serveur), cliquez sur la flèche orange permettant de revenir en arrière et recommencez. Il y a de bonnes chances pour que cela marche à la 2e tentative. Sinon essayez à un moment où le serveur est moins chargé.

    Souhaitant que ces infos aident,
    Bonne chance,

    laurent

    Répondre à ce message

  • 6

    Fantastique, tout juste ce qu’il me faudrait, mais ...
    Je viens d’installer sieps sur mon site spip 1.8.3, j’arrive à choisir les articles, mais le bouton Exporter me donne l’erreur : Fatal error : Call to a member function on a non-object in /.../sieps/scripts/impexp.php on line 806. Malheureusement je ne comprends par trop de php et je n’ai rien trouvé sur google qui pourrait m’aider.

    Pascal

    • quelle version de SIEPS utilisez-vous ?
      et quelle version de PHP ?

      merci

    • J’ai eu le même problème avec la dernière version officielle comme avec la version CVS.
      Mon système : FreeBSD 5.4, PHP 4.4.0, Joomla 1.0.8.

      Pascal

    • Bonjour,
      j’ai essayé de commenter la ligne en question :
      « $g_deb->log(0, __FILE__. » « .__LINE__) ; »
      puis j’ai dû commenter tous les lignes « $g_deb->log... » pour finalement arriver à un problème de permissions : « Erreur : probleme lors de l’export : ouverture ./sieps/scripts//exportsieps.06.04.14.21.17.15 en ecriture impossible. »
      Le problème est maintenant que ça m’arrive même avec les permissions 777 pour tout le folder sieps !
      Vous avez une idée ? Merci pour votre aide.

      Pascal

    • Bonjour,

      Apparemment le problème vient de la non compatibilité de la v07 (actuelle) de Sieps avec la v1.8.3 de Spip.

      Avec la v1.8.2d je n’ai pas ce message
      « Fatal error : Call to a member function on a non-object monsite/sieps/scripts/impexp.php on line 806 »

      et j’ai pu exporter les articles.
      (à toutes fins utiles, je suis sur Free)

    • je viens de vérifier sur la version précédente (Sieps 06, utilisée avec la 1.8.3.), mais un message très proche :
      « Fatal error : Call to a member function on a non-object in monsite/sieps/scripts/export.php on line 203 »

      apparait, donc je suis coincé, pour les sites déjà passés en 1.8.3

      NB. il ne s’agit simplement pas du même fichier, mais c’est bien le même pb :
      la ligne 203 : $g_deb->log(0, « exportart= ».$exportart) ;

      souhaitant que cela aide, j’avoue que je ne me sens pas trop compétent sur ce coup là,

      Laurent

    • bonjour,

      effectivement, sieps ne fonctionnait pas correctement avec spip 1.8.3 : il faut inverser les includes sur spip.php et commun.php dans les fichiers : index.php, import.php et export.php

      include(SCRIPT_PATH."/commun.php");
      include(SCRIPT_PATH."/spip.php");

      devient

      include(SCRIPT_PATH."/spip.php");
      include(SCRIPT_PATH."/commun.php");

      j’ai fait la modif sur la version CVS, donc elle sera prise en compte dans les versions futures de sieps.

    Répondre à ce message

  • 2

    Bonjour
    Je viens d’installer sieps en local. Easyphp 1.7 spip 1.8.2e
    En le lancant j’ai un message comme le suivant pour chaque appel de fonction.

    Warning : Call-time pass-by-reference has been deprecated - argument passed by value ; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in f :\program files\easyphp\www\spip\sieps\import.php on line 135

    J’ai mis call-time-pass-by-reference sur on mais ca ne change rien.

    Mais le script est sensé de continuer.
    En important le fichier dump.xml d’une autre base le script s’arrette - - ’fichier non compatible’

    cpmac

    • bonjour,

      pour le pb. du call-by-reference, c’est certainement lié au fait que vous utilisez PHP5.. je n’ai pas testé sous PHP5 et les passages de valeurs par références émettent un warning dans cette version.

      pour l’autre problème, je viens de faire le test en installant directement le tout depuis la version téléchargeable et ça fonctionne. C’est peut être lié au fait que vous avez initialisé le champs « $secret » avec une valeur différente entre le site d’import et le site d’export : cette variable doit avoir *exactement* la même valeur sur les deux sites ; elle sert à vérifier que les fichiers qui sont importés ont bien été générés par vous.

    • la version du CVS devrait corriger le problème du call-by-reference

    Répondre à ce message

  • Je viens d’installer Sieps pour deux sites SPIP 1.8.2 chez Free. J’ai modifié le fichier sieps/scripts/commun comme indiqué :
    -  J’ai changé la valeur du champ $secret(idem sur les deux sites),
    -  /*set_time_limit(10000) ;*/.

    L’exportation fonctionne, mais au moment de l’importation j’obtiens toujours le message suivant : « Erreur : fichier non valide : controle negatif (lisez la remarque sur le champ ’secret’ dans la documentation) »

    Répondre à ce message

  • Bonjour,

    Je viens de mettre en ligne une nouvelle version de SIEPS (0-7). Cette version simplifie radicalement l’installation du script car les fichiers d’import/export ne sont plus échangés directement de site à site, mais doivent être downloadés/uploadés en utilisant le navigateur de l’utilisateur.

    Il n’y a donc plus tous les problèmes d’installation qui rendaient l’installation compliquée chez les hébergeurs tournant en safe-mode.

    Par contre, il faut toujours commenter la ligne set_time_limit dans commun.php chez les hébergeurs qui désactivent cette fonction.

    Répondre à ce message

  • Tout bonnement sublime.

    J’ai quand même du bidouiller deux petits trucs vu ci-avant dans le forum. En fait je n’avais aucune restriction citées dans la doc d’installation de sieps et pourtant il a fallu que :

    -  mettre la ligne set_time_limit(10000) ; en commentaire : /* set_time_limit(10000) ; */ dans le fichier /sieps/scripts/commun.php
    -  corriger les fichiers scripts/impexp.php et scripts/import.php pour renommer la fonction lire_fichier en lire_fichier_sieps ainsi que tout ses appels (trois lignes à corriger au total sur ces deux fichiers).

    J’ai un site sous Free et un autre sur Apinc.

    Répondre à ce message

  • Jerome De Greef

    Incroyable outil :)

    Je voudrais juste ajouter que la fonction lire_fichier doit être renommée (la vesion CVS utilise lire_fichier_sieps) ainsi que tout ses appels dans scripts/impexp.php et scripts/import.php. C’est peut-être évident pour certains mais n’est pas tout à fait clair dans la doc.
    Le message d’erreur « fichier d’import invalide » est affiché si cette modification n’a pas été faite.

    Répondre à ce message

  • Hello

    Cet outil peut il permettre d’exporter des articles d’une version SPIP à une autre (de la 1.6 à la 1.8 directement, par exemple) ?

    Merci pour l’inculte en PHP que je suis...

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom