我尝试使用php脚本从目录中删除所有文本文件。
这是我试过的......
<?php array_map('unlink', glob("/paste/*.txt")); ?>
当我运行它时,我没有得到错误,但它没有完成这项工作。
这是否有一个片段?我不知道还有什么可以尝试。
答案 0 :(得分:17)
您的实施工作只需使用Use full PATH
示例
$fullPath = __DIR__ . "/test/" ;
array_map('unlink', glob( "$fullPath*.log"))
答案 1 :(得分:3)
我稍微扩展了提交的答案,以便您可以灵活地,递归地取消链接位于下方的文本文件,因为通常情况就是如此。
// @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;
}
答案 2 :(得分:1)
你可以修改下面的方法,但要小心。确保您有权删除文件。如果所有其他方法都失败了,请发送一个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;
}
答案 3 :(得分:0)
我修改了提交的答案并制作了自己的版本,
我在其中创建了将在当前目录及其所有子级目录中递归迭代的函数,
,它将取消链接所有扩展名为.txt
或您要从所有目录,子目录及其所有子级目录中删除的.[extension]
的文件。
我用过:
glob()
来自php文档:
glob()函数搜索所有与模式匹配的路径名 根据libc glob()函数使用的规则,即 与普通炮弹使用的规则相似。
我使用了 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);
}
?>
答案 4 :(得分:0)
对于想知道如何删除的人(例如:公共目录下的所有PDF文件),您可以执行以下操作:
array_map('unlink', glob( public_path('*.pdf')));