只允许上传
问题描述:
所有, 我用下面的代码来一些图片上传到我的WordPress的博客中添加某些文件类型:只允许上传
$fieldname = 'logo';
include_once(ABSPATH . 'wp-admin/includes/media.php');
include_once(ABSPATH . 'wp-admin/includes/file.php');
if ($_FILES[$fieldname]) {
$overrides = array('test_form' => false);
$file = wp_handle_upload($_FILES[$fieldname], $overrides);
echo $file[error];
}
这工作得很好,不过,我可以上传任何类型的文件,因为你知道这可能是潜在的危险。有没有办法确保该文件只是一个.jpg,.jpeg,.gif或覆盖或类似的东西?任何帮助将不胜感激!
谢谢!
答
在允许的MIME类型的覆盖中设置一个数组。这里是一个gif/jpg的例子
$fieldname = 'logo';
include_once(ABSPATH . 'wp-admin/includes/media.php');
include_once(ABSPATH . 'wp-admin/includes/file.php');
if ($_FILES[$fieldname]) {
$allowed_file_types = array('jpg' =>'image/jpg','jpeg' =>'image/jpeg', 'gif' => 'image/gif', 'png' => 'image/png');
$overrides = array('test_form' => false, 'mimes' => $allowed_file_types);
$file = wp_handle_upload($_FILES[$fieldname], $overrides);
echo $file[error];
}
答
你可以检查文件的扩展名是这样的:
// check for extension !
$name = $_FILES['foto']['name'];
$ext = explode(".",$name);
$ext = array_reverse($ext);
$ext = strtolower($ext[0]);
$valid = 0;
$error = false;
if (!empty($_GET['exts'])) {
if ($_GET['exts'] == 'all') {
$valid=1;
} else {
if (strpos($_GET['exts'],$ext) !== false) $valid=1;
else $valid=0;
}
} else {
if (strpos($defexts,$ext) !== false) $valid=1;
else $valid=0;
}
您还可以检查MIME类型的文件,这是值“类型”,而不是“名称”。 请参阅http://www.php.net/manual/en/reserved.variables.files.php
谢谢,这就是我一直在寻找的。它虽然给我一个错误,当我尝试上传一个图像,说它不被允许。关于如何看到它所检查的价值的任何想法? – user1048676 2012-03-09 19:36:59
编辑:$ allowed_file_types数组已更改FYI。 – 2012-03-09 20:07:17