我使用以下代码从ftp中删除旧图像...
unlink(getcwd() . '/images/' . $row['pic']);
但是如果没有图像,它会抛出错误,所以我尝试使用file_exists()但是也没有用,所以如何在尝试删除之前检查是否有图像。感谢。
if(file_exists(getcwd() . '/images/pics/' . $row['pic']))
{
unlink(getcwd() . '/images/pics/' . $row['pic']);
}
答案 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']);
如果有文件将被删除,如果没有,您将不会收到错误消息。