<?php
ini_set('max_execution_time', '0');
ini_set("memory_limit",-1);

var_dump(WEBP::init('.'));


class WEBP {
    public static $patterns = array(
        '/.*\.jpg/',
        '/.*\.jpeg/',
        '/.*\.png/',
        );
    
    public static function init($folder = '.')
    {
        //Для проверки
        self::getWebPPath();
        
        $files = self::getFiles($folder);
        $new_files = array();
        
        if(empty($files))
            return false;
        
        foreach($files as $file)
            if( is_file($file) && !file_exists($file . '.webp') ) {
                $new_files[] = $file;
                self::exec($file);
            }
        
        return $new_files; 
    }
    
    /**
     * Возвращаем все файлы по предустановленным патерном
     */  
    public static function getFiles($folder = '.')
    {
        $files = array();
        foreach(self::$patterns as $pattern)
            foreach(self::rsearch($folder, $pattern) as $file)
                $files[] = $file;
                
        return $files;
    }
    
    /**
     * Рекурсивный поиск файлов по патерну
     */
    public static function rsearch($folder, $pattern)
    {
        $dir = new RecursiveDirectoryIterator($folder);
        $ite = new RecursiveIteratorIterator($dir);
        $files = new RegexIterator($ite, $pattern, RegexIterator::GET_MATCH);
        $fileList = array();
        foreach($files as $file) {
            $fileList = array_merge($fileList, $file);
        }
        return $fileList;
    }
    
    /**
    *   Выполняем команду
    */
    public static function exec( $file )
    {
        return exec( self::getWebPPath() . ' -quiet -q 90 "' . $file . '" -o "' . $file . '.webp"' );
    }
    
    public static function getWebPPath()
    {
        return 'cwebp';
    }
}