gpt4 book ai didi

php - 仅使用 : fopen() and fclose()? 清除文件是否安全

转载 作者:行者123 更新时间:2023-12-04 10:29:54 24 4
gpt4 key购买 nike

我发现这个简单的函数可以简单地清除文件的内容:

function createEmptyFile($filename)
{
//
$fp = fopen($filename, 'w');
//
fclose($fp);
}

例如,重置日志或其他内容。

但是我有一个疑问,这个函数是否真的是100%安全的,即它的行为是唯一确定的,结果会如预期的那样。

我有一种奇怪的感觉,文件有可能没有被清理,或者可能被损坏,或者在某些情况下填充了随机数据。

我明白这也许都是偏见,但我想知道它到底有多正确。特别是,我对打开和关闭 handle 之间没有任何命令感到困惑。

例如,我假设如果PHP解释器会执行优化,那么由于缺少命令,在打开和关闭句柄之间,它可能会跳过这个块,或者类似的东西。

对不起,如果我徒劳地制造 panic 。

最佳答案

I am confused by the absence of any command between opening and closing the handle.



让我把一些东西放在前面:
左边的 '{' 和右边的 '}' 括号是流程控制,中间需要命令。 fopen()fclose()不是。尽管这些只是 2 个命令,但它们继承了更多命令。

也就是说,让我们看看他们的任务: fopen()做 ...
  • (a) 查找特定文件,
  • (b) 如果文件不存在,则创建文件
  • (c) 以只写方式打开文件,
  • (d) 将文件指针重定向到文件的开头,
  • (e) 如果文件长于零,则将其截断为零长度。

  • In particular, I am confused by the absence of any command between opening and closing the handle.



    您会看到中间有许多“命令”。所以别担心。

    I have a strange feeling that there is a possibility that the file: may not be cleaned



    确切地说,文件没有被清除,它被截断为零长度。此文件的早期数据仍在您的数据存储的内存中。但这取决于您的操作系统。存在完全删除这些数据块的程序。

    [...], or may be damaged



    我不明白这个问题。您将要删除一个文件 - 您预计会有什么更大的损害?

    [...], or filled with random data in some case.



    这是 C 风格的,通过设置指向空闲内存的指针来创建变量,但不清除先前在其中的数据并将此职责交给您。但在这里它只是一个截断而不是文件指针的重定向。这种恐惧可以忽略不计。

    But I have a question whether this function is really 100% safe, that is, its behavior is uniquely determined, and the result will be as expected.



    是的,通常行为是唯一确定的。但是你必须预料到一些副作用:
  • 如果文件不存在,它将被创建。您需要对该目录具有写访问权限。 (否则会返回 false)
  • 如果您没有对该文件的写访问权限,它将返回 false。
  • 如果您的 php 环境使用“安全模式”,所有者和用户的可能差异会导致 fopen() 失败。 .您需要确保该文件仅供您使用。

  • 有可能你只写 fopen()并且不要检查返回参数。这可能会导致问题并导致:如果您没有正确 react ,就不是 100% 安全。

    所以 - 是的 fopen()fclose()足够、正确并在工作未正确完成时通知您。

    关于php - 仅使用 : fopen() and fclose()? 清除文件是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60464283/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com