FileValidatorImage by Ryan Cramer

Automatically validate uploaded JPG, PNG, or GIF image files; or validate by API.

Image File Validator

This module implements ProcessWire’s FileValidator interface, which is used by $sanitizer->validateFile() as part of ProcessWire’s built-in file validations. This is used by existing file uploads in InputfieldFile and InputfieldImage, for example. This module adds support for validation of common image bitmap formats, currently JPG, PNG, GIF.

Developed by Ryan Cramer for ProcessWire 3.x
License: MPL 2.0

Validations


This module performs the following validations on image files:

  • Extension must be one of: jpg, jpeg, gif, png.
  • Image type must match PHP’s IMAGETYPE_* constant for GIF, PNG or JPEG.
  • Image type must be consistent with that specified by file extension.
  • MIME type must be consistent with that specified by file extension.
  • MIME type must be valid, any one of the following:
    • image/gif
    • image/png
    • image/jpeg
    • image/pjpeg
    • image/x-png

  • EXIF data must not contain specific PHP or Javascript malware.
  • Image must be greater than 1x1 in dimension.
  • Image must be greater than specified minWidth/minHeight dimensions.
  • Image must be less than specified maxWidth/maxHeight dimensions.
  • Image must be openable from GD’s image functions in PHP without error.
  • Image must pass any custom validations assigned via hooks to an isValidHook() method (optional, applies only if method hooked).

Install


  1. Copy files to /site/modules/FileValidatorImage/
  2. In the PW admin, go to Modules > Refresh.
  3. Go to Modules > Site, and click Install for this module.

Usage


Automatic usage

Because this module type (FileValidator) is already recognized by ProcessWire 3.x, it is automatically used by uploads that occur through InputfieldImage and InputfieldFile.

API usage

You can also use it from ProcessWire’s $sanitizer API variable:

$valid = $sanitizer->validateFile('/path/to/file.jpg');

if($valid) {
  // valid image file
} else {
  // not valid image file
  $reason = $sanitizer->errors('last string clear');
  echo "Image not valid because: $reason";
}

…or you can use this module directly. This is useful if you want to take advantage of the min/max width and height settings:

$validator = $modules->get('FileValidatorImage');
$validator->minWidth = 400;
$validator->minHeight = 250;
$validator->maxWidth = 1920;
$validator->maxHeight = 1080;

if($validator->isValid('/path/to/file.jpg')) {
  // image is valid
} else {
  $reason = $validator->getReason();
  "Image not valid because: $reason";
}

Copyright 2019 by Ryan Cramer Design, LLC

Install and use modules at your own risk. Always have a site and database backup before installing new modules.

Twitter updates

  • ProcessWire 3.0.185 (dev) core updates, plus new Session Allow module— More
    17 September 2021
  • Three new ProcessWire Textformatter modules: Find/Replace, Markdown in Markup, and Emoji— More
    3 September 2021
  • This week we have a new master version released after a year in the making. With nearly 40 pull requests, hundreds of new additions and more than 100 issue reports resolved, this new version has a ton of great new stuff— More
    27 August 2021

Latest news

  • ProcessWire Weekly #384
    In the 384th issue of ProcessWire Weekly we'll cover the latest core updates, introduce a new module called Session Allow, and highlight a new site of the week. Read on!
    Weekly.pw / 18 September 2021
  • ProcessWire 3.0.184 new master/main version
    This week we have a new master/main version released after a full year in the making. As you might imagine, this new version has a ton of great new stuff and we’ll try to cover much of it here.
    Blog / 27 August 2021
  • Subscribe to weekly ProcessWire news

“To Drupal, or to ProcessWire? The million dollar choice. We decided to make an early switch to PW. And in retrospect, ProcessWire was probably the best decision we made. Thanks are due to ProcessWire and the amazing system and set of modules that are in place.” —Unni Krishnan, Founder of PigtailPundits