PHP:是否有一个命令可以删除文件的内容而不打开它?

时间:2010-04-01 21:04:32

标签: php

有没有办法删除php中的文件内容,我们有没有这样做的php命令,我知道unlink但是我不想删除文件而只是想删除该文件的内容。

我有一个文件,我在调用getCurrentDBSnap函数时传递,它从/home/test/incoming文件夹中获取文件并使用fputcsv将currentDB表状态填充到文件中并放回文件到/home/test/outgoing

当前文件保留在传入文件夹中,当我可以调用函数getCurrentDBSnap时,它将获取文件并覆盖最新的DB状态。

问:我的问题是,是否有可能而不是覆盖文件,我们可以在getCurrentDBSnap之后删除文件内容,以使传入文件夹中的文件始终为空?

希望有道理:)

6 个答案:

答案 0 :(得分:13)

尝试file_put_contents($filename, "");

unlink($filename);
touch($filename);

答案 1 :(得分:5)

ftruncate - 将文件截断为给定长度

实施例

$handle = fopen('/path/to/file', 'r+');
ftruncate($handle, 0);
fclose($handle);

但你必须打开文件。

答案 2 :(得分:2)

我不知道您是否已将内容写入文件,但如果您使用fopen并先清空文件,那么您基本上正在执行w模式正在执行的操作。< / p>

来自documentation

  

'w':仅限写作;将文件指针放在文件的开头,将文件截断为零长度。如果该文件不存在,请尝试创建它。

所以我真的认为没有必要先清空它,因为你可能会使用w模式。

如果您的代码依赖于此文件为空或者某种安全相关的事实,您应该只清空它。

答案 3 :(得分:0)

如果允许执行exec,也许这是工作原因..对于Linux上的ex:

<?
shell_exec("rm -rf " . $filename " && touch ".$filename);
?>

这将删除你的文件,然后再次创建它,所以它会“显示”你清空了内容,这只是我的头脑,不是应该使用的东西..或者如果使用linux和有权访问exec命令我使用awksed(更好)来清空文件

答案 4 :(得分:0)

如果不打开文件,则无法修改文件。最简单的方法是打开它并在打开它时截断它,在PHP中看起来像这样:

fclose(fopen($filename, "w+"));

如果您要调用unix shell(这是system()调用的那个),最简单的方法是将/ dev / null重定向到该文件,因此在PHP中将是:

system(">$filename </dev/null");

这种方法有更多的开销,但它可以推广并转换为任何有shell的语言或环境。在这个线程上还有其他答案让你调用system()到rm然后触摸来重新创建文件 - 除非是非原子的,这种方法也让我害怕得多。

答案 5 :(得分:0)

file_put_contents($file_name, "");

这是清除文件内容而不删除文件的最佳和最简单的选项。