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