Sujet fermé
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

Upload thème XML avec CMS Made Simple
#1

Bonjour à tous !

Ayant bien galéré depuis pas mal de temps sur l'upload de thème depuis Theme Manager, j'ai enfin trouvé d'où provenait mon problème.

Et ce que je ne comprends pas, c'est pourquoi ce système n'est pas déjà en place ? N'hésitez pas à me dire si "cette astuce" à déjà été donné, car j'ai beau avoir fouillé, mais rien ...

En fait, il existe un bug (enfin je l'appelle ainsi, car il n'en parle nulle part), qui fait que lorsqu'on essaye d'uploader un fichier XML (thème), suivant la configuration serveur, ce fichier se retrouve "indisponible".

Par exemple, sur la configuration de mon serveur, les fichiers envoyés par formulaire ne sont pas disponible tel quel, il faut les déplacer dans le bon dossier pour qu'Apache puisse y avoir accès et le lire (principe de sécurité de base)

Donc, pour résumer, si comme moi, vous galéré pour installer un simple thème, modifier le fichier "action.importtheme.php" disponible depuis cet emplacement "modules/ThemeManager/"

A la ligne 104 vous avez actuellement ceci :

Code :
[== PHP ==]
// $file['tmp_name'] is the file we have to parse
$xml = file_get_contents( $file['tmp_name'] );

Il faut le remplacer par ceci :

Code :
[== PHP ==]
// Define new name and move it to a good folder
$new_upload_file = $_SERVER['DOCUMENT_ROOT'].'/tmp/theme.xml';
if(!move_uploaded_file($file['tmp_name'], $new_upload_file))
    {
    $this->DisplayErrorPage( $id, $params, $returnid,
       $this->Lang('error_nofilesuploaded'));
    return;
    }

// $file['tmp_name'] is the file we have to parse
$xml = file_get_contents($new_upload_file);

(Attention, la configuration du 'DOCUMENT_ROOT' varie suivant les serveurs, peut être que le slash / après la concaténation n'est pas nécessaire Wink )

Et là, bingo, ça marche niquel, plus de foutu problème de DTD non valable (en fait le problème vient du fait que le fichier XML parsé est vide !)

N'hésitez surtout pas à m'indiquer si ce problème avait déjà été résolu, j'en serais heureux !

Lien de l'article original que j'ai écrit : http://www.grid-france.fr/forum/suivi361...tml#p36103
#2

je t'avoue que c'est bien la première fois que j'entends parler d'un tel problème.... et du besoin de modifier de la sorte le programme pour que ça fonctionne ...

je ne peux pas tester (pas le temps) mais je te fais confiance.

peux tu nous donner le N° de version de cmsms + nom/version de tes modules ?
#3

Bonjour Bess,

C'est la dernière version de cmsms 1.10.3, avec la version 1.1.4 de theme manager

[Image: 2_27-03-2012_10-15-35.jpg]

J'ai peut être ce problème à cause de la configuration de mon serveur, puisque j'ai ces messages :

[Image: 2_27-03-2012_10-19-11.jpg]

Mais je ne changerais pas ces paramètres qui sont tel quel pour des raisons de sécurité.


Je vais expliquer le problème un peu plus clairement, car j'ai déjà vu ce problème sur ce forum (ainsi que sur d'autres) et aucune solutions n'ont été apportés (pour le chargement de thème via XML).

Je veux utilise un thème XML disponible sur le site de thème de cmsms.

Lorsque j'utilise la fonction "Importer" de theme manager, il me retourne comme erreur à chaque fois :

Citation :DTD pas bon (ce n'est pas le message exacte, mais ça s'en rapproche)

J'ai donc commencé à regarder comment fonctionne le module theme manager, et j'ai commencé à débugger le script.

J'ai essayé d'afficher le contenu du XML (en faisant un var_dump($xml); où le $xml = file_gets_content) et ça ne me retournait rien du tout.

J'ai donc regardé un poil plus haut, et affiché le fichier fraîchement uploadé, il m'indiquait le répertoire temporaire de la distribution du serveur, sur lequel, bien entendu, Apache n'a pas accès.

J'ai donc compris que le fichier n'était juste pas accessible avec ma configuration, et qu'il fallait que je déplace le fichier télécharger vers un endroit accessible par Apache (plus globalement cmsms).

A partir de là, l'upload de thème est devenu fonctionnel.

Je trouve quand même bizarre pour cmsms, que les fichiers uploadés ne soit pas directement mis dans le dossier /tmp disponible au root de l'install cmsms.

A moins que le dossier /tmp ne soit pas correctement définis suivant la configuration du serveur ? Je vais essayer de me pencher un peu plus loin là dessus.

-----------

Alors, pour rendre plus propre ce bout de scripts :

Modifier le fichier ./fileloc.php

Après ceci
Code :
[== PHP ==]
define("TMP_TEMPLATES_C_LOCATION", dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'templates_c');

Ajouter
Code :
[== PHP ==]
define("TMP_FOLDER_LOCATION", dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tmp');

Résultat attendu
Code :
[== PHP ==]
define("TMP_TEMPLATES_C_LOCATION", dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'templates_c');
define("TMP_FOLDER_LOCATION", dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tmp');


Enregistrer et fermer le fichier

Modifier le fichier ./modules/ThemeManager/action.importtheme.php

A la ligne 104 vous avez actuellement ceci :
Code :
[== PHP ==]
// $file['tmp_name'] is the file we have to parse
$xml = file_get_contents( $file['tmp_name'] );

Remplacer par :
Code :
[== PHP ==]
// Define new name and move it to a good folder
$new_upload_file = TMP_FOLDER_LOCATION.'theme.xml';
if(!cms_move_uploaded_file($file['tmp_name'], $new_upload_file))
    {
    $this->DisplayErrorPage( $id, $params, $returnid,
       $this->Lang('error_nofilesuploaded'));
    return;
    }

// $file['tmp_name'] is the file we have to parse
$xml = file_get_contents($new_upload_file);

Attention, je n'ai pas testé ce bout de code (je n'ai pas accès à mon serveur en journée (boulot oblige))
#4

Re,

Je viens d'essayer d'installer un module, et j'ai le même soucis.

Problème source trouvé, et ça vient de la configuration de mon serveur actuel.

Le répertoire d'upload était mis en dehors des accès du site avec l'open_basedir.

J'ai changé le répertoire d'upload, et ça roule !
Sujet fermé


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)