IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Curseur et fichier texte.


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de Squalthor
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Juillet 2006
    Messages : 178
    Par défaut [SQL] Curseur et fichier texte.
    Bonjour,

    Voilà je réalise actuellement un chat, pour économiser des ressources j'inscrit le log dans un fichier texte.

    Comme je souhaite garder un historique du chat il me faudrais ressortir juste les dernières 40/50 lignes du fichier.
    J'eu pour idée, détrompez-moi si je me penche sur une solution trop lourde comparée à ce qu'elle pourrait être, de compter toute les lignes du fichier et d'incrémenter une variable "$i" à chaques lignes pour pouvoir obtenir le numéro totale des lignes.

    Ensuite il me faudrait placer le curseur à la ligne "$i -40" et à partir de là ressortir toutes les lignes suivantes.

    Pour celà on m'a gentiment conseillé de transformer les chaines en array et de trier via la fonction explode, je trouve cette solution intérressante mais bien trop lourde, car si mon fichier contient plus de 10 000 lignes il me faudrait créer un array de 10 000 lignes

    J'ai certes chercher des fonctions me permettant de placer le curseur à la ligne désirée mais je n'en ai hélas pas trouvé, ce qui me parait étonnant vu l'utilité d'une telle fonction.

    Donc je venais solliciter votre expérience afin d'y voir plus clair et de me décider sur le système à adopter.

    Je vous remercie pour votre attention.

  2. #2
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    le principe serait de parcourir le fichier à l'envers à la recherche des sauts de lignes.
    Il y a plusieurs exemples sur la page de fseek() http://www.php.net/manual/fr/function.fseek.php

    Bye

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    comme l'indique Djakisback tu va rentrer dans une boucle donc tu incrementes un compteur et tu auras tes 50 dernères lignes lignes

    tu comptes le nombre total de lignes et tu commences a les lire a ( nlignes - 50 )

    mais bon pour faire ce genre de projets mieux vaut utiliser une base de données t auras moins de souci

    si c'est pour les performances que tu t'inquietes avant que tu ais 500 visiteurs en ligne tu auras eu le temps de voir venir ....

    +


  4. #4
    Membre confirmé Avatar de Squalthor
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Juillet 2006
    Messages : 178
    Par défaut
    Bonjour Djakisback,

    Merci de m'avoir répondu aussi rapidement mais hélas ta solution parle peu pour le débutant que je suis. J'ai certes regardé la page que tu m'as conseilél mais je n'y comprend rien

    Pourrais-tu prendre le temps de m'expliquer plus en détail s'il te plait afin d'éclairer ma lanterne ?

    Merci

    Bonjour gseverin,

    Nos messages se sont croisés, le système sous base de données sql marche et est opérationnel à ce niveau là. Mais aimant l'optimisation à l'extrême je préfère dors et déjà m'y mettre et de plus ça n'en rendras mon apprentissage, même s'il est bien plus ardu, bien plus intérressant

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    sinon tu charges tous tes enregistrements dans un tableau à deux dimensions puis tu le tries en descending , ensuite t affiches les 50 premieres lignes.

    a toi de trouver un systeme pour epurer ton fichier


  6. #6
    Membre confirmé Avatar de Squalthor
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Juillet 2006
    Messages : 178
    Par défaut
    Merci pour ces conseils, pour le moment je suis trop claqué pour y réflechir je vois

    Je vais passer une bonne nuit reposante et visualiserais demain la situation, en prenant en compte vos conseils et serait plus apte à englober tout celà.

    Je vous remercie et vous souhaite une bonne soirée, pour un suivi du sujet et pour ceux qui aimerais savoir qu'elle direction j'ai pris je metterais à jour ce sujet selon les diverses étapes que je pourrais rencontrer.

    Bien sûr si elles ne sortent pas du cadre du sujet.

  7. #7
    Membre confirmé Avatar de Squalthor
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Juillet 2006
    Messages : 178
    Par défaut
    Bon et bien voilà...

    J'ai honte de moi car en recherchant de quoi résolure mon problème j'ai trouvé une solution toute prête et qui apparement conviendrais tout à fais ce que je cherchais...

    Je suis content car c'est un gain de temps, temps qui m'est actuellement très précieux, mais mécontent car ce n'est pas la meileure manière d'apprendre.

    Enfin bon, comme promit je poste la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $fcontents = file( 'fic_text");
    $i = sizeof($fcontents)-5;
    while ($fcontents[$i]!="")
    	{
    	$aff .= $fcontents[$i];
    	$i++;
    	}
    Je vous remercie pour votre aide.

  8. #8
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut, ca résoud pas ton problème d'optimisation car tu mets tout le fichier en mémoire dans un array ^^.

  9. #9
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Pour un fichier de 10000 lignes cela prend 10 fois plus de temps que le parcours du fichier en ne mettant que les lignes en mémoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function readLines($file, $lines)	{
    	$handle = fopen($file, "r"); // ouvre le fichier
    	$pos = 0; // position du curseur dans le fichier
    	$output = ""; // sortie de la fonction
    	$status = 0; // statut du curseur dans le fichier
    	for($nbLines = 0; $nbLines < $lines && $status !== -1; $nbLines++)	{
    		$char = "";
    		while($char != "\n" && (($status = fseek($handle, $pos--, SEEK_END)) !== -1)) {
    			$char = fgetc($handle); // ici tu récupères les carcactère 1 par 1 tant que le car en cours est différent d'un saut de ligne
    		}
    		$output[] = fgets($handle); // Ici tu mets toute la ligne courante dans le tableau de retour de la fonction
    	}
    	fclose($handle);
    	return array_reverse($output); // ici t'inverses les lignes dans le tableau 
    }
    Bye

  10. #10
    Membre confirmé Avatar de Squalthor
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Juillet 2006
    Messages : 178
    Par défaut
    Bonjour Djakisback,

    Je n'avais pas du tout comprend le script ainsi, je pensais qu'il ne se contentait que de mettre les dernières lignes en mémoire...

    En y regardant de plus prêtje pense avoir compris qu'il crée deux array, en en créant un avec les lignes à exclure et un avec les dernières lignes désirées, je me trompe ?

    Comme je débute ll est possible que je ne comprenne pas et je m'en excuse.
    Je te remercie pour ton code, je vais l'analyser afin de bien le comprendre avant de l'utiliser.

  11. #11
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    En fait non, il crée un array avec toutes les lignes du fichier et un string avec le contenu concaténé des lignes désirées.

  12. #12
    Membre confirmé Avatar de Squalthor
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Juillet 2006
    Messages : 178
    Par défaut
    Ah d'accord, bon et bien je suis loin d'être au point...

    Je ne dois pas avoir le niveau pour réaliser un tel script vu que je ne suis même pas capable de le comprendre...

    Mais je vais travailler encore plus dur !

    Mon projet est à but lucratif (c'est pour un "client"), puis-je quand même utiliser ton script, modifié, pour le chat de ce projet s'il te plait ?

    Quoi qu'il en soit je te remercie.

  13. #13
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Oui, pas de problème, de toute façon je me suis fortement inspiré de la page que je t'ai donnée

  14. #14
    Membre confirmé Avatar de Squalthor
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Juillet 2006
    Messages : 178
    Par défaut
    Et bien encore une fois je t'en remercie

    Je vais devoir l'adapter à ma fonction, qui utilise XajaX, ça me permettras de travailler dessus afin de me familliariser.

    Bon et bien je vais de ce pas continuer ce chat et espère pouvoir un jour te rendre la pareille, même si ça risque d'être dans très très longtemps...

    Bon courage à toi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/02/2008, 12h40
  2. Réponses: 3
    Dernier message: 11/02/2008, 12h40
  3. copier les resultats d'une requete sql dans un fichier texte
    Par mohammed_amine_wardy dans le forum SQL
    Réponses: 1
    Dernier message: 02/01/2008, 16h23
  4. [PL/SQL] Curseur et fichier
    Par salim_kwada dans le forum Oracle
    Réponses: 6
    Dernier message: 30/08/2006, 10h33
  5. Transposer des données sql dans un fichier texte
    Par Anakior dans le forum Outils
    Réponses: 3
    Dernier message: 11/12/2005, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo