file_put_contents,file_append和换行符

时间:2010-08-21 06:10:25

标签: php line-breaks

我正在编写一个PHP脚本,将数字添加到文本文件中。我想在每一行都有一个数字,如下:

1
5
8
12

如果我使用file_put_contents($filename, $commentnumber, FILE_APPEND),结果如下:

15812

如果我添加像file_put_contents($filename, $commentnumber . "\n", FILE_APPEND)这样的换行符,则在每个数字后面添加空格,在末尾添加一个空行(下划线表示空格):

1_
5_
8_
12_
_
_

如何让这个函数按照我想要的方式添加数字,没有空格?

7 个答案:

答案 0 :(得分:53)

您是否尝试使用PHP EOL常量?


file_put_contents($filename, $commentnumber . PHP_EOL, FILE_APPEND)

---添加---

我只是意识到我的文件编辑器做了同样的事情,但是不要担心,只是一个幽灵角色,编辑放在那里表示有一个换行符 你可以试试这个

A file with EOL after the last number looks like:
1_
2_
3_
EOF

but a file without that last character looks like

1_
2_
3
EOF

where _ means a space character

您可以尝试使用php解析文件内容以查看内部的内容


$lines = explode( PHP_EOL, file_get_contents($file));
foreach($lines as $line ) {
    var_dump($line);
}

...棘手

答案 1 :(得分:15)

保罗答案有正确的方法,但他有一个错误。 您需要的是以下内容:

file_put_contents($filename, trim($commentnumber).PHP_EOL, FILE_APPEND);

PHP_EOL常量确保使用在mac,windows和unix系统上结束的右行 trim函数删除字符串两侧的任何换行符或空格。 转换为整数将是一个巨大的错误,因为 1.你可能最终得零,特别是因为白色空间或特殊字符(无论它们来自哪里......) 2. ids不一定需要是整数

答案 2 :(得分:10)

<呃伙计们!只需使用

<强> \ r \ n

而不是 \ n

答案 3 :(得分:1)

烦恼注册,你有什么绝对没问题。 PHP_EOL和“\ n”完全相同。

你提供的代码没有任何问题,所以它必须是$ commentnumber的值,它的末尾有一个空格。如上所述,通过trim()函数运行$ commentnumber。

file_put_contents($filename, trim($commentnumber . "\n"), FILE_APPEND);
祝你好运。

答案 4 :(得分:0)

除非$commentnumber已包含要开始的空格,否则您提供的代码中没有任何内容会生成这些空格。如果是这种情况,只需改为使用trim($commentnumber)

除非$commentnumber可以是空字符串,否则代码中也没有任何内容可以解释文件底部的空行。如果是这种情况,并且您希望它输出数字0,请使用intval($commentnumber)

当然,你只需要其中一个。如果您想保留类似字符串的内容,请使用trim();如果你总是想要整数,请使用intval(),它已经自动修剪它。

您可能无意中在实际代码中写了" \n"而不是"\n",但在此处发布的代码中,这是正确的。

答案 5 :(得分:0)

在阅读完您的代码和回复后,我提出了一个理论......

由于我无法看到您的代码有任何问题,您是如何打开并阅读该文件的?你真的在文本编辑器中打开它吗? 您是否使用PHP脚本执行此操作?如果是,请使用文本编辑器打开文件,并检查每行末尾是否有空格。如果确实存在......那么,请忽略此答案的其余部分。如果没有,请继续阅读。

例如,如果你使用这样的东西:

<?php
$lines = file($filename);
if($lines) // Error reading
  die();
foreach($lines as $line)
  echo $line."<br />";

然后,由于file()的工作方式,你总是会在行尾添加一个空格。 确保每个 $line 最后都没有空格 - 例如换行符
由于HTML处理所有空格 - 空格,制表符,换行符等 - 作为空格,如果$line末尾有空格,那么它们将在HTML输出中显示为空格。

解决方案:使用rtrim($line)删除行尾的空格。使用以下代码:

<?php
$lines = file($filename);
if($lines) // Error reading
  die();
foreach($lines as $line)
  echo rtrim($line)."<br />";

不会出现与第一个示例相同的问题,并且行尾的所有空格都将消失。

答案 6 :(得分:-1)

因为每次你写文件,文件都要完成,file_put_contents在末尾插入额外的换行符