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); }
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 ''; } }