unlink不起作用...文件是可写的并且存在

时间:2014-07-04 00:02:16

标签: php file

我有一个图片分享网站,最近我注意到我无法通过脚本删除我的一些图片。

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

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) 

我也尝试了相对路径......没有工作

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

我最近遇到过这样的问题。 首先,您需要打开错误报告,因为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 />";

我们可以尝试进一步帮助您。