Aller au contenu

Lecture fichier texte en PHP


lupucide

Sujets conseillés

Encore un petit problème avec PHP :P

Un petit exemple vaut mieux qu'un long discours... http://hardcodefr.free.fr/source/

On rentre du PHP, il est enregistré dans un fichier texte et ensuite doit être affiché grâce à fopen + highlight_string. Le hic c'est que j'ai juste une ligne qui s'affiche et je ne trouve pas la méthode pour parcourir le fichier.

Actuellement j'utilise ça (donc pas valable) :

if (isset($_GET['code'])) {
$file = $_GET['code'];
$fp = fopen($file.'.txt', 'r');
$str = fgets($fp, 255);
fclose ($fp);
echo highlight_string($str, true);
}

J'ai parcouru le Hub et PHP.net mais je n'ai rien trouvé de préçis.

Une petite idée ?

<edit>

Je préçise que je n'ai pas droit à highlight_file chez Free.

</edit>

Modifié par lupucide
Lien vers le commentaire
Partager sur d’autres sites

if (isset($_GET['code'])) {
$file = $_GET['code'];
$fp = fopen($file.'.txt', 'r');
$str = fgets($fp, 255);
fclose ($fp);
echo highlight_string($str, true);
}

Bonjour,

En fait, le problème est que tu ne parcours ton fichier que sur une seule ligne. Il manque la ligne qui dit :

"Tant que l'on n'est pas à la fin du fichier".

En php, ca se traduit ainsi :

while (! feof($fp)){

// fgets..

}

(ensuite, une simple opération de 'concaténation' de la chaine $str, et le tour est joué ;) )

Ca donnerait :

if (isset($_GET['code'])) {
$file = $_GET['code'];
$fp = fopen($file.'.txt', 'r');
$str="";
while (!feof($fp)){
$str .= fgets($fp, 255);
}
fclose ($fp);
echo highlight_string($str, true);
}

Anonymus.

Lien vers le commentaire
Partager sur d’autres sites

Arf, j'avais regardé sur cet excellent site sans voir ça.

Je test ce soir et redonnerais des nouvelles.

Merci.

<edit>

Merci aussi, Anonymus. Je vais voir tout ça après le boulot :)

</edit>

Modifié par lupucide
Lien vers le commentaire
Partager sur d’autres sites

Re,

La solution de Anonymus est meilleur si tu veux traiter les lignes une à une ce qui me parait le mieux d'ailleurs :)

Sinon, utilises la fonction fread() pour prendre en entier ton fichier sans avoir à le parcourir :)

A bientot

Portekoi

Lien vers le commentaire
Partager sur d’autres sites

L'astuce donnée par le site est juste, dans le sens où elle marche.

Mais elle est fausse dans le sens où elle le fait mal. On ne lit pas un fichier comme ca.

De plus, elle est lourde, dans le sens où elle 'complexifie' considérablement la lecture du fichier.

Imaginez un fichier de 3 gigas. On l'ouvre, on le lit "entièrement", et on l'éclate (autrement dit, on sépare toutes les lignes, pour faire d'un seul fichier, un tableau). Ensuite ? On se retrouve avec un tableau à gérer là où l'on avait un seul fichier, et on 're-lit' ce tableau. On lit donc ce tableau, et à chaque ligne (si c'est un fichier de 3 gigas, ca fait beaucoup.. ), à chaque ligne on fais un test.. :( Test qui ne réussira qu'une seule fois, en plus, et à la fin exclusivement.

Je passe sur le fait qu'on ne ferme pas le fichier (fclose), on n'est plus à ca près.

Pour apprendre les différentes fonctions, c'est bien, mais pour apprendre à programmer, il y a mieux.

Anonymus.

Lien vers le commentaire
Partager sur d’autres sites

Non, pas du code, mais des logs par exemple. Pour un grand site ca fait pas forcément beaucoup de "jours".

Le code sera sensé lire les 3 G de logs, et ca risque de lui prendre pas mal de temps.

Lien vers le commentaire
Partager sur d’autres sites

Dash => ah ouais, j'ai dû passer à côté lors de ma recherche :blush:

Merci à vous tous, maintenant tout est nickel.

Mes reste plus qu'à rendre tout ça valide (pas gagné, là).

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...