J'ai un script qui, chaque fois appelé, obtient la première ligne d'un fichier. Chaque ligne est connue pour avoir exactement la même longueur (32 caractères alphanumériques) et se termine par "\ r \ n". Après avoir obtenu la première ligne, le script l'enlève.Est-ce le moyen le plus efficace pour obtenir et supprimer la première ligne du fichier?
Cela se fait ainsi:
$contents = file_get_contents($file));
$first_line = substr($contents, 0, 32);
file_put_contents($file, substr($contents, 32 + 2)); //+2 because we remove also the \r\n
Il est évident que cela fonctionne, mais je me demandais s'il y a une façon de le faire plus intelligemment (ou plus efficace) cela?
Dans ma solution simple je fondamentalement lire et réécrire le fichier entier juste pour prendre et enlever la première ligne.
Vous pouvez le rendre plus efficace en mémoire (faire une boucle, lire une ligne à la fois, les écrire un à temps sauf le premier), mais il aura l'air compliqué et sera sujet aux erreurs. Je ferais la même chose que toi. Il n'y a pas moyen de contourner le fait que les fichiers sont stockés séquentiellement, à partir du premier octet. –
si vous pouviez stocker le fichier en tant qu'indexé, et effectuer tout R/W à travers l'index, peut-être cette opération serait plus rapide car vous pouvez simplement supprimer cette ligne de l'index et le faire serait moins cher que de faire cette opération sur un fichier complet. Toutefois, si le fichier est petit, le coût des E/S serait inférieur au coût de maintenance de l'index. – anijhaw
La seule solution optimale à un problème similaire que je puisse penser impliquerait un IOCTL dans le pilote du système de fichiers qui couperait le premier bloc logique (de taille dépendante du matériel et de l'implémentation) du fichier sans toucher le reste. Mais c'est un exercice académique pour résoudre le problème inexistant, et certainement pas ce que vous recherchez. :) –