Leer en archivo de texto línea por línea php – no se detecta nueva línea

Tengo una función php que escribí que tomará un archivo de texto y mostrará cada línea como su propia fila en una tabla.

El problema es que el clásico “funciona bien en mi máquina”, pero por supuesto cuando le pido a otra persona que genere el archivo .txt que estoy buscando, sigue leyendo todo el archivo como 1 línea. Cuando lo abro en mi editor de texto, se ve igual que como lo esperaría con un nuevo nombre en cada línea, pero es el carácter de nueva línea o algo que lo descarta.

Hasta ahora he llegado a la conclusión de que podría tener algo que ver con cualquier editor de texto que estén usando en su sistema Mac.

¿Esto tiene sentido? y ¿hay alguna manera fácil de detectar este carácter que el editor de texto está reconociendo como una nueva línea y reemplazarlo por uno estándar que php reconocerá?

ACTUALIZACIÓN: Agregar la siguiente línea resolvió el problema.

ini_set('auto_detect_line_endings',true); 

Función:

 function displayTXTList($fileName) { if(file_exists($fileName)) { $file = fopen($fileName,'r'); while(!feof($file)) { $name = fgets($file); echo(''.$name.''); } fclose($file); } else { echo('placeholder'); } } 

¿Qué pasa con el file() ?

 foreach (file($fileName) as $name) { echo(''.$name.''); } 

Desde la página man de fgets :

Nota: Si PHP no reconoce adecuadamente los finales de línea al leer archivos creados o creados por una computadora Macintosh, habilitar la opción de configuración auto_detect_line_endings en tiempo de ejecución puede ayudar a resolver el problema.

Además, ¿has probado la función de archivo ? Devuelve una matriz; cada elemento en la matriz corresponde a una línea en el archivo.

Editar: si no tiene acceso a php.ini, ¿qué servidor web está usando? En Apache, puede cambiar la configuración de PHP utilizando un archivo .htaccess . También está la función ini_set que permite cambiar la configuración en tiempo de ejecución.

Este es un caso clásico del problema de la nueva línea.

ASCII define varios caracteres diferentes de “línea nueva”. Los dos específicos que nos interesan son ASCII 10 (alimentación de línea, LF) y 13 (retorno de carro, CR).

Todos los sistemas basados ​​en Unix, incluidos OS X, Linux, etc. usarán LF como una nueva línea. Mac OS Classic usó CR para ser diferente, y Windows usa CR LF (es correcto, dos caracteres para una nueva línea – vea por qué a nadie le gusta Windows, es una broma) como una nueva línea.

Por lo tanto, los archivos de texto de alguien en una Mac (suponiendo que sea un SO moderno) tendrían LF como final de línea. Si intenta leerlos en Windows, y Windows espera CR LF, no lo encontrará. Ahora, ya se ha mencionado que PHP tiene la capacidad de resolver este desastre para usted, pero si lo prefiere, aquí hay una solución de memoria:

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

Por supuesto, puede hacer lo mismo con file() ( como ya se ha mencionado ).