将不包含扩展名的文件上传到wordpress?
Posted
技术标签:
【中文标题】将不包含扩展名的文件上传到wordpress?【英文标题】:Upload file which contain no extension into wordpress? 【发布时间】:2018-08-10 11:40:22 【问题描述】:Wordpress 版本:4.7.9。
define('ALLOW_UNFILTERED_UPLOADS', true);
声明被写入wp-includes/functions.php
。
编辑一个名为 test
的简单文件,该文件不包含任何扩展名。
vim test
to upload the file which contain no file extension.
上传文件test
时报错。
This file type is not allowed. Please try another.
将文件test
重命名为test.txt
。
并将以下内容添加到wp-includes/functions.php
。
add_filter('upload_mimes','custom_upload_mimes');
function custom_upload_mimes ( $existing_mimes=array() )
$existing_mimes['txt'] = 'application/txt';
return $existing_mimes;
文件test.txt
可以上传成功。
在配置文件中设置wp-config.php
是没有用的。
define('ALLOW_UNFILTERED_UPLOADS', true);
我正在使用一个 24 岁的孩子。
这是我的/var/www/html//wp-content/themes/twentyfourteen-child/functions.php
<?php
define('ALLOW_UNFILTERED_UPLOADS', true);
function my_theme_enqueue_styles()
$parent_style = 'twentyfourteen-style'; // This is 'twentyfourteen-style' for the Twenty Fourteen theme.
wp_enqueue_style( $parent_style, get_template_directory_uri() . '/style.css' );
wp_enqueue_style( 'child-style',
get_stylesheet_directory_uri() . '/style.css',
array( $parent_style ),
wp_get_theme()->get('Version')
);
add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_styles' );
remove_filter('the_content', 'wptexturize');
remove_filter('the_excerpt', 'wptexturize');
remove_filter('comment_text', 'wptexturize');
?>
它没有任何作用。
【问题讨论】:
那么,你想使用wordpress上传/验证功能吗?还是您的目标只是上传文件? 问题是什么? 无法上传不包含扩展名的文件,如何上传不包含扩展名的文件? 你在哪里上传文件? Wordpress 没有输出类似“不允许此文件类型”的错误,我完全搜索了这个字符串,没有找到,您是通过媒体库上传的吗?也许这是您的服务器输出的错误消息?但我不能确定,但至少找不到那个字符串,这是肯定的(最新的 WP 版本)。 【参考方案1】:真正的问题不在于 WordPress 的后端,而在于前端验证。上传器由Plupload 处理,默认情况下,WordPress 仅检查您是否在上传过程中定义了ALLOW_UNFILTERED_UPLOADS
,而不会使用该值真正调整前端插件的过滤器验证。也许是一个小的前端故障。
如您所见,WordPress 始终呈现以下默认设置:
var _wpPluploadSettings = "defaults":"file_data_name":"async-upload","url":"\/wp-admin\/async-upload.php","filters":"max_file_size":"268435456b","mime_types":["extensions":"jpg,jpeg,jpe,gif,png,bmp,tiff,tif,ico,asf,asx,wmv,wmx,wm,avi,divx,flv,mov,qt,mpeg,mpg,mpe,mp4,m4v,ogv,webm,mkv,3gp,3gpp,3g2,3gp2,txt,asc,c,cc,h,srt,csv,tsv,ics,rtx,css,htm,html,vtt,dfxp,mp3,m4a,m4b,ra,ram,wav,ogg,oga,flac,mid,midi,wma,wax,mka,rtf,js,pdf,class,tar,zip,gz,gzip,rar,7z,psd,xcf,doc,pot,pps,ppt,wri,xla,xls,xlt,xlw,mdb,mpp,docx,docm,dotx,dotm,xlsx,xlsm,xlsb,xltx,xltm,xlam,pptx,pptm,ppsx,ppsm,potx,potm,ppam,sldx,sldm,onetoc,onetoc2,onetmp,onepkg,oxps,xps,odt,odp,ods,odg,odc,odb,odf,wp,wpd,key,numbers,pages"],"multipart_params":"action":"upload-attachment","_wpnonce":"9ee7fbf228","browser":"mobile":false,"supported":true,"limitExceeded":false;
在他们最终解决问题之前对问题的临时解决方法是挂钩 WordPress 正在调用的过滤器以生成前端设置plupload_default_settings
。
在您的functions.php
中添加过滤器:
add_filter('plupload_default_settings', function ($settings)
if (defined('ALLOW_UNFILTERED_UPLOADS') && ALLOW_UNFILTERED_UPLOADS)
unset($settings['filters']['mime_types']);
return $settings;
);
这将允许您通过上传器上传您的test
。由于WordPress已经在后台检查,只要你在wp-config.php
中定义了ALLOW_UNFILTERED_UPLOADS
是true
,就应该可以正常上传了。
【讨论】:
很好的答案 +1,我冒昧地修复了您代码上的一个小故障,有一个额外的括号 @brasofilo 谢谢,我在输入时输入了所以没注意到哈哈:p【参考方案2】:确保没有安全插件或其他插件覆盖您的define('ALLOW_UNFILTERED_UPLOADS', true);
:)
我建议首先通过您的站点文件扫描ALLOW_UNFILTERED_UPLOADS
,然后查看弹出的内容。
如果您还没有更新到最新版本的 WordPress,也请更新到最新版本,因为您收到的错误消息与我收到的不同。
【讨论】:
【参考方案3】:您不想将其粘贴到 /functions.php 文件中,而是粘贴到 /wp-config.php 文件中。
或者,您可以通过将其粘贴到 /functions.php 文件中来为特定文件类型创建 MIME,就像您所做的那样。
【讨论】:
在配置文件wp-config.php中设置是没有用的。 对不起,我的意思是define(‘ALLOW_UNFILTERED_UPLOADS’, true);
需要在wp-config.php的底部...出于兴趣,你怎么有一个不包含文件类型的文件?
文件不需要包含文件类型。放在wp-config.php的开头或底部是没有用的。请在你的wordpress中尝试.【参考方案4】:
Chin Leung 回答效果很好,唯一需要注意的是可以上传任何文件扩展名。
下面的方法需要将ALLOW_UNFILTERED_UPLOADS
设置为false(或者根本没有在wp-config 或functions.php 上设置)并且它允许没有扩展名的文件并且不允许阻止扩展名:
add_filter('upload_mimes', function ( $mimes )
$mimes['*'] = 'text/plain';
return $mimes;
);
add_filter( 'wp_check_filetype_and_ext', function ( $types, $file, $filename, $mimes)
# If filename doesn't containg a dot '.', allow upload
if( false === strpos( $filename, '.' ) )
$types['ext'] = '*';
$types['type'] = 'text/plain';
return $types;
, 10, 4 );
【讨论】:
【参考方案5】:在wp-config.php
文件的开头添加以下代码:
define('ALLOW_UNFILTERED_UPLOADS', true);
注意:要在媒体中上传新文件,请转到以下网址:
http://example.com/wp-admin/media-new.php
代替:
http://example.com/wp-admin/upload.php
因为在upload.php
中,mime 类型验证是由 javascript 完成的。
【讨论】:
以上是关于将不包含扩展名的文件上传到wordpress?的主要内容,如果未能解决你的问题,请参考以下文章
如何将完全自定义的 PHP/Web 文件上传到 WordPress?
使用 jQuery 上传文件插件时出错,将不需要的字符串附加到文件 (WebKitFormBoundary)
需要 php 编码特殊字符而不是 html 标签,以便包含在 wordpress 扩展 rss 文件中