2011-04-29 69 views
3

我用下面的代码从FTP删除旧的图片如果文件存在PHP

unlink(getcwd() . '/images/' . $row['pic']); 

但它引发错误的情况下,没有形象,所以我一直在使用file_exists尝试(),但没” t也能工作,所以如何在删除之前检查是否有图像。谢谢。

if(file_exists(getcwd() . '/images/pics/' . $row['pic'])) 
{ 
    unlink(getcwd() . '/images/pics/' . $row['pic']); 
} 
+0

显示您使用'file_exists'尝试的代码 – 2011-04-29 07:51:10

+0

@Pekka代码在那里 – seoppc 2011-04-29 07:55:29

回答

3

经常托管使用FTP和Apache不同的用户......它可能是,你不已经chmodded您的图像,所以WWW用户不能删除它们?

编辑:

也许is_writable是你更好的解决方案:。

if(is_writable(dirname(__FILE__) . '/images/pics/' . $row['pic'])){ 
    unlink(dirname(__FILE__) . '/images/pics/' . $row['pic']); 
} 
+0

它只在存在图像时删除图像,但如果没有任何图像会引发错误,所以我想使用在删除图像之前检查图像是否存在的任何函数。 – seoppc 2011-04-29 07:54:05

+0

抱歉误解了这个问题.. – Flask 2011-04-29 07:57:41

+0

我为什么要用'is_writeable'而不是'getcwd()'? – seoppc 2011-04-29 08:12:01

-4

尝试在取消链接的前面(GETCWD()添加@ '/图片/' $行['PIC “]);

@unlink(getcwd()。'/ images /'。$ row ['pic']);

如果有文件将被删除,如果没有,您将不会收到错误消息。

+4

压制错误是非常糟糕的做法,downvoted。 – usoban 2011-04-29 07:56:12

+0

@usoban如果这是由于竞争条件,这将是唯一的方法。显示更好的一个 – 2011-04-29 07:59:11

+0

@usoban你能解释为什么在这种情况下抑制错误是非常糟糕的吗? – meouw 2011-04-29 08:00:48

3

首先检查getcwd()返回的内容。可能是错误的,这意味着你没有设置正确的权限。因此你的路径没有正确构建。检查getcwd() docs,更改权限或联系您的系统管理员。另请参考:dirname(__FILE__)

+0

如果存在图像,则使用getcwd删除图像,但如果图像不存在,则会引发错误。 – seoppc 2011-04-29 07:58:37

+0

请提供错误信息。如果你var_dump()构造的路径,它说什么? – usoban 2011-04-29 08:00:05

3

首先,您可以将图像路径存储在$path变量中。然后你可以测试图像是否存在并且是可写的,只有这样才能删除它。

$path = getcwd() . '/images/pics/'; 
if(file_exists($path . $row['pic']) && is_writable($path . $row['pic'])){ 
    unlink($path . $row['pic']); 
} 

如果您使用的是PHP 5,想知道更多有关可能会引发任何异常,在此期间,你可以围绕整个表达式用try...catch声明:

try{ 
    $path = getcwd() . '/images/pics/'; 
    if(file_exists($path . $row['pic']) && is_writable($path . $row['pic'])){ 
     unlink($path . $row['pic']); 
    } 
} catch (Exception $exc) { 
    echo $exc->getMessage(); 
    echo $exc->getTraceAsString(); 
} 

这可能赢解决不了问题,但可能有助于澄清它为什么会发生。

1

我有同样的问题。我允许用户上传最多8个图像。但是,让我们假设他们只上传了四个......然后删除了帖子。我对其他四张图像有错误,因为它们不存在。 所以这是我做过什么......

$GetImages = "SELECT * FROM sales_images WHERE ID = $imgID"; 

$GotImages = $conn->query($GetImages); 

    while($pic = $GotImages->fetch_assoc()) 
{ 
    $path = '../images/sales/'; 
    $img1 = $pic['img1']; 
    $img2 = $pic['img2']; 
    $img3 = $pic['img3']; 
    $img4 = $pic['img4']; 
    $img5 = $pic['img5']; 
    $img6 = $pic['img6']; 
    $img7 = $pic['img7']; 
    $img8 = $pic['img8']; 
} 


if (!empty($img1)) { 
unlink($path . $img1); 
} 
if (!empty($img2)) { 
unlink($path . $img2); 
} 
if (!empty($img3)) { 
unlink($path . $img3); 
} 
if (!empty($img4)) { 
unlink($path . $img4); 
} 
if (!empty($img5)) { 
unlink($path . $img5); 
} 
if (!empty($img6)) { 
unlink($path . $img6); 
} 
if (!empty($img7)) { 
unlink($path . $img7); 
} 
if (!empty($img8)) { 
unlink($path . $img8); 
} 

这伟大的工作,并投掷任何错误。希望它有助于:)