Souci avec création d'un sitemap

WRInaute discret
Bonjour à tous,

En cherchant ici-même, je suis tombé sur un petit script php pour créer un sitemap. En essayant de l'adapter à mon site, je me rend compte qu'il manque quelque chose... voici le fichier sitemap.php :

PHP:
<span class="syntaxhtml"><br /><span class="syntaxdefault"><?php<br />set_time_limit</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxcomment">// Chemin relatif où seront écrits les sitemaps, sans extension<br />// ci dessous, dans le cas où le sitemap est à la racine et ce fichier dans un dossier comme /admin/<br /></span><span class="syntaxdefault">$sm</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"../"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$root</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"http://www.example.com/"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// Site web sans "/" à la fin<br /><br />// Configuration de la connexion à la base de données<br /></span><span class="syntaxdefault">$host</span><span class="syntaxkeyword">=</span><span class="syntaxstring">""</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$base</span><span class="syntaxkeyword">=</span><span class="syntaxstring">""</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$user</span><span class="syntaxkeyword">=</span><span class="syntaxstring">""</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$password</span><span class="syntaxkeyword">=</span><span class="syntaxstring">""</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxcomment">// Initialisation des compteurs<br /></span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">=</span><span class="syntaxstring">""</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// La chaîne contenant les <url></url><br /></span><span class="syntaxdefault">$pp</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$u</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxcomment">// Pages statiques si nécessaire<br />//$r=array( // Ce tableau contient les URLs statiques<br />//"/page.html",<br />//"/andre/"<br />//);<br /><br /></span><span class="syntaxdefault">foreach </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$r as $v</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">.=</span><span class="syntaxstring">"<br /><url>\r\n<br /><loc>"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$root</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$v</span><span class="syntaxkeyword">.</span><span class="syntaxstring">"</loc>\r\n<br /><priority>0.9</priority>\r\n<br /><changefreq>hourly</changefreq>\r\n<br /></url>\r\n<br />"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$u</span><span class="syntaxkeyword">++;<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$u</span><span class="syntaxkeyword">%</span><span class="syntaxdefault">30000</span><span class="syntaxkeyword">==</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{</span><span class="syntaxdefault">ze</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$pp</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$sm</span><span class="syntaxkeyword">);}<br />}<br /><br /></span><span class="syntaxcomment">// Pages dynamiques<br /></span><span class="syntaxdefault">$e</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"select ar_urlp from articles where ar_suite in (0,1)"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$link</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">mysql_connect</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$host</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$user</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$password</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">mysql_select_db</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$base</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$link</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$query</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">mysql_query</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$e</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$link</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">mysql_close</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">echo mysql_error</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">while </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$aa</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">mysql_fetch_row</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$query</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxcomment">// Pour chaque page, on construit l'url selon nos propres critères<br /></span><span class="syntaxdefault">$url </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $aa</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">];</span><span class="syntaxdefault">    <br />if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$url</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 4</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword"><></span><span class="syntaxdefault"> </span><span class="syntaxstring">"http"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{</span><span class="syntaxdefault">$new_url </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"http://www.example.com/"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault">rtrim</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$url</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">3</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">250</span><span class="syntaxkeyword">));}</span><span class="syntaxdefault">else </span><span class="syntaxkeyword">{</span><span class="syntaxdefault">$new_url </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $url</span><span class="syntaxkeyword">;}<br /></span><span class="syntaxcomment">//<br /></span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">.=</span><span class="syntaxstring">"<br /><url>\r\n<br /><loc>"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$new_url</span><span class="syntaxkeyword">.</span><span class="syntaxstring">"</loc>\r\n<br /><priority>0.8</priority>\r\n<br /><changefreq>daily</changefreq>\r\n<br /></url>\r\n<br />"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$u</span><span class="syntaxkeyword">++;<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$u</span><span class="syntaxkeyword">%</span><span class="syntaxdefault">30000</span><span class="syntaxkeyword">==</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{</span><span class="syntaxdefault">ze</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$pp</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$sm</span><span class="syntaxkeyword">);}<br />}<br /><br /></span><span class="syntaxcomment">// Si vous avez différents types d'url ou plusieurs bases etc..., reproduisez le paragraphe ci-dessus en l'adaptant<br /><br />//fin<br /></span><span class="syntaxdefault">ze</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$pp</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$sm</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">=</span><span class="syntaxstring">""</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxcomment">// La fonction "ze" crée un fichier sitemap toutes les 30.000 URLs<br /></span><span class="syntaxdefault">function ze</span><span class="syntaxkeyword">(&</span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">,&</span><span class="syntaxdefault">$pp</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$sm</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">$ax1</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<br /><urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"<br />xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"<br />xsi:schemaLocation=\"https://www.google.com/schemas/sitemap/0.84<br />https://www.google.com/schemas/sitemap/0.84/sitemap.xsd\">\r\n<br />"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$ax2</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"<br /></urlset>\r\n<br />"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$xx</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">$ax1</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$ax2</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">=</span><span class="syntaxstring">""</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$aze</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">gzencode</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$xx</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$fp</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">fopen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$sm</span><span class="syntaxkeyword">.</span><span class="syntaxstring">"_"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$pp</span><span class="syntaxkeyword">.</span><span class="syntaxstring">".gz"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"w"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">fputs</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$fp</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$aze</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">fclose</span><span class="syntaxkeyword">();<br /><br /></span><span class="syntaxdefault">$fp</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">fopen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$sm</span><span class="syntaxkeyword">.</span><span class="syntaxstring">"_"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$pp</span><span class="syntaxkeyword">.</span><span class="syntaxstring">".xml"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"w"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">fputs</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$fp</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$xx</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">fclose</span><span class="syntaxkeyword">();<br /><br /></span><span class="syntaxdefault">$pp</span><span class="syntaxkeyword">++;<br /><br />}<br /><br /></span><span class="syntaxdefault">$pl</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxdefault">$xx</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<br /><sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\r\n<br />"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">while </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$pl</span><span class="syntaxkeyword"><</span><span class="syntaxdefault">$pp</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">$xx</span><span class="syntaxkeyword">.=</span><span class="syntaxstring">"<br /><sitemap>\r\n<br /><loc>"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$root</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">str_replace</span><span class="syntaxkeyword">(</span><span class="syntaxstring">".."</span><span class="syntaxkeyword">,</span><span class="syntaxstring">""</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$sm</span><span class="syntaxkeyword">).</span><span class="syntaxstring">"_"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$pl</span><span class="syntaxkeyword">.</span><span class="syntaxstring">".gz</loc>\r\n<br /></sitemap>\r\n<br />"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$pl</span><span class="syntaxkeyword">++;<br />}<br /></span><span class="syntaxdefault">$xx</span><span class="syntaxkeyword">.=</span><span class="syntaxstring">"<br /></sitemapindex><br />"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$fp</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">fopen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$sm</span><span class="syntaxkeyword">.</span><span class="syntaxstring">".xml"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"w"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">fputs</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$fp</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$xx</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">fclose</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">?><br /></span></span>

