2011-04-29 38 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); 
} 

這偉大的工作,並投擲任何錯誤。希望它有助於:)

相關問題