【问题标题】:Wordpress/PHP- Unlink file search directory does not contain file pathWordpress/PHP-取消链接文件搜索目录不包含文件路径
【发布时间】:2016-07-28 18:16:33
【问题描述】:

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


    【解决方案1】:

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

    话虽如此,我认为您的做法是错误的,而不是依赖 WordPress 中手头的库。在您的代码 sn-p 中的任何时候,您都可以访问文件的附件 ID 吗?

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

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

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

    【讨论】:

    • 感谢您的建议!绝对有助于使用 WordPress 库。对于遇到此问题的其他人,我使用来自 frankiejarrett.com/2013/05/… 的代码使用 url 获取附件 id,然后像 Jeremy 建议的那样简单地使用 wp_delete_attachment() 函数。
    猜你喜欢
    • 1970-01-01
    • 2010-11-17
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多