Wordpress / PHP- Unlink文件搜索目录不包含文件路径

时间:2016-07-28 18:16:34

标签: php wordpress unlink

我目前正在尝试创建一个允许某些管理用户删除我们Wordpress网站上的帖子的功能。更具体地说,直接从Wordpress媒体库中删除文件。我可以按类型成功检索这些文件并显示它们的名称,但每当我尝试使用unlink()方法删除某些文件时,它会搜索相对于php脚本而不是服务器的文件。我已经尝试使用$ _SERVER ['DOCUMENT_ROOT']并重复添加“../”以便返回足够的目录然后正确指定文件路径,但这两个选项都没有用。我也不能将$ context参数用于unlink(),因为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

这不完全是警告,出于安全原因,我只是简单地替换了实际的文件路径。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

如果您知道如何相对访问该文件,可以使用PHP的realpath()函数将其转换为规范路径。

话虽如此,我认为你正在采取这种错误的方式而不是依赖于WordPress中的库。在您的代码段中的任何位置,您是否可以访问该文件的附件ID?

如果您知道ID,则可以使用wp_delete_attachment()取消链接媒体库文件。

如果你有帖子ID,而不是附件ID,你可以使用get_attached_media()和帖子ID,它会给出你可以迭代的附件ID。

要考虑更多,而不仅仅是删除文件。对文件的引用存储在数据库中,该引用与其他内容相关联。使用WordPress中提供的工具意味着它将正确处理所有清理,而不是手动执行。