使用php/codeigniter删除文件

15

我想要删除在我的本地主机中找到的一个文件。

localhost/project/folder/file_to_delete

我正在使用codeigniter。

我想在php中使用unlink()函数,但我真的不明白如何使用它。

9个回答

36

5
“delete_files($path)” 需要一个文件夹路径而不是文件路径。我不确定它是否能完成任务。 - Aniket
3
没错,你说得对。我现在查看了一下,delete_files 函数使用递归的 unlink() 来删除指定文件夹中的文件。这个问题的答案应该被更新。 - Taha Paksu
答案中的链接已失效。 - Blip

13

http://php.net/manual/zh/function.unlink.php

这是理解unlink函数的最佳方式。阅读它!

$path_to_file = '/project/folder/file_to_delete';
if(unlink($path_to_file)) {
     echo 'deleted successfully';
}
else {
     echo 'errors occured';
}

它会报错; unlink(localhost/project/files_to_delete/f1.php) [function.unlink]: 没有这个文件或目录。 - Jetoox
1
如果它给你一个错误,你应该这样静默它 @unlink($path_to_file)。但是为了确保文件存在,请在删除之前使用 is_file函数 - machineaddict

6

删除文件使用

unlink($file_name);

要删除目录,请使用以下命令:

rmdir($dir);

4

我建议你尝试这个方法,对我来说很有效:

unlink("./path/to/folder/file_name_do_delete");

例如:我将我的文件放在应用程序文件夹外面的uploads文件夹中,我的文件名是123.jpg。因此应该像这样:
unlink("./uploads/123.jpg");

我可以知道为什么要使用"./"吗?因为“upload”文件夹不在“application”文件夹内?难道不应该只使用“/”吗? - adrianriyadi

3

在解除链接时使用FCPATH。您可以尝试以下方法,这适用于我:

$file_name = $SBLN_ROLL_NO."_ssc";
$file_ext = pathinfo($_FILES['ASSIGNMENT_FILE']['name'],PATHINFO_EXTENSION);

//File upload configuration
$config['upload_path'] = $upload_path;
$config['allowed_types'] = 'jpg|jpeg|png|gif|pdf';
$config['file_name'] = $file_name.'.'.$file_ext;

//First save the previous path for unlink before update
$temp = $this->utilities->findByAttribute('SKILL_DEV_ELEMENT', array('APPLICANT_ID'=>$STUDENT_PERSONAL_INFO->APPLICANT_ID, 'SD_ID'=>$SD_ID));

//Now Unlink
if(file_exists($upload_path.'/'.$temp->ELEMENT_URL))
{
    unlink(FCPATH . $upload_path.'/'.$temp->ELEMENT_URL);
}

//Then upload a new file
if($this->upload->do_upload('file'))
{
    // Uploaded file data
    $fileData = $this->upload->data();
    $file_name = $fileData['file_name'];
}

2
"最初的回答" 可以简单地使用以下代码:
$file = "uploads/my_test_file.txt";

if (is_readable($file) && unlink($file)) {
    echo "The file has been deleted";
} else {
    echo "The file was not found";
}

2
$file = "test.txt";
if (!unlink($file))
  {
  echo ("Error deleting $file");
  }
else
  {
  echo ("Deleted $file");
  }

0

这段代码也可以处理非空文件夹 - 只需在辅助程序中使用它。

if (!function_exists('deleteDirectory')) {
    function deleteDirectory($dir) {
    if (!file_exists($dir)) return true;
    if (!is_dir($dir) || is_link($dir)) return unlink($dir);
        foreach (scandir($dir) as $item) {
            if ($item == '.' || $item == '..') continue;
            if (!deleteDirectory($dir . "/" . $item)) {
                chmod($dir . "/" . $item, 0777);
                if (!deleteDirectory($dir . "/" . $item)) return false;
            };
        }
        return rmdir($dir);
    }
}

0

2018年9月这个解决方案对我很有效。

if(unlink(FCPATH . 'uploads/'.$filename)){
    echo "Deleted";
}else{
    echo "Found some error";
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接