仅允许在上载期间添加某些文件类型

时间:2012-03-09 19:07:08

标签: php wordpress

全部, 我正在使用以下代码将一些图像上传到我的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或.png覆盖或类似的东西?任何帮助将不胜感激!

谢谢!

2 个答案:

答案 0 :(得分:8)

在覆盖中为允许的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];
}

答案 1 :(得分:0)

您可以像这样检查文件扩展名:

    // 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类型,即值'type'而不是'name'。 见http://www.php.net/manual/en/reserved.variables.files.php