例如,我有一个名为“Temp”的文件夹,我想使用PHP删除或刷新该文件夹中的所有文件。我可以这样做吗?
当前回答
假设你有一个有很多文件的文件夹,读取它们,然后在两步删除不是执行。 我相信删除文件最有效的方法就是使用系统命令。
例如,在linux上我使用:
exec('rm -f '. $absolutePathToFolder .'*');
如果你想要递归删除而不需要写递归函数
exec('rm -f -r '. $absolutePathToFolder .'*');
PHP支持的任何操作系统都可以使用相同的命令。 请记住,这是一种删除文件的执行方式。$absolutePathToFolder必须检查和安全运行此代码和权限必须被授予。
其他回答
$files = glob('path/to/temp/*'); // get all file names
foreach($files as $file){ // iterate files
if(is_file($file)) {
unlink($file); // delete file
}
}
如果你想删除像.htaccess这样的“隐藏”文件,你必须使用
$files = glob('path/to/temp/{,.}*', GLOB_BRACE);
如果你想删除文件夹中的所有内容(包括子文件夹),请使用array_map, unlink和glob的组合:
array_map( 'unlink', array_filter((array) glob("path/to/temp/*") ) );
这个调用还可以处理空目录(感谢您的提示,@mojuba!)
public static function recursiveDelete($dir)
{
foreach (new \DirectoryIterator($dir) as $fileInfo) {
if (!$fileInfo->isDot()) {
if ($fileInfo->isDir()) {
recursiveDelete($fileInfo->getPathname());
} else {
unlink($fileInfo->getPathname());
}
}
}
rmdir($dir);
}
我更新了@Stichoza的答案,通过子文件夹删除文件。
function glob_recursive($pattern, $flags = 0) {
$fileList = glob($pattern, $flags);
foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
$subPattern = $dir.'/'.basename($pattern);
$subFileList = glob_recursive($subPattern, $flags);
$fileList = array_merge($fileList, $subFileList);
}
return $fileList;
}
function glob_recursive_unlink($pattern, $flags = 0) {
array_map('unlink', glob_recursive($pattern, $flags));
}
这是一个简单的方法和很好的解决方案。试试这段代码。
array_map('unlink', array_filter((array) array_merge(glob("folder_name/*"))));
推荐文章
- 如何将XML转换成PHP数组?
- 如何将对象转换为数组?
- 从IP地址获取位置
- 获取数组值的键名
- HTTPS和SSL3_GET_SERVER_CERTIFICATE:证书验证失败,CA is OK
- PHP -获取bool值,当为false时返回false
- 如何删除文件中的特定行?
- 在foreach中通过引用传递
- 如何触发命令行PHP脚本的XDebug分析器?
- 如何找出如果你使用HTTPS没有$_SERVER['HTTPS']
- 更好的方法检查变量为null或空字符串?
- 当使用Composer的开发/生产开关时,如何正确部署?
- 自动删除Laravel (Eloquent ORM)中的相关行
- 在取消设置元素后重新设置数组键
- 如何修剪空白的数组值在php