如果文件存在PHP

时间:2011-04-29 07:50:11

标签: php

我使用以下代码从ftp中删除旧图像...

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

但是如果没有图像,它会抛出错误,所以我尝试使用file_exists()但是也没有用,所以如何在尝试删除之前检查是否有图像。感谢。

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

5 个答案:

答案 0 :(得分:3)

经常是托管人使用不同的用户使用ftp和apache ...可能是,你没有为你的图像添加chmodded,所以www-user不能删除它们?

编辑:

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

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

答案 1 :(得分:3)

首先检查getcwd()返回的内容。可能是假的,这意味着您没有设置正确的权限。因此,您的路径未正确构建。检查getcwd() docs,更改权限或与系统管理员联系。同时点击dirname(__FILE__)

答案 2 :(得分: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();
}

这可能无法解决问题,但可能有助于澄清其原因。

答案 3 :(得分: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);
}

这很有效并且没有错误。希望它有所帮助:)

答案 4 :(得分:-4)

尝试在取消链接前添加@(getcwd()。'/ images /'。$ row ['pic']);

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

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