问题描述
我正在使用我网站前端的媒体库,我想阻止用户通过上传无限数量的文件来垃圾邮件。
因此,我想做一个或者以下全部:
-
为用户提供最大上载能力; 即用户最多可以上传 10 兆字节的文件。
-
限制用户可以在 per-post 上上传的文件数
-
限制用户在点击”Insert” 按钮时可以上传的文件数量,即 Flash 上传者和经典上传者只允许您一次上传 2 个文件。
这些都不是 bullet-proof,但他们希望使这样的”spamming” 成为一个难题。
提前致谢,
最佳解决方案
假设您通过 WordPress 的本机功能,wp_handle_upload
或更多的 high-level 提供上传功能,我们得出结论,几个钩子将被拉。
http://core.trac.wordpress.org/browser/tags/3.3/wp-admin/includes/file.php#L212
wp_handle_upload
函数可能是触摸该文件的最后一个本机函数,并且将知道跟踪所需的所有信息。
这个功能里面有两个钩子:wp_handle_upload 和 wp_handle_upload_prefilter 。后者首先,这可以检查目前的限制,并阻止文件上传。前者将跟踪文件和计数。存储信息将由 update_user_meta 除外。
add_filter( 'wp_handle_upload', 'wpse47580_update_upload_stats' );
function wpse47580_update_upload_stats( $args ) {
$file = $args['file'];
$size = filesize( $file ); // bytes
$user_id = get_current_user_id();
$upload_count = get_user_meta( $user_id, 'upload_count', $single = true );
$upload_bytes = get_user_meta( $user_id, 'upload_bytes', $single = true );
update_user_meta( $user_id, 'upload_count', $upload_count + 1 );
update_user_meta( $user_id, 'upload_bytes', $upload_bytes + $size );
}
add_filter( 'wp_handle_upload_prefilter', 'wpse47580_check_upload_limits' );
function wpse47580_check_upload_limits( $file ) {
$user_id = get_current_user_id();
$upload_count = get_user_meta( $user_id, 'upload_count', $single = true );
$upload_bytes = get_user_meta( $user_id, 'upload_bytes', $single = true );
$filesize = /* get filesize from $file array */;
$upload_bytes_limit_reached = apply_filters( 'wpse47580_upload_bytes_limit_reached', 1024*1024*10 ) > ( $filesize + $upload_bytes );
$upload_count_limit_reached = apply_filters( 'wpse47580_upload_count_limit_reached', 100 ) > ( $upload_count + 1 );
if ( $upload_count_limit_reached || $upload_bytes_limit_reached )
$file['error'] = 'Upload limit has been reached for this account!';
return $file;
}
理论上,这个工作; 实际上未经测试。让我们知道怎么回事。
每个帖子上传限制将保留在后期元,可能就像 {$user_id}_upload_count
等。不明白为什么不起作用。
如果您使用自定义代码来处理上传 (我这样做),那么您可以像 wp_handle_uploads
那样实现自己的操作和过滤器。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。