PHP 如何删除文件
很多做网站或小型应用的朋友,偶尔会碰到需要清理临时文件、过期缓存的场景,这时候用PHP删文件就很实用,不用手动登录服务器操作,写一段简单代码就能自动完成。
在PHP里删除文件有个核心函数叫unlink(),这个函数就是专门用来处理文件删除的,用法不算复杂,但要注意几个关键点,不然很容易删错或者删不掉。

先搞懂:unlink()的基本用法
你可以把它理解成“给文件发删除指令”,只要告诉它“删哪个文件”就行,举个生活化的例子:就像你在手机相册里删照片,只要指定要删的那张照片路径,系统就会执行删除。它的基本代码格式也很简单,比如要删一个叫temp.txt的文件,就这么写:
`php
$filePath = 'temp.txt';
unlink($filePath);
`
这段代码执行后,只要temp.txt在当前PHP脚本所在的文件夹里,就会被删掉。如果文件不在当前文件夹,就需要写完整路径,比如服务器根目录下的文件,路径可能是/var/www/html/temp.txt,或者相对路径../cache/old_log.txt,就像你找不在同一文件夹里的东西,得告诉系统具体位置。
容易忽略的“删不掉”的情况
很多朋友第一次用unlink()会发现,明明路径写对了,文件却没删掉,大概率是踩了这几个坑。
第一个坑是权限不够。就像你没法删别人锁起来的抽屉里的东西,PHP脚本的运行权限,不够删服务器里某些受保护的文件,或者这个文件本身被锁了(比如正在被别的程序打开编辑),这时候unlink()就会失败。这时候可以看看服务器的文件权限设置,或者把要删的文件改成PHP脚本能读写的权限。
第二个坑是文件不存在。如果路径写错了,比如把temp.txt写成了temp.tx,unlink()也会白忙活,不会删除任何文件。所以实际用的时候,最好先确认文件是不是真的存在,加个判断就很稳妥,代码可以改成这样:
`php
$filePath = 'temp.txt';
if (file_exists($filePath)) {
unlink($filePath);
echo "文件删除成功";
} else {
echo "文件不存在,删不了";
}
`
就像你删东西前先确认桌上有没有这个物件,避免白跑一趟。
进阶场景:批量删文件
如果要删的不是单个文件,而是一个文件夹里的一堆文件,比如清理cache文件夹里所有过期的缓存文件,也可以结合scandir()函数来做。scandir()就像给文件夹里的所有文件列个清单,然后循环遍历这个清单,逐个用unlink()删除。
举个例子,删cache文件夹里的所有文件的代码:
`php
$dir = 'cache/';
$files = scandir($dir);
foreach ($files as $file) {
// 跳过当前目录和上级目录的特殊项
if ($file != '.' && $file != '..') {
unlink($dir . $file);
}
}
`
这里要注意,scandir()会自动带出.(当前目录)和..(上级目录)这两个特殊项,直接删的话会出问题,所以要先把它们跳过,就像你列购物清单的时候,不会把“清单本身”也算成要买的东西。
另外要提醒一句,删除操作是不可逆的,一旦用unlink()删了文件,在服务器没有备份的情况下,基本找不回来。所以写代码前最好先在测试环境试试,或者把要删的文件路径写得更明确,避免误删重要内容。