Image File Validator

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

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

More modules by Ryan Cramer

  • Hanna Code

    Easily insert any complex HTML, Javascript or PHP output in your ProcessWire content by creating your own Hanna code tags.
  • Form Builder PRO

    Building front-end forms on your website has never been so simple. ProcessWire Form Builder lets you create, edit and publish forms with no development necessary.
  • ProCache PRO

    ProCache provides the ultimate performance for your website by completely bypassing PHP and MySQL and enabling your web server to deliver pages of your ProcessWire site as if they were static HTML…
  • ProcessWire Upgrade

    Tool that helps you identify and install core and module upgrades.
  • Site Profile Exporter

    Enables exporting of ProcessWire site profiles for sharing or distribution with others.
  • Map Marker (Google Maps)

    This Fieldtype for ProcessWire 2.1+ holds an address or location name, and automatically geocodes the address to latitude/longitude using Google Maps API.
  • Video embed for YouTube/Vimeo

    Enables translation of YouTube or Vimeo URLs to full embed codes, resulting in a viewable video in textarea fields you apply it to. Now with support for responsive videos too.
  • Import Pages from CSV files

    Enables you to import CSV files to create pages.
  • Database Backups

    Create and/or restore database backups from the ProcessWire admin.

All modules by Ryan Cramer

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