使用WordPress的内置函数验证上传的图像?

时间:2014-12-12 作者:user1462

我有一个允许用户上传图像的表单。我使用下面的代码(目前不起作用)来确保用户上传的内容是有效的。

是否有人可以帮助我更新代码或为我指出正确的方向,告诉我如何使用尽可能多的内置WordPress函数(wp\\u check\\u filetype\\u and\\u ext())或任何其他适合的函数来处理验证?它还必须是安全的,以防止任何恶意文件、攻击等。

if ( $_FILES ) {
  foreach ($_FILES as $file => $array) {
    //Check if the $_FILES is set and if the size is > 0 (if =0 it\'s empty)
    if ( isset( $_FILES[$file]) && ($_FILES[$file][\'size\'] > 0 ) ) {
      $tmpName = $_FILES[$file][\'tmp_name\'];
      list($width, $height, $type, $attr) = @getimagesize($tmpName);

      if ($width != 500 || $height != 500) {
        $error .= "Image is to small<br />";
        unlink($_FILES[$file][\'tmp_name\']);
      }

      // Get the type of the uploaded file. This is returned as "type/extension"
      $arr_file_type = wp_check_filetype(basename($_FILES[$file][\'name\']));
      $uploaded_file_type = $arr_file_type[\'type\'];

      // Set an array containing a list of acceptable formats
      $allowed_file_types = array(\'image/jpg\',\'image/jpeg\',\'image/gif\',\'image/png\');

      // If the uploaded file is the right format
      if (in_array($uploaded_file_type, $allowed_file_types)) {
      } else { // wrong file type
        $error .= "Please upload a JPG, GIF, or PNG file<br />";
      }
    }
  }
}

1 个回复
SO网友:Tom J Nowell

问题中的所有代码都可以替换为:

require_once( ABSPATH . \'wp-admin/includes/image.php\' );
require_once( ABSPATH . \'wp-admin/includes/file.php\' );
require_once( ABSPATH . \'wp-admin/includes/media.php\' );
if ( $_FILES ) {
  foreach ($_FILES as $file => $array) {
    $image_post_id = media_handler_upload( $file );
    if ( is_wp_error( $image_post_id ) ) {
      $error .= $image_post_id->get_error_message();
    } else {
      // $image_post_id now holds the post ID of an attachment that is your uploaded file
    }
  }
}
的力量media_handle_upload 意味着现在您已经完全将安全性、检查和上载外包给WordPress Core。media_handle_upload 将在您完成项目后很长一段时间内由比我们都聪明得多的人以及其他在维护WordPress安全方面有既得利益的人维护。

media_handle_upload 将执行通过仪表板上载内容时得到的所有检查,并将创建附件帖子以在数据库中表示这些上载的文件。它还将处理不同图像大小的创建、与插件的兼容性,并遵守仪表板中指定的安全设置。

如果成功,它将返回其创建的附件帖子的ID。如果不成功,它将返回WP_Error 对象,并显示错误消息。

然后您可以使用wp_get_attachment_url 如果您需要附件的完整URL,或wp_get_attachment_image_src 如果需要获取图像的特定大小,例如:

$image = wp_get_attachment_image_src( $image_post_id, \'thumbnail\' );
if ( $image != false ) {
    echo $image[0];
}

结束

相关推荐

从函数添加类名注释模板。php

我想在我的comment template (post本身之前的div包装)在函数中声明。php。函数中的类名。php是我的用户配置文件部分中的一个额外字段,我想获取该字符串并将其作为额外的类名添加到我的注释模板中。我想补充的是:$cityofuser->user_city问题是:我该怎么做?如果我使用$classes[] = \'comment-author-\' . sanitize_html_class(echo $cityofuser->user_city);在模板中,它将不起作用。我