阻止插件删除重要目录

时间:2012-09-16 作者:Daniel Sachs

我想允许用户上传自定义文件到特定的插件目录。问题是,很明显,WP会在插件版本更新时删除所有内容。

我认为upgrader_pre_installupgrader_post_install 钩子可能很有用,但不幸的是,到目前为止,我无法找到任何帮助我的信息。

在您看来,这些钩子可以用来保留目录吗?如果可以,怎么做?我是否应该简单地将目录复制到其他地方,如uploads文件夹,然后用upgrader_post_install? 最佳做法是什么?

谢谢

2 个回复
最合适的回答,由SO网友:Daniel Sachs 整理而成

在这里回答我自己的问题是为了保持问题的答案。这样做的目的是在升级之前复制重要目录,并在升级之后恢复它:

function my_dir_copy($source, $dest)
{
    if (is_link($source)) {
        return symlink(readlink($source), $dest);
    }
    if (is_file($source)) {
        return copy($source, $dest);
    }
    if (!is_dir($dest)) {
        mkdir($dest);
    }
    $dir = dir($source);
    while (false !== $entry = $dir->read()) {
        if ($entry == \'.\' || $entry == \'..\') {
            continue;
        }
        my_dir_copy("$source/$entry", "$dest/$entry");
    }

    $dir->close();
    return true;
}


function my_dir_rmdirr($dirname)
{

    if (!file_exists($dirname)) {
        return false;
    }


    if (is_file($dirname)) {
        return unlink($dirname);
    }


    $dir = dir($dirname);
    while (false !== $entry = $dir->read()) {

        if ($entry == ‘.’ || $entry == ‘..’) {
        continue;
        }
        rmdirr(“$dirname/$entry”);
    }


    $dir->close();
    return rmdir($dirname);
}


function my_dir_backup()
{
        $to = dirname(__FILE__)."/../igr_backup/";
        $from = dirname(__FILE__)."/whatever_directory_you_preserve/";
        my_dir_copy($from, $to);
}
function my_dir_recover()
{
        $from = dirname(__FILE__)."/../igr_backup/";
        $to = dirname(__FILE__)."/whatever_directory_you_preserve/";
        my_dir_copy($from, $to);
        if (is_dir($from)) {
                my_dir_rmdirr($from);
        }
}
add_filter(\'upgrader_pre_install\', \'my_dir_backup\', 10, 2);
add_filter(\'upgrader_post_install\', \'my_dir_recover\', 10, 2);

SO网友:fuxia

插件目录不能用于上载:

您可能没有此处的写入权限使用上载目录进行上载。这是唯一安全的地方
另请参见:How to prevent specific plugin files or subfolders from appearing under “plugin files” listing 与相关问题–以及相同的解决方案。

结束

相关推荐