Version complète: sur le forum Webmaster Hub : Lecture fichier texte en PHP
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net
lupucide
Encore un petit problème avec PHP tongue.gif

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) :
CODE
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>
Portekoi
Salut,

Regarde ici :
http://www.lephpfacile.com/tips/index.php?p=8

Reprends le code et au lieu de faire un echo, tu fais stock tout dans ta variables $str.

Ca devrait marcher si j'ai bien compris ton problème smile.gif

Bye

Portekoi
Anonymus
CODE
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é wink.gif )

Ca donnerait :
CODE
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.
lupucide
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 smile.gif
</edit>
Dash
Dans une precedente discussion sur le hub, diverses methodes ont deja ete presentees pour recuperer le contenu d'un fichier :
Savoir si fichier .txt est vide, et afficher un message en consequence

smile.gif
Portekoi
Re,

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

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

A bientot

Portekoi
Anonymus
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.. sad.gif 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.
Portekoi
En même temps, 3 Go de code, je veux bien mais ca me parait un peu trop.

Mais je suis d'accord avec toi.
Anonymus
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.
Portekoi
Ah oki. Dans ce cas, c'est vrai que c'est pas super smile.gif
lupucide
Dash => ah ouais, j'ai dû passer à côté lors de ma recherche blush.gif

Merci à vous tous, maintenant tout est nickel.
Mes reste plus qu'à rendre tout ça valide (pas gagné, là).
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.