允许.exe上载(旧的WPSE帖子不再起作用)

时间:2017-04-26 作者:somebodysomewhere

我需要允许。exe文件通过admin media manager上载。到目前为止我已经试过了

function enable_extended_upload ( $mime_types = array() ) {
    $mime_types[\'exe\']  = \'application/octet-stream\';

    return $mime_types;
}
add_filter(\'upload_mimes\', \'enable_extended_upload\');
三个不同的来源为我提供了三种不同的mime类型。exe。他们是application/octet-stream, application/exe, 和application/x-msdownload. 没有一个奏效。

由于我的站点恰好是一个网络,我尝试在“网络设置”->“上载设置”下将文件类型列入白名单,如下所示

files

它也不起作用。

唯一有效的方法是设置常量define(\'ALLOW_UNFILTERED_UPLOADS\', true); 在wp配置中。php,并具有上述mime类型代码段,但不是理想的解决方案,因为所有文件都是允许的。

我如何才能进入白名单。exe现在?

2 个回复
SO网友:bueltge

WordPress提供了一个钩子来更改默认的mime类型,就像问题中的提示一样。下面的小代码源演示了允许exe文件的更改。

add_filter( \'upload_mimes\', \'fb_enable_extended_upload\' );
function fb_enable_extended_upload ( array $mime_types = [] ) {

   $mime_types[ \'exe\' ]  = \'application/exe\'; 

   return $mime_types;
} 
无需更改数据库条目upload_filetypes.

SO网友:yacsha

我遇到了完全相同的问题,在探索wordpress源代码之后,文件\'/wp_includes/functions.php\', 我的结论是wordpress在默认情况下禁用了对swf和exe文件的上载(请参阅函数get_allowed_mime_types) , 跳过此操作的唯一方法是启用ALLOW_UNFILTERED_UPLOADS 在里面wp-config (参见功能wp_upload_bits).

更新:此外,您必须定义自己的enable_extended_upload 函数可在“上载文件”对话框中识别exe文件。

启用ALLOW_UNFILTERED_UPLOADS 在true中,是swf和exe文件的上载,因为加载的文件不会多于wordpress中默认定义的文件。这意味着如果要加载"zzz" file, 除非将其设置为自己的,否则它不会加载enable_extended_upload 作用

然后,我将相关函数的最相关代码放入:

function get_allowed_mime_types( $user = null ) {
    $t = wp_get_mime_types();

    unset( $t[\'swf\'], $t[\'exe\'] );

    ....

    /**
     * Filters list of allowed mime types and file extensions.
     *
     * @since 2.0.0
     *
     * @param array            $t    Mime types keyed by the file extension regex corresponding to
     *                               those types. \'swf\' and \'exe\' removed from full list. \'htm|html\' also
     *                               removed depending on \'$user\' capabilities.
     * @param int|WP_User|null $user User ID, User object or null if not provided (indicates current user).
     */
    return apply_filters( \'upload_mimes\', $t, $user );
}


function wp_check_filetype( $filename, $mimes = null ) {
    if ( empty($mimes) )
        $mimes = get_allowed_mime_types();
    $type = false;
    $ext = false;

    foreach ( $mimes as $ext_preg => $mime_match ) {
        $ext_preg = \'!\\.(\' . $ext_preg . \')$!i\';
        if ( preg_match( $ext_preg, $filename, $ext_matches ) ) {
            $type = $mime_match;
            $ext = $ext_matches[1];
            break;
        }
    }

    return compact( \'ext\', \'type\' );
}


function wp_upload_bits( $name, $deprecated, $bits, $time = null ) {
    ....

    $wp_filetype = wp_check_filetype( $name );
    if ( ! $wp_filetype[\'ext\'] && ! current_user_can( \'unfiltered_upload\' ) )
        return array( \'error\' => __( \'Sorry, this file type is not permitted for security reasons.\' ) );
    ?>
   ...

相关推荐

ADD_THEME_SUPPORT(‘CUSTOM-HEADER-UPLOADS’);功能有什么作用?

同时向functions.php 文件中,我发现了以下内容:add_theme_support(\'custom-header-uploads\');这到底是做什么的?我删除了条目functions.php 但对网站没有什么不同。我最初认为这与上传标题图像的能力有关,但这取决于add_theme_support(\'custom-header\');在执行搜索时,我无法在Codex中看到任何有意义的信息。这是某种贬值的特征还是我忽略了什么?