我正在尝试使用 php 脚本从目录中删除所有文本文件。
这是我尝试过的......
<?php array_map('unlink', glob("/paste/*.txt")); ?>
当我运行它时,我没有收到错误,但它没有完成这项工作。
有这个片段吗?我不知道还能尝试什么。
您的实施工作您需要做的就是使用Use full PATH
例子
$fullPath = __DIR__ . "/test/" ;
array_map('unlink', glob( "$fullPath*.log"))
我稍微扩展了提交的答案,以便您可以灵活地递归地取消链接位于下方的文本文件,因为这通常是这种情况。
// @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;
}
您可以修改下面的方法,但要小心。确保您有权删除文件。如果一切都失败了,发送一个 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;
}
我修改了提交的答案并制作了自己的版本,
我在其中创建了将在当前目录及其所有子级目录中递归迭代的函数,
并且它将取消所有带有扩展名的文件.txt
或.[extension]
您想要从所有目录、子目录及其所有子级目录中删除的任何文件的链接。
我用过:
glob()
来自 php 文档:
glob() 函数根据 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')));