2012-11-26 49 views
0

下面的代碼允許我刪除文件有時。我已經檢查了文件和文件夾的權限,它們存在並被授予正確的訪問權限。有時當我按下刪除按鈕時;它會刪除文件,有時只是刷新頁面而沒有任何反應。有什麼我可以做,以解除鏈接正常工作?我在下面的代碼中丟失了什麼?這是在ZEND中。間歇性取消鏈接不起作用

public function delimageAction() 
{ 
    $request = $this->getRequest(); 

    if ($request->isPost()) { 
     // Get the image name 
     $imageName = $request->getParam('file'); 

     $old = getcwd(); 
     chdir(APPLICATION_PATH . "/../public/images/blog/"); // Change directory to the files 
     fclose(APPLICATION_PATH . "/../public/images/blog/" . $imageName); 

     // Delete it 
     unlink(APPLICATION_PATH . "/../public/images/blog/" . $imageName) 

     chdir($old); // Return to old directory 
    } 
    $this->_helper->redirector('blog', 'index'); 
} 
+1

試試這個:POST參數文件= 「../../私營/ index.php文件」(或類似) –

+0

@Eugen:淘氣! – PatrikAkerstrand

回答

2

卸下兩個chdir電話,因爲他們沒有任何意義,而且fclose,這將導致一個錯誤。除此之外,您需要檢查錯誤日誌以查看導致刪除失敗的原因,它可能與權限相關。您也可以檢查unlink的返回值,因爲如果它不起作用它應該返回false。

正如在評論中暗示的那樣,腳本中存在相當大的安全漏洞,因爲它允許惡意用戶刪除應用程序中的任何文件。您需要清理'文件'參數,以確保提供的路徑位於public/images/blog/文件夾內。

0
public function delimageAction() 
{ 
    $request = $this->getRequest(); 

    if ($request->isPost()) 
    { 
     // Get the image name 
     $imageName = $request->getParam('file'); 

     // Delete it 
     unlink(APPLICATION_PATH . "/../public/images/blog/" . $imageName) 

    } 

    $this->_helper->redirector('blog', 'index'); 
}