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()函数的手册.
祝好运.
您可以使用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)
好吧,我们来看看 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?>\nRun Code Online (Sandbox Code Playgroud)\n\n现在粘贴此代码并将其另存为 php 文件,将其上传到要删除文件的文件夹。你可以在这段php代码的开头看到
\n\n$days = 1;\nRun Code Online (Sandbox Code Playgroud)\n\n设置天数,例如,如果将其设置为 2,则超过 2 天的文件将被删除。基本上,这是当您运行脚本、获取当前目录并读取文件条目、跳过 \xe2\x80\x98.\xe2\x80\x99 当前目录并进一步检查是否有任何其他目录时发生的情况,
\n\nif ( $file == \'.\' || $file == \'..\' || is_dir($dir.\'/\'.$file) ) {\n continue;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如果文件条目不是目录,则它将获取文件修改时间(上次修改时间)并进行比较,如果它是旧的天数
\n\nif ((time() - filemtime($dir.\'/\'.$file)) > ($days *86400)) {\n $nofiles++;\n unlink($dir.\'/\'.$file);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如果条件成立,那么它将在 unlink() php 函数的帮助下删除该文件。最后关闭目录并退出。我还添加了一个计数器来计算正在删除的文件数量,该计数器将在删除过程结束时显示。所以将php文件放在需要删除文件的目录下并执行。
\n\n希望这有帮助:)
\n