Wordpress/PHP-取消链接文件搜索目录不包含文件路径


Wordpress/PHP- Unlink file search directory does not contain file path

我目前正在尝试创建一个函数,允许某些管理用户删除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

这并不完全是警告,出于安全考虑,我只是替换了实际的文件路径。谢谢你的帮助!

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

话虽如此,我认为你走错了路,不依赖WordPress中手头的库。在代码片段的任何时候,您是否可以访问文件的附件id?

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

如果你有post ID,而不是附件ID,你可以将get_attached_media()与post ID一起使用,它会给出你可以迭代的附件ID。

除了删除文件,还有更多需要考虑。对该文件的引用存储在数据库中,该引用将链接到其他内容。使用WordPress中可用的工具意味着它将正确处理所有清理,而不是手动进行。