私は持っている:
<?php
$file=fopen(date("Y-m-d").".txt","r+") or exit("Unable to open file!");
if ($_POST["lastname"] <> "")
{
fwrite($file,$_POST["lastname"]."\n");
}
fclose($file);
?>
ただし、ファイルの先頭を上書きします。どうすれば挿入できますか?
私はあなたの質問に完全には確信が持てません.データを書き込んで既存のファイルの先頭を上書きしたくないですか、それとも既存のファイルの先頭に新しいデータを書き込んで、その後の既存のコンテンツを保持したいですか?
ファイルの先頭を上書きせずにテキストを挿入するには、 (a+
ではなくr+
)追加用にファイルを開く必要があります。
$file=fopen(date("Y-m-d").".txt","a+") or exit("Unable to open file!");
if ($_POST["lastname"] <> "")
{
fwrite($file,$_POST["lastname"]."\n");
}
fclose($file);
ファイルの先頭に書き込もうとしている場合は、最初にファイルの内容 (「 」を参照file_get_contents
) を読み込んでから、新しい文字列に続いてファイルの内容を出力ファイルに書き込む必要があります。
$old_content = file_get_contents($file);
fwrite($file, $new_content."\n".$old_content);
上記のアプローチは小さなファイルで機能しますが、file_get_conents
. この場合、rewind($file)
ハンドルのファイル位置インジケータをファイル ストリームの先頭に設定する の使用を検討してください。を使用するときは、 (または) オプションrewind()
を指定してファイルを開かないでください。a
a+
ファイルを追加 (「a」または「a+」) モードで開いた場合、ファイルの位置に関係なく、ファイルに書き込むデータは常に追加されます。
上書きせずにファイルストリームの途中に挿入し、すべてを変数/メモリにロードする必要がない実際の例:
function finsert($handle, $string, $bufferSize = 16384) {
$insertionPoint = ftell($handle);
// Create a temp file to stream into
$tempPath = tempnam(sys_get_temp_dir(), "file-chainer");
$lastPartHandle = fopen($tempPath, "w+");
// Read in everything from the insertion point and forward
while (!feof($handle)) {
fwrite($lastPartHandle, fread($handle, $bufferSize), $bufferSize);
}
// Rewind to the insertion point
fseek($handle, $insertionPoint);
// Rewind the temporary stream
rewind($lastPartHandle);
// Write back everything starting with the string to insert
fwrite($handle, $string);
while (!feof($lastPartHandle)) {
fwrite($handle, fread($lastPartHandle, $bufferSize), $bufferSize);
}
// Close the last part handle and delete it
fclose($lastPartHandle);
unlink($tempPath);
// Re-set pointer
fseek($handle, $insertionPoint + strlen($string));
}
$handle = fopen("file.txt", "w+");
fwrite($handle, "foobar");
rewind($handle);
finsert($handle, "baz");
// File stream is now: bazfoobar
ファイルの先頭にテキストを配置する場合は、最初に次のようにファイルの内容を読み取る必要があります。
<?php
$file=fopen(date("Y-m-d").".txt","r+") or exit("Unable to open file!");
if ($_POST["lastname"] <> "")
{
$existingText = file_get_contents($file);
fwrite($file, $existingText . $_POST["lastname"]."\n");
}
fclose($file);
?>
追加するためにファイルを開くのと同じ結果が得られます
<?php
$file=fopen(date("Y-m-d").".txt","a+") or exit("Unable to open file!");
if ($_POST["lastname"] <> "")
{
fwrite($file,$_POST["lastname"]."\n");
}
fclose($file);
?>