コード例 #1
0
function ewww_image_optimizer_path_check($j = true, $o = true, $g = true, $p = true, $q = true)
{
    global $ewww_debug;
    $ewww_debug .= "<b>ewww_image_optimizer_path_check()</b><br>";
    $jpegtran = false;
    $optipng = false;
    $gifsicle = false;
    $pngout = false;
    $pngquant = false;
    // for Windows, everything must be in the wp-content/ewww folder, so that is all we check
    if ('WINNT' == PHP_OS) {
        if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'jpegtran.exe') && $j) {
            $jpt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'jpegtran.exe';
            $ewww_debug .= "found {$jpt}, testing...<br>";
            if (ewww_image_optimizer_tool_found('"' . $jpt . '"', 'j') && ewww_image_optimizer_md5check($jpt)) {
                $jpegtran = '"' . $jpt . '"';
            }
        }
        if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'optipng.exe') && $o) {
            $opt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'optipng.exe';
            $ewww_debug .= "found {$opt}, testing...<br>";
            if (ewww_image_optimizer_tool_found('"' . $opt . '"', 'o') && ewww_image_optimizer_md5check($opt)) {
                $optipng = '"' . $opt . '"';
            }
        }
        if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'gifsicle.exe') && $g) {
            $gpt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'gifsicle.exe';
            $ewww_debug .= "found {$gpt}, testing...<br>";
            if (ewww_image_optimizer_tool_found('"' . $gpt . '"', 'g') && ewww_image_optimizer_md5check($gpt)) {
                $gifsicle = '"' . $gpt . '"';
            }
        }
        if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'pngout.exe') && $p) {
            $ppt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'pngout.exe';
            $ewww_debug .= "found {$ppt}, testing...<br>";
            if (ewww_image_optimizer_tool_found('"' . $ppt . '"', 'p') && ewww_image_optimizer_md5check($ppt)) {
                $pngout = '"' . $ppt . '"';
            }
        }
        if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'pngquant.exe') && $q) {
            $qpt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'pngquant.exe';
            $ewww_debug .= "found {$qpt}, testing...<br>";
            if (ewww_image_optimizer_tool_found('"' . $qpt . '"', 'q') && ewww_image_optimizer_md5check($qpt)) {
                $pngquant = '"' . $qpt . '"';
            }
        }
    } else {
        // check to see if the user has disabled using bundled binaries
        $use_system = ewww_image_optimizer_get_option('ewww_image_optimizer_skip_bundle');
        if ($j) {
            // first check for the jpegtran binary in the ewww tool folder
            if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'jpegtran') && !$use_system) {
                $jpt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'jpegtran';
                $ewww_debug .= "found {$jpt}, testing...<br>";
                if (ewww_image_optimizer_md5check($jpt) && ewww_image_optimizer_mimetype($jpt, 'b')) {
                    $jpt = ewww_image_optimizer_escapeshellcmd($jpt);
                    if (ewww_image_optimizer_tool_found($jpt, 'j')) {
                        $jpegtran = $jpt;
                    }
                }
            }
            // if the standard jpegtran binary didn't work, see if the user custom compiled one and check that
            if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'jpegtran-custom') && !$jpegtran && !$use_system) {
                $jpt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'jpegtran-custom';
                $ewww_debug .= "found {$jpt}, testing...<br>";
                if (filesize($jpt) > 15000 && ewww_image_optimizer_mimetype($jpt, 'b')) {
                    $jpt = ewww_image_optimizer_escapeshellcmd($jpt);
                    if (ewww_image_optimizer_tool_found($jpt, 'j')) {
                        $jpegtran = $jpt;
                    }
                }
            }
            // if we still haven't found a usable binary, try a system-installed version
            if (!$jpegtran) {
                $jpegtran = ewww_image_optimizer_find_binary('jpegtran', 'j');
            }
        }
        if ($o) {
            if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'optipng') && !$use_system) {
                $opt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'optipng';
                $ewww_debug .= "found {$opt}, testing...<br>";
                if (ewww_image_optimizer_md5check($opt) && ewww_image_optimizer_mimetype($opt, 'b')) {
                    $opt = ewww_image_optimizer_escapeshellcmd($opt);
                    if (ewww_image_optimizer_tool_found($opt, 'o')) {
                        $optipng = $opt;
                    }
                }
            }
            if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'optipng-custom') && !$optipng && !$use_system) {
                $opt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'optipng-custom';
                $ewww_debug .= "found {$opt}, testing...<br>";
                if (filesize($opt) > 15000 && ewww_image_optimizer_mimetype($opt, 'b')) {
                    $opt = ewww_image_optimizer_escapeshellcmd($opt);
                    if (ewww_image_optimizer_tool_found($opt, 'o')) {
                        $optipng = $opt;
                    }
                }
            }
            if (!$optipng) {
                $optipng = ewww_image_optimizer_find_binary('optipng', 'o');
            }
        }
        if ($g) {
            if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'gifsicle') && !$use_system) {
                $gpt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'gifsicle';
                $ewww_debug .= "found {$gpt}, testing...<br>";
                if (ewww_image_optimizer_md5check($gpt) && ewww_image_optimizer_mimetype($gpt, 'b')) {
                    $gpt = ewww_image_optimizer_escapeshellcmd($gpt);
                    if (ewww_image_optimizer_tool_found($gpt, 'g')) {
                        $gifsicle = $gpt;
                    }
                }
            }
            if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'gifsicle-custom') && !$gifsicle && !$use_system) {
                $gpt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'gifsicle-custom';
                $ewww_debug .= "found {$gpt}, testing...<br>";
                if (filesize($gpt) > 15000 && ewww_image_optimizer_mimetype($gpt, 'b')) {
                    $gpt = ewww_image_optimizer_escapeshellcmd($gpt);
                    if (ewww_image_optimizer_tool_found($gpt, 'g')) {
                        $gifsicle = $gpt;
                    }
                }
            }
            if (!$gifsicle) {
                $gifsicle = ewww_image_optimizer_find_binary('gifsicle', 'g');
            }
        }
        if ($p) {
            // pngout is special and has a dynamic and static binary to check
            if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'pngout-static') && !$use_system) {
                $ppt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'pngout-static';
                $ewww_debug .= "found {$ppt}, testing...<br>";
                if (ewww_image_optimizer_md5check($ppt) && ewww_image_optimizer_mimetype($ppt, 'b')) {
                    $ppt = ewww_image_optimizer_escapeshellcmd($ppt);
                    if (ewww_image_optimizer_tool_found($ppt, 'p')) {
                        $pngout = $ppt;
                    }
                }
            }
            if (!$pngout) {
                $pngout = ewww_image_optimizer_find_binary('pngout', 'p');
            }
            if (!$pngout) {
                $pngout = ewww_image_optimizer_find_binary('pngout-static', 'p');
            }
        }
        if ($q) {
            if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'pngquant') && !$use_system) {
                $qpt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'pngquant';
                $ewww_debug .= "found {$qpt}, testing...<br>";
                if (ewww_image_optimizer_md5check($qpt) && ewww_image_optimizer_mimetype($qpt, 'b')) {
                    $qpt = ewww_image_optimizer_escapeshellcmd($qpt);
                    if (ewww_image_optimizer_tool_found($qpt, 'q')) {
                        $pngquant = $qpt;
                    }
                }
            }
            if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'pngquant-custom') && !$pngquant && !$use_system) {
                $qpt = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . 'pngquant-custom';
                $ewww_debug .= "found {$qpt}, testing...<br>";
                if (filesize($qpt) > 15000 && ewww_image_optimizer_mimetype($qpt, 'b')) {
                    $qpt = ewww_image_optimizer_escapeshellcmd($qpt);
                    if (ewww_image_optimizer_tool_found($qpt, 'q')) {
                        $pngquant = $qpt;
                    }
                }
            }
            if (!$pngquant) {
                $pngquant = ewww_image_optimizer_find_binary('pngquant', 'q');
            }
        }
    }
    if ($jpegtran) {
        $ewww_debug .= "using: {$jpegtran}<br>";
    }
    if ($optipng) {
        $ewww_debug .= "using: {$optipng}<br>";
    }
    if ($gifsicle) {
        $ewww_debug .= "using: {$gifsicle}<br>";
    }
    if ($pngout) {
        $ewww_debug .= "using: {$pngout}<br>";
    }
    if ($pngquant) {
        $ewww_debug .= "using: {$pngquant}<br>";
    }
    return array('JPEGTRAN' => $jpegtran, 'OPTIPNG' => $optipng, 'GIFSICLE' => $gifsicle, 'PNGOUT' => $pngout, 'PNGQUANT' => $pngquant);
}
コード例 #2
0
function ewww_image_optimizer_find_nix_binary($binary, $switch)
{
    ewwwio_debug_message('<b>' . __FUNCTION__ . '()</b>');
    if (empty($binary) || empty($switch)) {
        return '';
    }
    $use_system = ewww_image_optimizer_get_option('ewww_image_optimizer_skip_bundle');
    // first check for the binary in the ewww tool folder
    if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . $binary) && !$use_system) {
        $binary_path = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . $binary;
        ewwwio_debug_message("found {$binary_path}, testing...");
        if (ewww_image_optimizer_md5check($binary_path) && ewww_image_optimizer_mimetype($binary_path, 'b')) {
            $binary_path = ewww_image_optimizer_escapeshellcmd($binary_path);
            if (ewww_image_optimizer_tool_found($binary_path, $switch)) {
                return $binary_path;
            }
        }
    }
    // if the standard binary didn't work, see if the user custom compiled one and check that
    if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . $binary . '-custom') && !$use_system) {
        $binary_path = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . $binary . '-custom';
        ewwwio_debug_message("found {$binary_path}, testing...");
        if (filesize($binary_path) > 15000 && ewww_image_optimizer_mimetype($binary_path, 'b')) {
            $binary_path = ewww_image_optimizer_escapeshellcmd($binary_path);
            if (ewww_image_optimizer_tool_found($binary_path, $switch)) {
                return $binary_path;
            }
        }
    }
    // see if the alternative binary works
    if (file_exists(EWWW_IMAGE_OPTIMIZER_TOOL_PATH . $binary . '-alt') && !$use_system) {
        $binary_path = EWWW_IMAGE_OPTIMIZER_TOOL_PATH . $binary . '-alt';
        ewwwio_debug_message("found {$binary_path}, testing...");
        if (filesize($binary_path) > 15000 && ewww_image_optimizer_mimetype($binary_path, 'b')) {
            $binary_path = ewww_image_optimizer_escapeshellcmd($binary_path);
            if (ewww_image_optimizer_tool_found($binary_path, $switch)) {
                return $binary_path;
            }
        }
    }
    // if we still haven't found a usable binary, try a system-installed version
    if (ewww_image_optimizer_tool_found($binary, $switch)) {
        return $binary;
    } elseif (ewww_image_optimizer_tool_found('/usr/bin/' . $binary, $switch)) {
        return '/usr/bin/' . $binary;
    } elseif (ewww_image_optimizer_tool_found('/usr/local/bin/' . $binary, $switch)) {
        return '/usr/local/bin/' . $binary;
    } elseif (ewww_image_optimizer_tool_found('/usr/gnu/bin/' . $binary, $switch)) {
        return '/usr/gnu/bin/' . $binary;
    } elseif (ewww_image_optimizer_tool_found('/usr/syno/bin/' . $binary, $switch)) {
        // for synology diskstation OS
        return '/usr/syno/bin/' . $binary;
    } else {
        return '';
    }
}