我发现了这个简单的功能,可以简单地清除文件内容:
function createEmptyFile($filename)
{
//
$fp = fopen($filename, 'w');
//
fclose($fp);
}
例如,重置日志或其他。
但是我有一个问题,这个功能是否真的100%安全,也就是说,它的行为是唯一确定的,其结果是否符合预期。
我感到奇怪的是,在某些情况下,文件:可能没有被清理,损坏或被随机数据填充。
我知道也许这都是偏见,但我想确切知道这是多么正确。特别是,我对打开和关闭手柄之间没有任何命令感到困惑。
例如,我假设如果PHP解释器将执行优化,则由于缺少命令,在打开和关闭句柄之间,它可能会跳过此块,或类似的事情。
抱歉,如果我徒然制造恐慌。
我对打开和关闭手柄之间没有任何命令感到困惑。
让我在前面放一些东西:左“ {”和右“}”括号是流控制,并且需要在两者之间使用命令。 fopen()
和fclose()
不是。尽管这些只是2条命令,但它们继承了更多命令。
那是让我们调查他们的任务:fopen()
是...
尤其是我对打开和关闭手柄之间没有任何命令感到困惑。
您会看到它们之间有许多“命令”。所以不用担心。
我有一种奇怪的感觉,认为该文件:可能无法清除
确切地说,不会清除文件,它会被截断为零长度。该文件的早期数据仍在数据存储的存储器中。但这取决于您的操作系统。有一些程序可以完全删除这些数据块。
[...],或可能已损坏
我不明白这个问题。您将要删除文件-您还会受到什么损害?
[...],或在某些情况下填充随机数据。
这是一种C样式,用于通过设置指向空闲内存的指针来创建变量,但不更早清除其中的数据并将此职责交给您。但这只是截断,而不是文件指针的重定向。这种恐惧可以忽略。
但是我有一个问题,这个功能是否真的100%安全,也就是说,它的行为是唯一确定的,其结果是否符合预期。
是,通常,行为是唯一确定的。但是您必须期待一些副作用:
fopen()
失败。您需要确保该文件仅由您自己使用。可能会发生,您只写fopen()
而不检查返回参数。这可能会导致问题并导致:如果您没有正确反应,则不是100%安全。
所以-是的fopen()
和fclose()
足够,请更正并通知您是否工作不正确。