如何使用PHP从目录中删除所有.txt文件
我正在尝试使用php脚本从目录中删除所有文本文件 这是我试过的如何使用PHP从目录中删除所有.txt文件,php,unlink,Php,Unlink,我正在尝试使用php脚本从目录中删除所有文本文件 这是我试过的 <?php array_map('unlink', glob("/paste/*.txt")); ?> 当我运行这个程序时,我没有收到错误,但是它不起作用 有没有这方面的片段?我不确定还可以尝试什么。您的实现可以正常运行您需要做的就是使用使用完整路径 范例 $fullPath = __DIR__ . "/test/" ; array_map('unlink', glob( "$fullPath*.log")) 您
<?php array_map('unlink', glob("/paste/*.txt")); ?>
当我运行这个程序时,我没有收到错误,但是它不起作用
有没有这方面的片段?我不确定还可以尝试什么。您的实现可以正常运行您需要做的就是使用
使用完整路径
范例
$fullPath = __DIR__ . "/test/" ;
array_map('unlink', glob( "$fullPath*.log"))
您可以修改下面的方法,但要小心。确保您有删除文件的权限。如果所有这些都失败了,发送一个exec命令并让linux来执行
static function getFiles($directory) {
$looper = new RecursiveDirectoryIterator($directory);
foreach (new RecursiveIteratorIterator($looper) as $filename => $cur) {
$ext = trim($cur->getExtension());
if($ext=="txt"){
// remove file:
}
}
return $out;
}
我对提交的答案进行了一点扩展,这样您就可以灵活地递归地取消位于下面的文本文件的链接,通常情况下就是这样
// @param string Target directory
// @param string Target file extension
// @return boolean True on success, False on failure
function unlink_recursive($dir_name, $ext) {
// Exit if there's no such directory
if (!file_exists($dir_name)) {
return false;
}
// Open the target directory
$dir_handle = dir($dir_name);
// Take entries in the directory one at a time
while (false !== ($entry = $dir_handle->read())) {
if ($entry == '.' || $entry == '..') {
continue;
}
$abs_name = "$dir_name/$entry";
if (is_file($abs_name) && preg_match("/^.+\.$ext$/", $entry)) {
if (unlink($abs_name)) {
continue;
}
return false;
}
// Recurse on the children if the current entry happens to be a "directory"
if (is_dir($abs_name) || is_link($abs_name)) {
unlink_recursive($abs_name, $ext);
}
}
$dir_handle->close();
return true;
}
我修改了提交的答案并制作了自己的版本 我在其中创建了一个函数,该函数将在当前目录及其所有子级目录中递归迭代 并且它将取消所有扩展名为
.txt
的文件的链接,或者您想从所有目录、子目录及其所有子级目录中删除的任何[extension]
我使用了:
从php文档:
函数的作用是:搜索与模式匹配的所有路径名
根据libc glob()函数使用的规则
类似于普通shell使用的规则
我使用了GLOB_ONLYDIR标志,因为它将只遍历目录,因此只获取目录和从该目录取消所需文件的链接会更容易
<?php
//extension of files you want to remove.
$remove_ext = 'txt';
//remove desired extension files in current directory
array_map('unlink', glob("./*.$remove_ext"));
// below function will remove desired extensions files from all the directories recursively.
function removeRecursive($directory, $ext) {
array_map('unlink', glob("$directory/*.$ext"));
foreach (glob("$directory/*",GLOB_ONLYDIR) as $dir) {
removeRecursive($dir, $ext);
}
return true;
}
//traverse through all the directories in current directory
foreach (glob('./*',GLOB_ONLYDIR) as $dir) {
removeRecursive($dir, $remove_ext);
}
?>
对于想知道如何删除的人(例如:公共目录下的所有PDF文件),您可以执行以下操作:
array_map('unlink', glob( public_path('*.pdf')));
没有错误,我在上面说过。路径
/paste/*.txt
正确吗?粘贴目录在/
Baba帮助下,我没有使用完整路径,我必须输入lude/home/user/etc。。。我现在明白了,必须等着接受他的回答。你应该知道你在使用完整路径,问题是你使用了错误的完整路径。任何以/
开头的路径都是完整路径。谢谢,伙计,我不知道问题出在哪里,谢谢你帮我澄清。