Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
逐行读取文本文件php-未检测到换行符_Php_Newline_Text Editor - Fatal编程技术网

逐行读取文本文件php-未检测到换行符

逐行读取文本文件php-未检测到换行符,php,newline,text-editor,Php,Newline,Text Editor,我编写了一个php函数,它将获取一个文本文件,并将每一行列为表中自己的行 问题是经典的“在我的机器上运行良好”,但当然,当我要求其他人生成我要查找的.txt文件时,它会将整个文件作为一行继续读取。当我在我的文本编辑器中打开它时,它看起来就像我期望的那样,每一行上都有一个新的名称,但是它是换行符或者其他一些东西 到目前为止,我已经得出结论,这可能与他们在Mac系统上使用的任何文本编辑器有关 这有意义吗?有没有简单的方法可以检测文本编辑器识别为新行的字符,并用php可以识别的标准行替换它 更新:添加

我编写了一个php函数,它将获取一个文本文件,并将每一行列为表中自己的行

问题是经典的“在我的机器上运行良好”,但当然,当我要求其他人生成我要查找的.txt文件时,它会将整个文件作为一行继续读取。当我在我的文本编辑器中打开它时,它看起来就像我期望的那样,每一行上都有一个新的名称,但是它是换行符或者其他一些东西

到目前为止,我已经得出结论,这可能与他们在Mac系统上使用的任何文本编辑器有关

这有意义吗?有没有简单的方法可以检测文本编辑器识别为新行的字符,并用php可以识别的标准行替换它

更新:添加以下行解决了问题

ini_set('auto_detect_line_endings',true);
功能:

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>');
    }       
}
函数displaytxlist($fileName){
如果(文件_存在($fileName)){
$file=fopen($fileName,'r');
而(!feof($file)){
$name=fgets($file);
echo(“.$name.”);
}
fclose($文件);
}否则{
回声(‘占位符’);
}       
}

这不适合你吗

来自以下手册页:

注意:如果PHP在读取Macintosh计算机上或由Macintosh计算机创建的文件时无法正确识别行尾,启用运行时配置选项可能有助于解决此问题

还有,你试过这个功能吗?它返回一个数组;数组中的每个元素对应于文件中的一行


编辑:如果您没有访问php.ini的权限,您使用的是什么web服务器?在Apache中,可以使用更改PHP设置。还有一个函数允许在运行时更改设置。

这是换行符问题的一个典型案例

ASCII定义了几个不同的“换行”字符。我们关心的两个具体的参数是ASCII 10(换行符,LF)和13(回车符,CR)

所有基于Unix的系统,包括OSX、Linux等,都将使用LF作为换行符。Mac OS Classic使用CR只是为了与众不同,Windows使用CR LF(没错,两个字符代表换行符-看看为什么没有人喜欢Windows?只是开玩笑)作为换行符

因此,Mac电脑上的文本文件(假设是现代操作系统)都会以LF作为行尾。如果您试图在Windows上读取它们,而Windows需要CR LF,它将找不到。现在,PHP能够为您解决这个问题,但如果您愿意,这里有一个占用内存的解决方案:

$file = file_get_contents("filename");
$array = split("/\012\015?/", $file); # won't work for Mac Classic
当然,你也可以用
file()
()做同样的事情。

有什么问题吗

foreach(文件($fileName)作为$name){
echo(“.$name.”);
}

Mac,请不要Mac。它默认为off,所以他可能不知道。如果您无法访问php.ini文件,该怎么办?我不确定我是否能够修改它(我将同时研究它),只需使用ini_set在运行时设置此选项谢谢大家,我对php比较陌生,不知道ini_set函数。我从来不知道有这样的设置,总是使用fgets开箱即用,为我工作。感谢您在不添加ini_集的情况下指出它(“自动检测线结束”,正确);这似乎无助于解决问题。还应注意,
file()
将整个文件读取到数组中,或者更具体地说,读取到内存中。这种解决方案虽然确实有效,但在处理大文件时是不明智的。
foreach (file($fileName) as $name) {
    echo('<tr><td align="center">'.$name.'</td></tr>');
}