Bug pour générer un fichier Sitemap
Réduire
X
-
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.
-
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}Dernière édition par Visiteur à 22/12/2019, 07h24
Laisser un commentaire:
-
Le visiteur a réponduEnvoyé par manu93fr Voir le messageBonsoir,
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
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:
-
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:
-
Le visiteur a réponduEnvoyé par lomart Voir le messagePourtant 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:
-
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:
-
Le visiteur a réponduEnvoyé par lomart Voir le messageBonjour,
Il ne manquerait pas l'accolade fermante de if ($traitement) {...
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:
-
Bonjour,
Il ne manquerait pas l'accolade fermante de if ($traitement) {...
Laisser un commentaire:
-
Le visiteur a réponduEnvoyé par dolmenhir Voir le messageSalut,
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);
Je viens d'appliquer à la lettre cette règle ... mais j'ai toujours la même erreur !
Laisser un commentaire:
-
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);
Laisser un commentaire:
-
guest_started_a_topic_y_with_prefixBug 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");
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");
--> 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, 10h34Tags: Aucun
Annonce
Réduire
Aucune annonce pour le moment.
Laisser un commentaire: