déplacement de pointeur de fichier d'une ligne (php)?
Je cherche à automatiser la sitemap.xml fichier sur mon site puisque le contenu est en constante évolution. Je suis actuellement ouvrir le fichier en ajoutant: fopen($file_name, 'a');
afin que je puisse ajouter le nouvel ensemble de balises. Cependant, je viens de remarquer que l'ensemble du fichier sitemap doit être terminé, avec une étiquette qui signifie que chaque fois que j'ouvre le fichier, j'ai besoin d'ajouter le texte pas à la fin du fichier, mais à 1 ligne de la fin.
Donc, en gros, comment puis-je déplacer le pointeur de fichier après l'ouverture du fichier pour l'ajout de sorte que je peux accomplir cela? Merci.
Mise à jour: voici ce que le sitemap ressemble:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
<url>
<loc>...</loc>
<lastmod>2009-08-23</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
donc à chaque fois que je les ajoute, je dois ajouter la <url>..</url>
partie qui doit aller à droite avant la clôture </urlset>
tag. J'ai déjà un code qui peut ajouter le xml à la fin du fichier. J'ai juste besoin de comprendre comment faire pour ajouter la nouvelle portion juste avant la balise de fermeture.
OriginalL'auteur | 2009-08-23
Vous devez vous connecter pour publier un commentaire.
Utiliser php fseek() pour rechercher à la fin du fichier (trouver de l'aide la taille du fichier()), puis itérer vers l'arrière une ligne. lire la dernière ligne et de le stocker temporairement. remplacer la dernière ligne avec ce que vous souhaitez insérer, puis ajouter les lignes temporaires vous avez enregistré précédemment.
Pour effectuer une itération vers l'arrière une ligne, utiliser fseek combiné avec fgetc()
et maintenant interne de votre pointeur de fichier doit être fait une ligne avant la dernière ligne. bien sûr, vous aurez à traiter avec le coin des cas, lorsque votre fichier a seulement une ligne, mais je vais vous permettre de comprendre les détails 😉
maintenant, magasin de la dernière ligne dans une variable tmp
insérer sur votre ligne, et ajouter de la dernière ligne à la fin du fichier
yep, ajouter un peu de [non testé] code. btw, c'est un arcane C le style de faire les choses. La seule raison pour laquelle vous voulez faire cela sur l'aide d'un analyseur xml est si vous avez de très gros fichiers et ne veulent pas lire tout le fichier dans un tableau avant d'écrire de nouveau sur le disque. 😛
Charles, vous sir êtes un génie. Quelque chose que je viens de trouver... au Lieu d'avoir à utiliser
filesize()
, vous pouvez réellement utiliser:fseek($fhandle,-1,SEEK_END);
OriginalL'auteur Charles Ma
Sans voir le XML que vous êtes en train de parler, et sans savoir ce que vous essayez d'ajouter (veuillez fournir ces pour un plein codé jusqu'réponse) je vous propose cette approche...
Comme je l'ai dit, sans voir le XML ou encore du code, il est très difficile de fournir et de répondre à
OriginalL'auteur 32423hjh32423
Ajoutant à Charles Ma réponse. Vous pouvez le sauver dans un fichier appelé
sitemapper.php
, et de faire appel à ce fichier avec une requête GET, bien que je vous conseille d'ajouter plus de sécurité, et flock() si vous avez des écritures simultanées.Une autre raison d'utiliser ce serait le cas si vous utilisez PHP4 qui n'a pas la SimpleXMLParser.
OriginalL'auteur Pranab
Garder les deux versions du fichier: le plan du site et un tmp sans la balise de fermeture.
Lorsque vous souhaitez étendre, d'abord étendre la tmp un; puis le copier sur un sitemap, et ajouter la balise de fermeture de là.
OriginalL'auteur Zed
fseek($fp, -n, SEEK_END);, mais vous devez ouvrir le fichier en tant que "r+" et non pas "un".
Il n'est pas généralement une bonne idée d'être le traitement de fichiers XML comme ceci; s'appuyer sur les octets exactement positions est très fragile. Mieux serait d'ouvrir le fichier dans un analyseur XML, ajouter les éléments que vous voulez, serialise dans un nouveau fichier et l'échange de plus (alors que rien de ce que lit le XML au milieu de vous l'écrire).
Sur une base soutenue site, vous pouvez aussi envisager la création de votre plan sitemap XML dynamiquement à l'aide de PHP lui-même.
Eh bien, vous pouvez certainement le faire, mais vous seriez compter sur la longueur de la clôture de l' ‘</urlset>’ étiquette. Si, par exemple, un supplément de retour à la ligne ou des espaces ont été ajoutés après le tag, vos hypothèses sur l'endroit où vous avez eu à insérer le nouveau contenu serait faux. Cela rend votre programme très fragile.
OriginalL'auteur bobince