web-dev-qa-db-ja.com

file_put_contents、file_append、および改行

テキストファイルに数値を追加するPHPスクリプトを作成しています。次のように、すべての行に1つの数値が必要です。

_1
5
8
12
_

file_put_contents($filename, $commentnumber, FILE_APPEND)を使用すると、結果は次のようになります。

_15812
_

file_put_contents($filename, $commentnumber . "\n", FILE_APPEND)のような改行を追加すると、各番号の後にスペースが追加され、最後に1つの空行が追加されます(下線はスペースを表します)。

_1_
5_
8_
12_
_
_
_

必要な方法でスペースなしで数字を追加する関数を取得するにはどうすればよいですか?

32
user426965

PHP EOL定数で試しましたか?


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

---追加---

私のファイルエディターは同じことを知っていますが、心配しないで、エディターがそこに置いて改行があることを知らせるゴーストキャラクターですあなたはこれを試すことができます

最後の番号の後のEOLを含むファイルは次のようになります。
 1 _ 
 2 _ 
 3 _ 
 EOF 
 
しかし、最後の文字がないファイルは、
 
 1 _ 
 2 _ 
 3 
 EOF 
 
 where _スペース文字を意味します

Phpを使用してファイルの内容を解析して、中身を確認することができます


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

...トリッキー

55
eridal

ポールの答えには正しいアプローチがありますが、彼には間違いがあります。必要なものは次のとおりです。

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

pHP_EOL定数は、mac、windows、unixシステムで右端の行を使用することを確認します。trim関数は、文字列の両側の改行または空白を削除します。整数への変換は大きな間違いです。1。空白や特殊文字(どこから来た場合でも)が原因でゼロになることがあります。2. idは必ずしも整数である必要はありません。

15
The Surrican

ああ、みんな!ただ使う

\ r\n

\ nの代わりに

11
M_R_K

迷惑な登録、あなたが持っているものは絶対に大丈夫です。 PHP_EOLと "\ n"はまったく同じです。

あなたが提供したコードには何も問題はありませんので、最後にスペースがある$ commentnumberの値でなければなりません。前述のように、 trim ()関数を使用して$ commentnumberを実行します。

file_put_contents($filename, trim($commentnumber . "\n"), FILE_APPEND);

幸運を。

1
Paul Dragoonis

あなたのコードと応答を読んだ後、私は理論を思いつきました...

コードに何か問題があることはわかりませんが、どのようにしてファイルを開いて読みましたか?実際にテキストエディターで開きましたか? PHPスクリプトを使用して実行しましたか?その場合、ファイルをテキストエディターで開き、実際にスペースがあることを確認します各行の終わりです。実際に...がある場合は、この回答の残りの部分を無視してください。

たとえば、次のようなものを使用する場合:

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

file()が機能する方法のため、行の最後には常に空白があります。 _$line_に空白がないことを確認してください-newline characterなど-終わり。
HTMLはすべての空白(スペース、タブ、newlinesなど)を処理するため、_$line_の末尾に空白がある場合、それらはHTML出力ではスペースとして表示されます。

解決策:rtrim($line)を使用して、行末の空白を削除します。次のコードを使用します。

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

最初の例と同じ問題は発生せず、行末のスペースはすべてなくなります。

0
Frxstrem

_$commentnumber_に最初のスペースが既に含まれていない限り、提供したコードにはこれらのスペースを生成するものはありません。その場合は、代わりにtrim($commentnumber)を使用してください。

_$commentnumber_が空の文字列になり得る場合を除き、ファイルの下部の空行を説明するコードには何もありません。その場合、代わりに数値_0_を出力する場合は、intval($commentnumber)を使用します。

もちろん、これらの2つのうち1つだけが必要です。文字列のようなコンテンツを保持したい場合は、trim();を使用します。常に整数が必要な場合は、intval()を使用します。これにより、既に自動的にトリミングされます。

実際のコードで誤って_" \n"_の代わりに_"\n"_を書いた可能性もありますが、ここに投稿したコードでは正しいです。

0
Timwi