x次后自动删除所有文件

jon*_*nes 8 php file delete-file

如何在x-time之后自动删除子目录下的所有文件(比如24小时后) - 不使用来自服务器或pl的cronjob命令.你怎么能只使用PHP代码或只是访问页面而不点击某些内容并且命令自动运行.

Ale*_*lex 15

我的第一个回答对最后评论的回复.我打算编写代码示例,所以我创建了另一个答案,而不是再添加一个注释.

要删除具有自定义扩展名的文件,您必须实现代码:

<?php
  $path = dirname(__FILE__).'/files';
  if ($handle = opendir($path)) {

    while (false !== ($file = readdir($handle))) {
        if ((time()-filectime($path.'/'.$file)) < 86400) {  // 86400 = 60*60*24
          if (preg_match('/\.txt$/i', $file)) {
            unlink($path.'/'.$file);
          }
        }
    }
  }
?>
Run Code Online (Sandbox Code Playgroud)

注释:1.此示例使用正则表达式/\.txt$/i,这意味着只txt删除具有扩展名的文件.'$'符号表示该文件名必须以字符串'.txt'结尾.标志'i'表示,该比较将不区分大小写.有关preg_match()函数的更多信息.

此外,您可以使用strripos()函数搜索具有特定扩展名的文件.这是代码片段:

<?php
  $path = dirname(__FILE__).'/files';
  if ($handle = opendir($path)) {

    while (false !== ($file = readdir($handle))) {
        if ((time()-filectime($path.'/'.$file)) < 86400) {  // 86400 = 60*60*24
          if (strripos($file, '.txt') !== false) {
            unlink($path.'/'.$file);
          }
        }
    }
  }
?>
Run Code Online (Sandbox Code Playgroud)

评论:这个例子似乎更明显.结果strripos()也可以通过两个函数的组合来实现:strrpos(strtolower($file), '.txt')但是,恕我直言,在代码中使用较少的函数使其更具可读性和更小是一个很好的规则.请仔细阅读strripos()函数页面上的警告(返回值块).

另一个重要的通知:如果您使用的是UNIX系统,由于文件权限,文件删除可能会失败.您可以查看有关chmod()函数的手册.

祝好运.

  • 而不是readdir + preg_match为什么不简单地使用glob()? (2认同)

Ale*_*lex 8

您可以使用PHP核心函数filectime()unlink()来检查文件创建时间并删除其文件/文件.

编辑. 代码示例:

  if ($handle = opendir('/path/to/files')) {

    while (false !== ($file = readdir($handle))) {
        if (filectime($file)< (time()-86400)) {  // 86400 = 60*60*24
          unlink($file);
        }
    }
  }
Run Code Online (Sandbox Code Playgroud)


Ray*_*ond 5

好吧,我们来看看 PHP 脚本,它删除 X 天前的文件。

\n\n
<?\n$days = 1;\n$dir = dirname ( __FILE__ );\n\n$nofiles = 0;\n\n    if ($handle = opendir($dir)) {\n    while (( $file = readdir($handle)) !== false ) {\n        if ( $file == \'.\' || $file == \'..\' || is_dir($dir.\'/\'.$file) ) {\n            continue;\n        }\n\n        if ((time() - filemtime($dir.\'/\'.$file)) > ($days *86400)) {\n            $nofiles++;\n            unlink($dir.\'/\'.$file);\n        }\n    }\n    closedir($handle);\n    echo "Total files deleted: $nofiles \\n";\n}\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在粘贴此代码并将其另存为 php 文件,将其上传到要删除文件的文件夹。你可以在这段php代码的开头看到

\n\n
$days = 1;\n
Run Code Online (Sandbox Code Playgroud)\n\n

设置天数,例如,如果将其设置为 2,则超过 2 天的文件将被删除。基本上,这是当您运行脚本、获取当前目录并读取文件条目、跳过 \xe2\x80\x98.\xe2\x80\x99 当前目录并进一步检查是否有任何其他目录时发生的情况,

\n\n
if ( $file == \'.\' || $file == \'..\' || is_dir($dir.\'/\'.$file) ) {\n           continue;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果文件条目不是目录,则它将获取文件修改时间(上次修改时间)并进行比较,如果它是旧的天数

\n\n
if ((time() - filemtime($dir.\'/\'.$file)) > ($days *86400)) {\n            $nofiles++;\n            unlink($dir.\'/\'.$file);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果条件成立,那么它将在 unlink() php 函数的帮助下删除该文件。最后关闭目录并退出。我还添加了一个计数器来计算正在删除的文件数量,该计数器将在删除过程结束时显示。所以将php文件放在需要删除文件的目录下并执行。

\n\n

希望这有帮助:)

\n