Et en consultant example.com/sitemap.php, je tombe sur le beau message d'erreur :

Warning: Invalid argument supplied for foreach() in /home/web/example/sitemap.php on line 26

Warning: fopen(../_0.gz) [function.fopen]: failed to open stream: Permission denied in /home/web/example/sitemap.php on line 82

Warning: fputs(): supplied argument is not a valid stream resource in /home/web/example/sitemap.php on line 83

Warning: Wrong parameter count for fclose() in /home/web/example/sitemap.php on line 84

Warning: fopen(../_0.xml) [function.fopen]: failed to open stream: Permission denied in /home/web/example/sitemap.php on line 86

Warning: fputs(): supplied argument is not a valid stream resource in /home/web/example/sitemap.php on line 87

Warning: Wrong parameter count for fclose() in /home/web/example/sitemap.php on line 88

Warning: fopen(../.xml) [function.fopen]: failed to open stream: Permission denied in /home/web/example/sitemap.php on line 110

Warning: fputs(): supplied argument is not a valid stream resource in /home/web/example/sitemap.php on line 111

Warning: Wrong parameter count for fclose() in /home/web/example/sitemap.php on line 112

Pourriez-vous me donner un coup de main afin de faire fonctionner tout cela ? :wink:


Merci.
 
WRInaute passionné
Code:
Warning: fopen(../_0.gz) [function.fopen]: failed to open stream: Permission denied in /home/web/example/sitemap.php on line 82

