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>');
    }       
}

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top