使用PHP,我想从文件夹中的第一个文件中获取内容,当加载内容时,删除该文件。这是我所拥有的:
$a = opendir('./');
while (false !== ($entry = readdir($a))) {
if($entry != '.' && $entry != '..') {
echo $entry = file_get_contents('./'.$entry.'', FILE_USE_INCLUDE_PATH);
break; // only need the first file
}
}
上面的代码加载文件夹中的第一个文件,我可以使用类似的东西成功删除它
unlink("temp.txt");
因此不存在拒绝权限的错误。但我需要做的是按其变量名删除文件(因为每个文件名都不同)。令我惊讶的是,unlink("$entry");
或类似的东西不允许我删除它,而是在该文件内容的前几行显示警告。如果我回显$entry
,它会正确显示temp.txt。有人能启发我吗?我在这里错过了什么?
(可选(非)相关问题:如果我有像1.txt、2.txt、3.txt、10.txt这样的数字文件……有没有办法修改上面的代码,使其不加载像1,10,2,3这样的文件。。。,而是像1,2,3,10…?)
更新:有效的更新代码(供将来参考):
$a = opendir('./');
while (false !== ($entry = readdir($a))) {
if($entry != '.' && $entry != '..') {
echo $b = file_get_contents('./'.$entry.'', FILE_USE_INCLUDE_PATH);
break; // only need the first file
}
}
unlink("./$entry");
第一个问题是用文件内容覆盖$entry
,因此在尝试删除文件时文件名不再有效(用文件内容解释错误)。
其次,因为您使用的是FILE_USE_INCLUDE_PATH
,所以您不知道文件的确切位置,并且unlink
解析与当前工作目录相关,而当前工作目录很可能不是$a
。
使用unlink($a.'/'.$entry)
,你会没事的。
至于不相关的问题——使用scandir
获取文件夹中的所有文件,然后将natsort
应用于生成的数组,以"自然排序算法"进行排序。请记住,目录列表总是列出文件夹.
和..
,您必须手动检测并跳过或删除它们。