我正在编写一个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_
_
_
如何让这个函数按照我想要的方式添加数字,没有空格?
答案 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)
你提供的代码没有任何问题,所以它必须是$ 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
在末尾插入额外的换行符