如何通过PHP删除文件?


179

如果文件位于另一个目录中,如何使用PHP从服务器中删除文件?

这是我的页面布局:

  • projects/backend/removeProjectData.php (此文件将删除我对数据库的所有条目,并且还应删除相关文件)
  • public_files/22.pdf (文件所在的位置。)

我正在使用的unlink功能:

unlink('../../public_files/' . $fileName);

但这总是给我一个错误,该文件不存在。有任何想法吗?


2
<pre>使用绝对路径</ pre>
Pavunkumar,2010年

1
如果您不使用真实路径进行检查,则很可能会得到“。” 和“ ..”也非文件,导致文件不存在错误
DrogoNevets 2013年

1
但是请注意,如果您的文件具有多个文件名/符号链接,这可能不会真正删除您的文件!有关更多信息,请参
见此

Answers:


233

以下应该有帮助

通过realpath运行文件路径,然后检查返回的路径是否可写,如果可写,请取消链接。


7
我不知道w3shools是怎么做到的?w3schools.com/php/func_filesystem_delete.asp
Fr0zenFyr 2015年

3
@戈登,我很抱歉。了解您的回复是否很有帮助?..再次抱歉输入了错误的单词..我不是来自英语国家的人...虽然这不能成为借口...
Ritabrata Gautam 2015年

13
@RitabrataGautam“如果我需要访问其他三个链接以了解您的回复,是否很有帮助?” - 是的。因为在转到链接后,您将了解它的工作原理。如果我只给您代码,您将不会理解,而只是复制并粘贴。那你学到了什么?没有。此外,该代码非常简单。
戈登

1
@戈登..我同意..您的意见要求得到尊重..您赢得了#185K ..只是两个简单的问题... 1>如果我认为您的答复是完整的,那么为什么这里的许多主持人说您也应该提供一些代码...不仅是链接(它会导致很多否决票)... 2>如果您放置一些代码,会更好吗?现在有学习倾向的人一定会访问那些链接,而没有学习倾向的人将会再次去谷歌获取已有的代码。
Ritabrata Gautam 2015年

2
答案对我来说似乎很直接:但是您想要的代码示例:$ path = realpath('../../ public_files /'。$ fileName); if(is_writable($ path)){unlink($ path);}
me_

104
$files = [
    './first.jpg',
    './second.jpg',
    './third.jpg'
];

foreach ($files as $file) {
    if (file_exists($file)) {
        unlink($file);
    } else {
        // File not found.
    }
}

11
投票赞成使用该file_exists功能。否则,如果文件不存在,则会出现错误。
Mahdi 2015年

17

首先检查文件的权限,以确保您可以a)从脚本中看到它,并且b)能够删除它。

您还可以使用从当前正在运行脚本的目录中计算出的路径,例如:

unlink(dirname(__FILE__) . "/../../public_files/" . $filename);

(在PHP 5.3中,我相信您可以使用__DIR__常量代替,dirname()但是我自己还没有使用它)


我检查了权限,但起初看不到文件,但是由于realpath,现在一切正常。感谢您的建议

7

您可以使用删除文件

unlink($Your_file_path);

但是,如果您要从其http路径中删除文件,则此取消链接无法正常工作。您必须提供正确的文件路径。


4

AIO解决方案可以处理所有问题,这不是我的工作,但我只是在提高自己。请享用!

/**
 * Unlink a file, which handles symlinks.
 * @see https://github.com/luyadev/luya/blob/master/core/helpers/FileHelper.php
 * @param string $filename The file path to the file to delete.
 * @return boolean Whether the file has been removed or not.
 */
function unlinkFile ( $filename ) {
    // try to force symlinks
    if ( is_link ($filename) ) {
        $sym = @readlink ($filename);
        if ( $sym ) {
            return is_writable ($filename) && @unlink ($filename);
        }
    }

    // try to use real path
    if ( realpath ($filename) && realpath ($filename) !== $filename ) {
        return is_writable ($filename) && @unlink (realpath ($filename));
    }

    // default unlink
    return is_writable ($filename) && @unlink ($filename);
}

看起来很完美,非常感谢,但是由于您不能使用它unlink作为函数的名称,因此请对其进行更新。
Reham Fahmy

如果它是类中的公共静态函数,则取消链接是有效的函数名称:3v4l.org/MgA2l
nadar

是的,但是在当前情况下,独立是更好的选择。
Junaid Atari,

1

我知道这个问题有点老了,但这对我很有效,可以从正在处理的项目中删除图像。

unlink(dirname(__FILE__) . "/img/tasks/" . 'image.jpg');

dirname(__FILE__)节将打印出项目的基本路径。这/img/tasks/是我基本路径下的两个文件夹。最后,还有我要删除的图像,您可以将其制作成所需的任何图像。

有了这个,我在服务器上删除文件并没有任何问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.