Bug pour générer un fichier Sitemap

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • jfque
    a répondu
    Pour information, la version Pro de JSitemap permet de créer des sitemaps à partir de requêtes MySQL que l'utilisateur peut construire "sur mesure". Je n'ai jamais utilisé mais ça a l'air très puissant.

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    À toutes fins utiles, et suivant le desiderata de manu93fr, voici le script complet qui dysfonctionne :

    Code PHP:
    {source}
    <?php
    $conn 
    mysqli_connect('... mes données personnelles de connexion à la BDD...');
    $req "SELECT nom, prenom, profession, specialite, code_profession, b5, mode_exercice, cp_ville, a3 FROM table WHERE ((cp_ville > ' ') AND (a3 = 'C') AND !((code_profession = '60') AND (b5 = 'S')) OR (code_profession = '86') OR (code_profession = '50') OR (code_profession = '21') OR (code_profession = '28') OR (code_profession = '98'))";
    $resultat $conn->query("SET NAMES utf8");
    $resultat $conn->query($req) or die('Erreur SQL !'$req .'' $conn->connect_error());
    $num 0;
    $nb 1;
    $nbt 1;
    define ("SITE""... url de mon site ...");
    $traitement true;
    if ( 
    file_exists('sitemaps/sitemap-1.xml') ) {
          if( @
    unlink('sitemaps/sitemap-*') !== true ) {
                
    $traitement false;
          }        
    }
    if (
    $traitement) {
    // préparation du fichier "sitemap-index.xml"
    $xml1 fopen('sitemaps/sitemap-index.xml',"w");
    $lachaine "<?xml version='1.0' encoding='UTF-8'?>\n" .
                
    "<sitemapindex xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n" .
                
    "<sitemap>\n" .
                
    "<loc>" SITE "/sitemaps/sitemap.xml</loc>\n" .
                
    "</sitemap>\n";
    fwrite($xml1$lachaine);
    while(
    $arr mysqli_fetch_array($resultat)) {
    if (
    $nb == 1) {
    // on crée un nouveau fichier sitemap-x.xml
    $num $num 1;
    $fich 'sitemaps/sitemap-' .$num'.xml';
    echo 
    "<br />création du fichier $fich ";
    $xml2 fopen($fich'w');
    $lachaine "<?xml version='1.0' encoding='UTF-8'?>\n" .
                
    "<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'\n" .
                
    "        xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n" .
                
    "        xsi:schemaLocation='http://www.sitemaps.org/schemas/sitemap/0.9'\n" .
                
    "        'http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd'>\n";
    fwrite ($xml2$lachaine);
    // on complète le fichier sitemap index
    $lachaine "<sitemap>\n<loc>" SITE "/sitemaps/sitemap-" .$num".xml</loc>\n</sitemap>\n";
    fwrite($xml1$lachaine);
    }
    // on complète le fichier sitemap-x.xml
    if ($arr[3] == '') {
    $spec trim($arr[2]);
    }else{
    $spec trim($arr[3]);
    }
    // on supprime le code postal devant le nom de ville pour ne conserver que le seul nom de ville
    $ville trim(substr($arr[7],7));
    $ville2 strtoupper($ville);
    $pos strpos($ville2"CEDEX");
    if (
    $pos === false) {
    // cette ville n'est pas suivie du Cedex
    $vil $ville;
    }else{
    // on va supprimer 'CEDEX ...' après le nom de ville
    $ll strlen($ville) - $pos;
    $vil substr($ville, -$ll);  
    }
    $prat trim($arr[1]). '-' .trim($arr[0]);
    $lachaine "<url>\n<loc>" SITE "/" .$spec"/" .$vil"/" .$prat"</loc>\n</url>\n";
    fwrite($xml2$lachaine);
    $nb $nb 1;
    $nbt $nbt 1;

    if (
    $nb 10) {
    // pour les tests (mettre 1000 ensuite dans le if au lieu de 10)
    $lachaine "</urlset>\n";
    fwrite($xml2$lachaine);  
    fclose($xml2);
    $nb 1;  
    }
    // on se contente des 25 premières lignes de la table pour les tests (if à enlever ensuite)
    if ($nbt 25) break;
    }
    // fin du traitement
    $lachaine "</urlset>\n";
    fwrite($xml2$lachaine);  
    fclose($xml2);
    $lachaine "</sitemapindex>\n";
    fwrite($xml1$lachaine);
    fclose($xml1);
    }else{
    echo 
    "<br />Les fichiers de travail 'sitemaps/sitemap-*.xml' ne peuvent pas être effacés (traitement impossible) !";
    }
    mysqli_close($conn);
    ?>
    <br /><br /><p>FIN du TRAITEMENT</p>
    <p class="droite"><a href="">Retour à la page d'accueil</a></p>
    {/source}
    ps: j'ai bien vérifié que le dossier "sitemaps" à la racine de mon site est bien "modifiable"
    Dernière édition par Visiteur à 22/12/2019, 07h24

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par manu93fr Voir le message
    Bonsoir,
    qui dit php ... suppose écrire un script avec les bonnes instructions suivant la version de php du serveur

    Questions :
    - quelle est la version exacte de php sur ton serveur ?
    - tu as écris toi même ce script ou tu l'as "récuperée" quelque part ?
    - si tu es sur un site Joomla, pourquoi utiliser un tel script ? tu as des extensions pour cela ... sauf si tu as une raison précise que je ne connais pas
    - peut on avoir l'intégralité du code ? (pour trouver une éventuelle erreur)

    si personne ne peut t'aider ...... il faudrait peut être t'orienter sur un forum dédié a PHP
    Bonjour Manu, et merci,

    J'apprécie ton aide, même si pour la forme j'apprécierais moins d'agressivité et ne pas être toujours pris pour une 'bille' sur un ton professoral. Il n'est nullement interdit de rester courtois, amical, même dans le dévouement gratuit.
    Sans vouloir me vanter, j'ai de longues années d'expérience derrière moi et en informatique. Mais je ne sais pas tout, et je sais apprécier l'entraide que l'on a plaisir à vivre dans l'univers de l'open source (adepte de Linux & évidemment de Joomla). Et j'aime apprendre, chaque jour.
    Voici mes réponses à tes questions précises :

    1. sur serveur d'O2switch, je bénéficie de la version 7.2.25 de Php. Et le paramètre "XML activé (lire et écrire des fichiers xml)" est bien à 'oui',
    2. j'ai écrit moi-même ce script, en me basant sur un modèle de génération simple de sitemap après avoir pris le temps de vérifier le bon fonctionnement de ce dernier,
    3. pourquoi utiliser ce script et non pas une extension disponible sur joomla.org ? Je ne méconnais pas l'existence de telles extensions (cf. osmap) pour générer un sitemap simple. Mais ici, j'ai besoin de générer un fichier "sitemap index" qui va contenir un nombre important de fichiers "sitemap-xx.xml" contenant chacun 1000 urls que je dois construire à partir d'une table de ma BDD. S'il existe une extension disponible pour réaliser ceci, je suis preneur. Mais je n'en connais pas !
    4. bien évidemment, je peux fournir l'intégralité de mon script. Si je ne l'ai pas fait, c'est volontairement : devant l'erreur rencontrée, j'ai commencé par longtemps en rechercher les motifs. Ne trouvant pas, j'ai documenté chaque ligne de mon script puis j'ai relâché progressivement une à une chaque ligne pour détecter précisément l'instruction qui déclenchait mon erreur. Et j'ai trouvé que c'était l'instruction que je me contente de soumettre ici dans mon propre sujet de forum. Je pensais avoir adopté une démarche responsable, et non primaire. Étant bien conscient que ce forum Joomla -même s'il possède un sous-forum spécialisé "développements"- n'est pas un forum de programmation.
    5. pour ton dernier conseil, c'est très exactement la démarche que j'ai adoptée pour ma recherche de solution : avant de venir poster ici sur le forum Joomla, j'ai posté sur des sites spécialisés en programmation php & sql (ex: commentcamarche.net) ... mais sans résultats notables. De guerre lasse, je suis alors venu ici.

    Pourquoi écrire "... si personne ne peut t'aider ..." alors que j'ai déjà apprécié et remercié par exemple ici les aides qualifiées de dolmenhir & lomart, et ô combien de daneel ? Je ne me plains pas, bien au contraire, et je continue à rechercher la solution finale ne serait-ce que par satisfaction intellectuelle et personnelle.

    ps: sincèrement, j'apprécie ces aides -la tienne comprise- d'autant plus que l'on est en plein weekend de fêtes peu propices aux prises de têtes informatiques. En toute amitié.
    Dernière édition par Visiteur à 22/12/2019, 06h55

    Laisser un commentaire:


  • manu93fr
    a répondu
    Bonsoir,
    qui dit php ... suppose écrire un script avec les bonnes instructions suivant la version de php du serveur

    Questions :
    - quelle est la version exacte de php sur ton serveur ?
    - tu as écris toi même ce script ou tu l'as "récuperée" quelque part ?
    - si tu es sur un site Joomla, pourquoi utiliser un tel script ? tu as des extensions pour cela ... sauf si tu as une raison précise que je ne connais pas
    - peut on avoir l'intégralité du code ? (pour trouver une éventuelle erreur)

    si personne ne peut t'aider ...... il faudrait peut être t'orienter sur un forum dédié a PHP

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par lomart Voir le message
    Pourtant il manque quelque chose avant la fin du script : unexpected end of file

    Les éditeurs permettent de visualiser l'appairage des accolades et autres
    J'ai bien lu, bien vu . Et malgré de nombreuses vérifications dans mon éditeur -Geany sous Linux, très pratique et complet- je ne trouve rien d'anormal. Tout est bien appairé !

    Laisser un commentaire:


  • lomart
    a répondu
    Pourtant il manque quelque chose avant la fin du script : unexpected end of file

    Les éditeurs permettent de visualiser l'appairage des accolades et autres

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par lomart Voir le message
    Bonjour,
    Il ne manquerait pas l'accolade fermante de if ($traitement) {...
    Bonjour et merci lomart,

    Je viens encore de vérifier. Elle est bien présente en fin de script :

    Code PHP:
    }else{
    echo 
    "<br />Les fichiers de travail 'sitemap-*.xml' ne peuvent pas être effacés (traitement impossible) !";
    }
    mysqli_close($conn); 

    Laisser un commentaire:


  • lomart
    a répondu
    Bonjour,
    Il ne manquerait pas l'accolade fermante de if ($traitement) {...

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par dolmenhir Voir le message
    Salut,

    Essaye de construire ta chaîne avant dans une variable et de n'envoyer que celle-ci dans la fonction
    Code:
    $lachaine = "<?xml version='1.0' encoding='UTF-8'?>\n" .
    "<sitemapindex xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n" .
    "<sitemap>\n" .
    "<loc>" . SITE . "/</loc>\n" .
    "</sitemap>\n";
    fwrite($xml1, $lachaine);
    Dol.
    Bonjour et merci Dol,

    Je viens d'appliquer à la lettre cette règle ... mais j'ai toujours la même erreur !

    Laisser un commentaire:


  • dolmenhir
    a répondu
    Salut,

    Essaye de construire ta chaîne avant dans une variable et de n'envoyer que celle-ci dans la fonction
    Code:
    $lachaine = "<?xml version='1.0' encoding='UTF-8'?>\n" .
                  "<sitemapindex xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n" .
                  "<sitemap>\n" .
                  "<loc>" . SITE . "/</loc>\n" .
                  "</sitemap>\n";
    fwrite($xml1, $lachaine);
    Dol.

    Laisser un commentaire:


  • Visiteur
    guest_started_a_topic_y_with_prefix

    Bug pour générer un fichier Sitemap

    Mon environnement
    J 3.9.14, php 7.x, mysqli

    Bonjour,

    J'ai besoin de générer un fichier "sitemap index" et tous les fichiers "sitemap" décrivant les urls construites à partir d'une table spécifique de ma BDD.
    Je bute stupidement sur l'écriture d'une instruction php. Voici l'extrait de mon script :

    Code PHP:
    define ("SITE", "... url de mon site ...");
    $traitement = true;
    if ( file_exists('sitemap-1.xml') ) {  // effacement des éventuels fichiers sitemap précédents
          if( @unlink('sitemap-*') !== true ) {
                $traitement = false;
          }        
    }
    if ($traitement) {
    // préparation du fichier "sitemap-index.xml"
    $xml1 = fopen('sitemap-index.xml',"w");
    fwrite($xml1, "<?xml version='1.0' encoding='UTF-8'?>\n" .
                  "<sitemapindex xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n" .
                  "<sitemap>\n" .
                  "<loc>" . SITE . "/</loc>\n" .
                  "</sitemap>\n");
    L'instruction :

    Code PHP:
    fwrite($xml1, "<?xml version='1.0' encoding='UTF-8'?>\n" .
                  "<sitemapindex xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n" .
                  "<sitemap>\n" .
                  "<loc>" . SITE . "/</loc>\n" .
                  "</sitemap>\n");
    me génère systématiquement l'erreur système :

    --> syntax error, unexpected end of file, expecting variable (T_VARIABLE) or ${ (T_DOLLAR_OPEN_CURLY_BRACES) or {$ (T_CURLY_OPEN)

    QUESTION : quel cador en php pourrait me sortir de mon guêpier ?
    Merci pour votre aide.
    Dernière édition par Visiteur à 01/01/2020, 10h34

Annonce

Réduire
Aucune annonce pour le moment.

Partenaire de l'association

Réduire

Hébergeur Web PlanetHoster
Travaille ...
X