无法在php中取消链接文件

时间:2014-03-19 15:30:23

标签: php unlink

在网站上,我尝试使用带有复选框选择的HTML表单和实际应删除所选图像的php文件来实现从某个文件夹中删除所选图像的实用程序。 表单起作用,复选框的值被解析为$_POST['images'],其余的PHP代码:

$dir=__ROOT__."/images/".$_POST['page'];
echo "dir=".$dir."<br>";
$files=array();
$fdir=opendir($dir);
while ($i = readdir($fdir)) {
    //detect images and put them into files()
    if (strpos(strtolower($i),".jpg")==true&&strpos(strtolower($i),".thumb")==false) $files[]=$i;
}
closedir($fdir);
for($a=0;$a<sizeof($files);$a++) {
    if(in_array($files[$a],$_POST['images'])) {
        $file="../images/".$_POST['page']."/".$files[$a];
        echo $file."<br>";
        echo('<img src="'.$file.'.thumb"><br>');
        if(unlink("../images/".$_POST['page']."/".$files[$a])) {
            echo ("deleted: ".$files[$a]."<br>");} 
            else {echo ("deletion of ".$files[$a]." failed<br>");}
        if(unlink("../images/".$_POST['page']."/".$files[$a].".thumb")) echo "deleted: ".$files[$a].".thumb";
    }
}

尝试删除时,例如IMG_001.jpg(和缩略图IMG_001.jpg.thumb),我得到以下echo-output:

dir={absolute path of the file}
../images/keramiek/IMG_001.jpg
{the correct thumbnail}
deletion of IMG_001.jpg fialed

出了什么问题?为什么不unlink()删除文件?我尝试使用777设置的权限,但仍然没有成功......

解决方案:

更改包含图像的文件夹的权限后,删除工作正常。所有者已更改为www-data,权限设置为755。

新上传的图片(通过FTP)也可以删除。

2 个答案:

答案 0 :(得分:1)

解决方案是设置正确的权限,如下所示:

sudo chown your_user:www-data images/
sudo find images/ -type d -exec chmod 770 {} +
sudo find images/ -type f -exec chmod 660 {} +

编辑(通过OP):这样做,但改为使用775和665,或文件夹无法访问

答案 1 :(得分:0)

调用这个新脚本:write.php,设置变量$ filename(将wame.png重命名为真实文件)并将其放在需要删除文件的目录中!

error_reporting(E_ALL);
//$filename: enter the real file name
$filename = 'wud.png';
//$copy: any name is possible
$copy = 'mycopy.png';

if (copy($filename, $copy)){
  echo '<br><b>copy</b> '.$filename.' to '.$copy.' <b>success</b>';
}
else{
  echo '<br><b>copy</b> '.$filename.' to '.$copy.' <b>failed</b>';
}

if (is_writable($filename)) {
  echo '<br>The file '.$filename.' is detected and <b>writable</b>';
} 
else {
  echo '<br>The file '.$filename.' is <b>not writable</b> or not detected';
}


if (unlink($filename)){
  echo '<br>The file '.$filename.' is <b>deleted</b>';
}
else{
  echo '<br>The file '.$filename.' is <b>not deleted</b>';
}

if (copy($copy,$filename)){
  echo '<br><b>copy</b> '.$copy.' back to '.$filename.' <b>success</b>';
}
else{
  echo '<br><b>copy</b> '.$copy.' back to '.$filename.' <b>failed</b>';
}