Lê linha arquivo de texto por linha de php - nova linha não sendo detectado
-
03-07-2019 - |
Pergunta
Eu tenho uma função php eu escrevi que terá um arquivo de texto e lista de cada linha como a sua própria linha em uma tabela.
O problema é o clássico "funciona bem na minha máquina", mas é claro que quando eu peço alguém para gerar o arquivo .txt que estou procurando, ele continua a leitura em todo o arquivo como uma linha. Quando eu abri-lo no meu editor de texto, parece apenas como a forma como eu esperaria que com um novo nome em cada linha, mas seu o caractere de nova linha ou algo jogá-lo fora.
Até agora, tenho chegado à conclusão de que poderia ter algo a ver com tudo o editor de texto que eles estão usando em seu sistema Mac.
Isso faz sentido? e há alguma maneira fácil para apenas detectar esse personagem que o editor de texto está reconhecendo como uma nova linha e substituí-lo por um padrão que php vai reconhecer?
UPDATE: Adicionando a seguinte linha de resolvido o problema
.ini_set('auto_detect_line_endings',true);
Função:
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>');
}
}
Solução
Isto não funciona para você?
http: // us2. php.net/manual/en/filesystem.configuration.php#ini.auto-detect-line-endings
Outras dicas
O que há de errado com file()
?
foreach (file($fileName) as $name) {
echo('<tr><td align="center">'.$name.'</td></tr>');
}
A partir da página homem de fgets :
Nota: Se PHP não está apropriadamente reconhecendo o final de linha quando lendo arquivos ou criando por um computador Macintosh, permitindo que o auto_detect_line_endings opção de configuração de tempo de execução pode ajudar a resolver o problema.
Além disso, você já tentou o href="http://php.net/manual/en/function.file.php" rel="noreferrer"> função
Editar: se você não tem acesso ao php.ini, o servidor web você está usando? Em Apache, você pode alterar as configurações PHP usando um .htaccess arquivo . Há também a ini_set função que permite a alteração das configurações em tempo de execução.
Este é um caso clássico do problema de nova linha.
ASCII define vários personagens diferentes "nova linha". Os dois mais específicos que preocupam são ASCII 10 (avanço de linha, LF) e 13 (retorno de carro, CR).
sistemas baseados em Unix Todos, incluindo OS X, Linux, etc. usará LF como uma nova linha. Mac OS Classic usado CR apenas para ser diferente, e Windows usa CR LF. (Isso mesmo, dois personagens para uma nova linha -? Ver por que ninguém gosta do Windows apenas brincando) como uma nova linha
Assim, arquivos de texto de alguém em um Mac (assumindo que é um sistema operacional moderno) todos teriam LF como sua linha final. Se você está tentando lê-los no Windows e Windows espera CR LF, não vai encontrá-lo. Agora, tem já foi mencionado que o PHP tem a capacidade de organizar a bagunça para você, mas se você preferir, aqui está uma solução-hogging memória:
$file = file_get_contents("filename");
$array = split("/\012\015?/", $file); # won't work for Mac Classic
Claro, você pode fazer a mesma coisa com file()
( como já foi mencionado).