断开链接不起作用.文件是可写的并且存在


unlink doesn't work ... file is writable and exist

我有一个图片分享网站,最近我发现我不能通过脚本删除我的一些图片。

我的文件是可写的并且存在(所以它不是权限问题),但是为什么我不能取消链接?

echo    $file = base_path('./files/images/2013/11/TubeCom_3313c73ab7924b1f36ee49ad0979a16ad490f9a2.jpg');
echo    is_writable($file) ? ' @is_writable ' : ' !!is_writable ';
echo    is_file($file)     ?   ' @is_file ' : ' !!is_file';
$res = unlink($file);
var_dump($res);

结果如下:

    ./home/siteecom/domains/site.com/public_html/files/images/2013/11/TubeCom_3313c73ab7924b1f36ee49ad0979a16ad490f9a2.jpg 
    @is_writable @is_file bool(false) 

我也试过相对路径…

我最近遇到过这样的问题。首先,你需要打开错误报告,因为unlink()会告诉你到底是什么错了:

ini_set('display_errors', 1);
error_reporting(E_ALL);

您需要确保包含要删除的文件的目录是writable (请提供chmod权限,以便我们进一步帮助)。

您应该考虑使用realpath()来获取文件的绝对路径。(我不认为这是问题,因为它不会抛出一个文件未发现错误)。


你的问题几乎肯定与你试图删除的目录的权限不正确以及试图删除这些文件的脚本有关。

如果你能像这样提供这两个权限:

echo "Directory = ".substr(sprintf('%o', fileperms(DIRECTORY)), -4) . "<br />";
echo "PHP File = ".substr(sprintf('%o', fileperms(SCRIPT)), -4) . "<br />";

您可能错过了,为了删除一个文件,您需要对文件它的祖先文件夹的写权限。确保目录./files/images/2013/11可以被PHP写入。