Question

J'ai écrit une fonction php qui prend un fichier texte et liste chaque ligne comme sa propre ligne dans un tableau.

Le problème est que le classique "fonctionne bien sur ma machine", mais bien sûr, lorsque je demande à quelqu'un d'autre de générer le fichier .txt que je recherche, il continue à le lire dans son intégralité sur une ligne. Lorsque je l'ouvre dans mon éditeur de texte, cela ressemble exactement à ce à quoi je m'attendrais avec un nouveau nom sur chaque ligne, mais c'est le caractère de nouvelle ligne ou quelque chose qui l'a jeté.

Jusqu'à présent, je suis arrivé à la conclusion que cela pourrait avoir quelque chose à voir avec l'éditeur de texte qu'ils utilisent sur leur système Mac.

Est-ce que cela a du sens? et y at-il un moyen simple de simplement détecter ce caractère que l’éditeur de texte reconnaît comme une nouvelle ligne et de le remplacer par un standard que php reconnaîtra?

UPDATE: l'ajout de la ligne suivante a résolu le problème.

ini_set('auto_detect_line_endings',true);

Fonction:

function displayTXTList($fileName) {
    if(file_exists($fileName)) {
        $file = fopen($fileName,'r');
        while(!feof($file)) { 
            $name = fgets($file);
            echo('<tr><td align="center">'.$name.'</td></tr>');
        }
        fclose($file);
    } else {
        echo('<tr><td align="center">placeholder</td></tr>');
    }       
}
Était-ce utile?

Autres conseils

Qu'est-ce qui ne va pas avec le fichier () ? ?

foreach (file($fileName) as $name) {
    echo('<tr><td align="center">'.$name.'</td></tr>');
}

À partir de la page de manuel de fgets :

  

Remarque: si PHP ne reconnaît pas correctement les fins de ligne lors de la lecture de fichiers sur ou créés par un ordinateur Macintosh, activez l'option auto_detect_line_endings L'option de configuration au moment de l'exécution peut aider à résoudre le problème.

Aussi, avez-vous essayé la fonction file ? Il retourne un tableau. chaque élément du tableau correspond à une ligne du fichier.

Edit: si vous n'avez pas accès au fichier php.ini, quel serveur web utilisez-vous? Dans Apache, vous pouvez modifier les paramètres PHP à l'aide de un fichier .htaccess . Il existe également la fonction ini_set qui permet de modifier les paramètres à l'exécution.

C’est un cas classique du problème de nouvelle ligne.

ASCII définit plusieurs "& nouvelles; nouvelles lignes". personnages. Les deux qui nous intéressent sont ASCII 10 (saut de ligne, LF) et 13 (retour chariot, CR).

Tous les systèmes Unix, y compris OS X, Linux, etc. utiliseront LF comme nouvelle ligne. Mac OS Classic a utilisé CR uniquement pour être différent, et Windows utilise CR LF (c'est vrai, deux caractères pour une nouvelle ligne. Vous voyez donc pourquoi personne n'aime Windows, c'est une nouvelle ligne.

Ainsi, les fichiers texte de quelqu'un sur un Mac (en supposant qu'il s'agisse d'un système d'exploitation moderne) auraient tous une fin de ligne LF. Si vous essayez de les lire sous Windows et que Windows attend CR LF, il ne le trouvera pas. il l'a Nous avons déjà mentionné que PHP a la possibilité de résoudre ce problème, mais si vous préférez, voici une solution monopolisée par la mémoire:

$file = file_get_contents("filename");
$array = split("/\012\015?/", $file); # won't work for Mac Classic

Bien sûr, vous pouvez faire la même chose avec file () ( comme cela a déjà été mentionné ).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top