Soit un mets un chmod sur le dossier, soit tu créés le fichier avec le bon chmod.

Par contre t'as des trucs bien bizarre :
Code:
Warning: fopen(../.xml) [function.fopen]: failed to open stream: Permission denied in /home/web/example/sitemap.php on line 110
 
WRInaute discret
J'ai appliqué un chmod 777 sur sitemap.php, mais sans succès, j'obtiens toujours les mêmes erreurs. Une idée ?


Merci :wink:
 
WRInaute passionné
C'est pas sitemap.php qui a un problème de CHmod ;)
C'est tes :
_0.gz
.xml
_0.xml etc... (tes noms sont vraiment bizarre)
 
WRInaute discret
Je t'avoue bloquer car... ces fichiers n'existent pas... :s Ai-je zappé quelque chose pour faire fonctionner le code php ?


Merci.
 
WRInaute passionné
jutement ton php veut écrire sur ces fichiers mais il n'a pas la permission de les faire.
Donc tu les créé et tu mets un bon CHMOD et ça devrait avancer un peu le shimiliblick
 
WRInaute discret
C'est fait. Bon maintenant le hic c'est que ces fichiers sont vides... :/ J'ai (encore) oublié une étape ?

Question bis : je trouve cela très compliqué... si quelqu'un a un petit script php tout simple pour générer un sitemap dynamique sur un gros site (plus de 30000 URLs), je suis preneur.


Merci.
 
WRInaute discret
Bonsoir,

Pourquoi ne pas créer un dossier en CHMOD 777 et modifier légèrement votre script pour qu'il enregistre ces fichiers dans CE dossier ?
 
WRInaute accro
J'ai jamais trop compris l'intérêt de faire des sitemaps en browsant pour des sites qui sont manifestement constitués à partir d'une base de données.
Suffit de faire un petit fichier php qui reprend la liste des urls dans la base, non ?
 
WRInaute discret
Bonsoir,

JulienV a dit:
Pourquoi ne pas créer un dossier en CHMOD 777 et modifier légèrement votre script pour qu'il enregistre ces fichiers dans CE dossier ?

Car je reconnais tout bêtement que ça dépasse mes compétences en php...

Marie-Aude a dit:
J'ai jamais trop compris l'intérêt de faire des sitemaps en browsant pour des sites qui sont manifestement constitués à partir d'une base de données.
Suffit de faire un petit fichier php qui reprend la liste des urls dans la base, non ?

La base d'articles est en effet mise en base de données.
Je sui souvert à toute proposition de code fonctionnel pour générer un sitemap automatique fonctionnel si quelqu'un a ça :wink: (le code du message #1 a été trouvé par hasard sur le forum de WRI, mais je suis incapable de le faire fonctionner).


Merci par avance :wink:
 
WRInaute accro
Tu fais simplement une requete sur ta base de données, tu formattes la chaine de sortie pour répondre au format, tu fais un "foreach echo" et basta
et dans ton .htaccess, tu fais une regle de réécriture pour que le fichier qui s'appelle sitemap.xml (compris par google) soit en réalité un sitemap.php :)
 
WRInaute discret
Marie-Aude a dit:
Tu fais simplement une requete sur ta base de données, tu formattes la chaine de sortie pour répondre au format, tu fais un "foreach echo" et basta

"Basta" c'est vite dit, j'ai rien compris à ton explication :oops: Je précise que, bien évidemment, si j'avais les compétences php pour réaliser un sitemap, je ne serais pas en train de vous poser ces questions...

N'existe-il pas un tutoriel "pas à pas" bien foutu, ou un script tout prêt (avec juste les identifiants de la base de données à renseigner par exemple) ?


Merci :wink:
 
WRInaute accro
Non, parce que tout dépend de la structure de ta base de données et de la façon de faire tes urls ^^

Maintenant, pour moi quelqu'un qui tripote les scripts php, c'est quelqu'un qui sait
- se connecter à une base
- faire une requete sélection
- passer le résultat dans une array
- parcourir l'array pour traiter le résultat

si ce que je dis c'est du chinois.... soit tu laisses tomber, soit tu fouilles dans le site du zéro :)
 
Discussions similaires
Haut