Bug pour générer un fichier Sitemap

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

  • elecoest
    a répondu
    juste qu'au lieu d'écrire

    $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'))";


    j'aurais fait :


    $db = JFactory::getDbo(); $query = $db->getQuery(true); $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'))"; $db->setQuery($req);
    $results = $db->loadObjectList(); ...

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par elecoest Voir le message
    Hello Visiteur

    A part le fait que tu n'utilises pas les fonctions standard offertes par Joomla pour les query en base je ne vois rien d'anormal et mon PHPStorm non plus.

    Comme je n'ai pas de réponse à ta question, j'ai une alternative : JSitemapPro. tu peux générer le sitemap pour les URL que tu souhaites (comme j'en ai qqes milliers je fais çà par requete SQL). Cà marche c'est fonctionnel et la version pro te permet de suivre bien d'autres choses.

    Manu
    Bonjour,
    Je te remercie pour ce conseil concernant JSitemapPro.
    Je viens justement de résoudre mon problème en travaillant en 2 étapes :
    1. j'ai simplifié mon script pour qu'il ne génère pas la 1ère ligne de tout sitemap,
    2. après exécution du scipt, il me reste ensuite à ajouter avec un éditeur de texte la 1ère ligne manquante dans chacun des sitemaps.
    nb : idem pour le sitemap.index
    Après vérification, mes quelques 500000 urls sont ok.

    ps: je suis surpris par ta remarque selon laquelle je n'utilise pas les fonctions standard offertes par Joomla pour les query en base : j'utilise ici "mysqli" qui est un standard au-delà de Joomla. Et sans problème. Et avec l'avantage de pouvoir faire tout contrôle de bonne écriture par des tests préalables avec "phpMyadmin sur ma bdd (avec un simple copier/coller de ma requête mysqli).
    Mais je suis conscient qu'il existe bien d'autres méthodes, et notamment des méthodes propres à Joomla.

    Bons vœux pour 2020 !

    Laisser un commentaire:


  • elecoest
    a répondu
    Hello Visiteur

    A part le fait que tu n'utilises pas les fonctions standard offertes par Joomla pour les query en base je ne vois rien d'anormal et mon PHPStorm non plus.

    Comme je n'ai pas de réponse à ta question, j'ai une alternative : JSitemapPro. tu peux générer le sitemap pour les URL que tu souhaites (comme j'en ai qqes milliers je fais çà par requete SQL). Cà marche c'est fonctionnel et la version pro te permet de suivre bien d'autres choses.

    Manu

    Laisser un commentaire:


  • dolmenhir
    a répondu
    <BIG TROLL - START>

    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
    Visiteur
    Je ne vois nulle part, dans l'intervention de Manu, la moindre agressivité, ni dans le fond, ni dans la forme (y a même un smiley )

    Apparemment ce bug dans ton code t'énerve (je peux comprendre) au point de prêter de fausses intentions aux intervenants (ça je comprends moins).

    Il ne faut pas oublier que les messages qu'on lit se teintent toujours de l'état d'esprit dans lequel on se trouve, d'où parfois une mauvaise interprétation des intentions.

    Donc en cette période de fêtes, je ne saurai trop te conseiller de manger un peu (beaucoup) de chocolat, c'est bon pour l'humeur comme pour le cerveau

    </BIG TROLL - END>

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par cavo789 Voir le message
    Bonjour

    Visiteur merci de veiller à respecter tes interlocuteurs. Je ne vois aucune agressivité dans les messages de Manu. La seule personne qui a fait montre de sentiments peu collégial, c'est toi.

    Si tu veux recevoir de l'aide, le respect de l'autre est déjà un bon point de départ.

    Pour ton problème, je rejoins Loïc : à un moment donné, on simplifie son code. Es-tu certain de la ligne qui provoque l'erreur ? (tu n'as pas dis plus haut avoir mis la ligne en commentaire pour confirmer que cela fonctionne).

    Heredoc ? Pourquoi ? Tu fais juste une concaténation d'une chaîne de caractères et d'une variable. C'est une des choses les plus simples en programmation à faire; nul besoin de compliquer la chose en utilisant des heredoc.

    Commente et simplifie et tu trouveras assez vite où était l'erreur.

    Bonne journée.
    Bonjour,

    Dans mon post #9 de cette discussion, j'ai bien précisé au n°5 de mes réponses que j'avais pratiqué une documentation de toutes mes ignes puis relâché progressivement pour comprendre quelle instruction de mon script générait l'erreur.
    Et j'ai montré cette instruction (tentative d'écriture d'une ligne dans le sitemap.xml).
    ps: je ne suis jamais irrespectueux sur ce forum. Je t'invite à vérifier les nombreux posts et les aides que l'ai pu apporter moi-même sur ce forum

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par lomart Voir le message
    Bonjour,

    Pourquoi tant d'agressivité. Manu ne l'a jamais été.

    Quand j'ai un problème de ce type, je simplifie ou j'éclate mon code pour isoler le problème.
    J'ai un doute sur la forme d'une chaîne, je la remplace par une autre forme.
    Je doute que mon serveur accepte les chaines heredoc (et non herecode ), je la remplace pour tester

    Devant ce genre de souci, un développeur est seul devant son code dans son environnement
    Bonjour, et merci pour votre contribution,

    Je ne pense pas être agressif, mais peut-être un peu susceptible ! Je n'aime pas être pris pour un idiot, voire même un maladroit. Je pense être appliqué et réfléchi, tout au moins je m'y efforce.
    Il n'est pas interdit à quiconque d'être respectueux d'autrui. Bien au contraire.
    Quand je réponds à des demandes sur ce forum, je m'interdis tout jugement de valeur sur le demandeur. Simple politesse.

    Je partage tout à fait vos conseils de développeur. Et j'en applique tout autant. Croyez-moi, depuis que je suis tombé sur cette erreur, je n'ai de cesse de tenter d'autres écritures, d'éclater mon code, etc...
    Quant à cette réflexion sur la "notion heredoc", elle n'émane pas de moi (j'en ignorais l'existence) mais d'un spécialiste php. Je l'ai rapporté tel quel ici (merci pour le correctif "heredoc" et non "herecode" comme il me l'avait écrit). Je n'ai jamais utilisé de telles écritures.

    Laisser un commentaire:


  • cavo789
    a répondu
    Bonjour

    Visiteur merci de veiller à respecter tes interlocuteurs. Je ne vois aucune agressivité dans les messages de Manu. La seule personne qui a fait montre de sentiments peu collégial, c'est toi.

    Si tu veux recevoir de l'aide, le respect de l'autre est déjà un bon point de départ.

    Pour ton problème, je rejoins Loïc : à un moment donné, on simplifie son code. Es-tu certain de la ligne qui provoque l'erreur ? (tu n'as pas dis plus haut avoir mis la ligne en commentaire pour confirmer que cela fonctionne).

    Heredoc ? Pourquoi ? Tu fais juste une concaténation d'une chaîne de caractères et d'une variable. C'est une des choses les plus simples en programmation à faire; nul besoin de compliquer la chose en utilisant des heredoc.

    Commente et simplifie et tu trouveras assez vite où était l'erreur.

    Bonne journée.

    Laisser un commentaire:


  • lomart
    a répondu
    Bonjour,

    Pourquoi tant d'agressivité. Manu ne l'a jamais été.

    Quand j'ai un problème de ce type, je simplifie ou j'éclate mon code pour isoler le problème.
    J'ai un doute sur la forme d'une chaîne, je la remplace par une autre forme.
    Je doute que mon serveur accepte les chaines heredoc (et non herecode ), je la remplace pour tester

    Devant ce genre de souci, un développeur est seul devant son code dans son environnement

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Voici ce qu'un spécialiste du langage php m'a conseillé d'écrire en lieu et place de mon instruction bloquante :

    Code PHP:
      $site = SITE;  $xml = <<<xml  <?xml version="1.0" encoding="utf-8"?>  <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">  <sitemap>  <loc>{$site}/sitemaps/sitemap.xml</loc>  </sitemap>  xml;  file_put_contents('sitemaps/sitemap-index.xml', $xml);
    Après un nouveau test, cette écriture me donne l'erreur :

    --> 0 - syntax error, unexpected '<<' (T_SL)

    D'après ce spécialiste, la version de php fournie par mon hébergeur O2switch -cf. 7.2.25- n'autoriserait pas l'utilisation de la notation herecode (celle qui permet l'écriture de "<<<xml").
    Je viens donc de soumettre cette remarque à mon hébergeur, et j'attends sa réponse.

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    @ manu93fr,

    Je t'ai fait remarquer que nos 2 posts se sont croisés et que cette réponse de ma part " ... que de bavardage pour ne rien dire ..." a été écrite avant de recevoir tes derniers conseils. Merci donc de bien vouloir en tenir compte.
    Mais c'est très bien ainsi, tu as raison et ne perds pas de temps à intervenir ainsi dans mes demandes d'aide.
    Ceci ne fait que confirmer ce que je pense de toi : tu as un fichu caractère. Tes interventions semblent signées d'un garde chiourme au fond d'une prison, et non d'un modérateur de l'open source !

    Laisser un commentaire:


  • manu93fr
    a répondu
    Envoyé par lendrevi Voir le message
    @ manu93fr,

    Que de bavardage pour ne rien dire. Peut-être que l'on peut passer au fond de mon problème puisque tu dis m'aider.
    Ai-je bien répondu à tes questions ? Cela me semble plus important.
    j'ai dejà fait ma ptite contribution mais encore faut il être un peu patient .... et coté "bavardage pour ne rien dire", tu as raison, j'arrête de ce pas ce "bavardage" inutile et stérile avec toi .... j'ai déjà mal à la tête

    ps: tu as vu ... j'ai mis un smiley ... donc pas agressif ...

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    @ manu93fr,

    Que de bavardage pour ne rien dire. Peut-être que l'on peut passer au fond de mon problème puisque tu dis m'aider.
    Ai-je bien répondu à tes questions ? Cela me semble plus important.

    ps: ce post vient de se croiser avec ta réponse de 16h11 : merci donc.

    Oui, ma requête mysql fonctionne bien et me sélectionne les lignes attendues (je l'ai également vérifié en mode "phpmyadmin" en direct sur ma bdd).
    Et par ailleurs, l'erreur intervient avant d'entrer dans la boucle de traitement de la variable $resultat.
    Quand à mettre des accolades autour de "break" :
    1. ce serait l'écriture standard d'un "if",
    2. mais on peut l'écrire en abrégé comme je l'ai fait, quand on n'a pas besoin de gérer le "else". Ce qui est le cas ici.
    Dernière édition par Visiteur à 22/12/2019, 16h32

    Laisser un commentaire:


  • manu93fr
    a répondu
    Envoyé par lendrevi Voir le message
    À 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"
    reponse courte -> je mettrai des accolades autour de BREAK;
    je n'ai pas essayé de comprendre ton code dans les détails .... mais j'ai un doute sur la requête ... as tu vérifié qu'elle renvoyait bien quelque chose car tu ne fais pas ce controle en sortie

    Voila .. ma ptite contribution a ton problème ... ne m'en demande pas plus
    Bon dimanche !
    Dernière édition par manu93fr à 22/12/2019, 16h11

    Laisser un commentaire:


  • manu93fr
    a répondu
    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.
    AH ben ça m'apprendra a vouloir t'aider ... a quel moment j'ai été "agressif" ?
    Je te pose juste des questions pour comprendre .... mais bon ...

    Sans vouloir me vanter, j'ai de longues années d'expérience derrière moi et en informatique....
    et bien si, tu le fais là .... pas la peine de te justifier, je ne t'ai pas juger et je ne t'ai pas pris de haut

    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.
    là, je ne comprends pas ton étonnement, je ne fais QUE te conseiller un forum dédié au PHP si personnes ici ne peut t'aider ici .... car on est pas tous des "cadors" en PHP (pour reprendre ton expression

    Laisser un commentaire:


  • Visiteur
    Le visiteur a répondu
    Envoyé par jfque Voir le message
    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.
    Bonjour jfque, et merci pour cette information.
    Mais si je rencontre un problème dans l'écriture du script, ce n'est pas dans la requête Mysql fort simple à partir de ma table de BDD. C'est tout bêtement quand je lance l'écriture d'une ligne dans un fichier de type sitemp.xml.
    Nombre de "spécialistes php" m'avouent ne pas comprendre pourquoi cette erreur !

    Bon dimanche !

    Laisser un commentaire:

Annonce

Réduire
Aucune annonce pour le moment.

Partenaire de l'association

Réduire

Hébergeur Web PlanetHoster
Travaille ...
X