2016-07-28 121 views
0

我目前正在嘗試創建一個功能,將允許某些管理用戶刪除我們的Wordpress網站上的帖子。更具體地說,直接從Wordpress媒體庫中刪除文件。我可以通過類型成功檢索這些文件並顯示它們的名稱,但每當我嘗試利用unlink()方法從使用中刪除某些文件時,它都會搜索相對於php腳本而非服務器的文件。我試過使用$ _SERVER ['DOCUMENT_ROOT']並重復添加「../」,以便返回足夠多的目錄,然後正確指定文件路徑,但這兩個選項都不起作用。我也不能在unlink()中使用$ context參數,因爲php版本不是最新的,現在更新它是不可行的。下面是我的一些代碼:WordPress的/ PHP-取消鏈接文件搜索目錄不包含文件路徑

foreach($imgs as $img){ 
$imgcutpath = substr($img, 0, 33); 
fopen($img, "r"); 
$imgpath = str_replace($imgcutpath, "", $img); 
echo "<a href='?delete=1'>         Delete</a>"; 
if (isset($_GET['delete'])) 
{ unlink($_SERVER['DOCUMENT_ROOT'] . $imagepath); } 
} 

而且,這裏是我收到警告:

Warning: unlink(/path/to/file/from/server): Is a directory in 
/path/to/php/file/running/this/code/from/server/phpfile.php on line 28 

這是不完全的警告,我簡單地更換出於安全原因,實際的文件路徑。謝謝您的幫助!

回答

0

如果您知道如何找到相對的文件,可以使用PHP的realpath()函數將其轉換爲規範路徑。

這就是說,我認爲你正在走這個錯誤的方式,而不是依靠WordPress內的庫。在你的代碼片段中的任何一點,你有沒有訪問該文件的附件ID?

如果您知道該ID,則可以利用wp_delete_attachment()取消鏈接媒體庫文件。

如果您有帖子ID,而不是附件ID,則可以使用帶有帖子ID的get_attached_media(),它會給出您可以迭代的附件ID。

還有更多要考慮,而不僅僅是刪除文件。對該文件的引用存儲在數據庫中,並且該引用被鏈接到其他事物。使用WordPress提供的工具意味着它將正確處理所有清理工作,而不是手動完成清理工作。

+1

感謝您的建議!絕對有助於使用WordPress庫。對於任何有此問題的人,我使用https://frankiejarrett.com/2013/05/get-an-attachment-id-by-url-in-wordpress/中的代碼來使用url獲取附件標識,然後簡單地使用像Jeremy建議的wp_delete_attachment()函數。 –

相關問題