这将在代码的一行中删除目录中与模式匹配的所有文件。
<?php array_map('unlink', glob("some/dir/*.txt")); ?>
(PHP 4、PHP 5、PHP 7、PHP 8)
unlink — 删除文件
删除 filename
。类似于 Unix C 的 unlink() 函数。如果失败,将生成E_WARNING
级别的错误。
版本 | 描述 |
---|---|
7.3.0 | 在 Windows 上,现在可以对正在使用的文件句柄使用unlink()进行删除,而以前则会失败。但是,在关闭所有文件句柄之前,仍然无法重新创建已删除的文件。 |
示例 #1 基本 unlink() 用法
<?php
$fh = fopen('test.html', 'a');
fwrite($fh, '<h1>Hello world!</h1>');
fclose($fh);
unlink('test.html');
?>
这将在代码的一行中删除目录中与模式匹配的所有文件。
<?php array_map('unlink', glob("some/dir/*.txt")); ?>
删除了一个大文件,但没有看到可用空间增加或磁盘使用量减少?使用 UNIX 或其他 POSIX 操作系统?
unlink() 与删除文件无关,而是与删除文件名有关。手册页说:“unlink - 删除一个名称,并可能删除它引用的文件”。
大多数情况下,一个文件只有一个名称——删除它也将删除(释放、释放)文件的主体(有一个例外,见下文)。这是简单、常见的情况。
但是,一个文件完全可以有多个名称(参见 link() 函数),在同一个或不同的目录中。所有名称都将引用文件主体并“使其保持活动状态”,可以说。只有当所有名称都被删除时,文件主体才会真正被释放。
例外
文件的正文也可能被一个持有文件打开的进程“保持活动状态”(仍在使用磁盘空间)。只要进程持有文件打开,正文就不会被释放(不会释放磁盘空间)。事实上,有一种巧妙的方法可以恢复因错误删除但仍由进程持有的文件……
unlink($fileName); 对我来说失败了。
然后我尝试使用 realpath($fileName) 函数,如下所示
unlink(realpath($fileName)); 它起作用了
只是发布一下,以防万一有人发现它有用。
这是删除带有掩码的文件的最简单方法
<?php
$mask = "*.jpg"
array_map( "unlink", glob( $mask ) );
?>
我一直在进行一些小尝试,在修改主文本文件之前创建备份文件。然后,当抛出错误时,将删除主文件(取消链接)并返回备份文件。
不过,我已经为此苦恼了一个小时,不知道为什么我无法获得正确的权限来取消链接主文件。
最后我明白了问题所在:因为我正在处理文件并且还没有关闭文件,所以它仍在使用中,当然无法删除 :)
因此,我想在这里提一下,以避免其他人犯同样的错误
<?php
// 首先关闭文件
fclose($fp);
// 然后取消链接 :)
unlink($somefile);
?>
要删除所有特定扩展名的文件,或者实际上,删除所有带有通配符的文件,一种更简单的方法是使用 glob 函数。假设我想删除所有 jpg ……
<?php
foreach (glob("*.jpg") as $filename) {
echo "$filename size " . filesize($filename) . "\n";
unlink($filename);
}
?>
对于任何遇到权限被拒绝错误的人来说,它有时是由尝试删除工作目录层次结构中更高文件夹中的文件引起的(即,尝试删除以“../”开头的路径)。
因此,为了解决此问题,您可以使用 chdir() 将工作目录更改为要取消链接的文件所在的文件夹。
<?php
$old = getcwd(); // 保存当前目录
chdir($path_to_file);
unlink($filename);
chdir($old); // 恢复旧的工作目录
?>