BP_GOPP_Image_Editor_GS::gs_cmd_win()
Tries to determine the Windows path of the Ghostscript executable.
Description
Return
(false|string) Returns false if can't determine path, else path.
Source
File: bp-document/classes/class-bp-gopp-image-editor-gs.php
protected static function gs_cmd_win() { $win_path = false; // Try using REG QUERY to access the registry. // Do one test query first to see if it works. $cmd = 'REG QUERY HKEY_LOCAL_MACHINE\\SOFTWARE 2>&1'; $return_var = -1; $output = array(); exec( $cmd, $output, $return_var ); if ( 0 === $return_var && is_array( $output ) ) { // Might work. $products = array( 'GPL Ghostscript', 'GNU Ghostscript', 'AFPL Ghostscript', 'Aladdin Ghostscript', ); foreach ( $products as $product ) { $cmd = sprintf( 'REG QUERY "HKEY_LOCAL_MACHINE\\SOFTWARE\\%s" /S 2>&1', $product ); $output = array(); exec( $cmd, $output, $return_var ); if ( 0 === $return_var && is_array( $output ) ) { // Find latest version. $best_match = ''; $highest_ver = 0; foreach ( $output as $out ) { $out = trim( $out ); if ( preg_match( '/^GS_DLL[\t ]+REG_SZ[\t ]+(.+)\\\\gs([0-9.]+)\\\\bin\\\\gsdll(64|32)\.dll$/', $out, $matches ) ) { $ver = (float) $matches[2]; if ( $highest_ver < $ver ) { $possible_path = $matches[1] . '\\gs' . $matches[2] . '\\bin\\gswin' . $matches[3] . 'c.exe'; if ( self::test_gs_cmd( $possible_path ) ) { $best_match = $possible_path; $highest_ver = $ver; } } } } if ( $best_match ) { $win_path = $best_match; break; } } } } if ( ! $win_path ) { // Try GSC environment variable. TODO: Is this still used? if ( ! empty( $_SERVER['GSC'] ) && is_string( $_SERVER['GSC'] ) && self::test_gs_cmd( $_SERVER['GSC'] ) ) { $win_path = $_SERVER['GSC']; } } if ( ! $win_path ) { // Try default install location. $program_dirs = array(); if ( ! empty( $_SERVER['ProgramW6432'] ) && is_string( $_SERVER['ProgramW6432'] ) ) { $program_dirs[] = stripslashes( $_SERVER['ProgramW6432'] ); } if ( ! empty( $_SERVER['ProgramFiles'] ) && is_string( $_SERVER['ProgramFiles'] ) ) { $program_dirs[] = stripslashes( $_SERVER['ProgramFiles'] ); } if ( ! empty( $_SERVER['ProgramFiles(x86)'] ) && is_string( $_SERVER['ProgramFiles(x86)'] ) ) { $program_dirs[] = stripslashes( $_SERVER['ProgramFiles(x86)'] ); } if ( $program_dirs ) { $program_dirs = array_unique( $program_dirs ); } else { $program_dirs[] = 'C:\\Program Files'; } foreach ( $program_dirs as $program_dir ) { $gs_dir = glob( $program_dir . '\\gs\\gs*', GLOB_NOESCAPE ); if ( $gs_dir ) { // Find latest version. $best_match = ''; $highest_ver = 0; foreach ( $gs_dir as $gs_entry ) { if ( preg_match( '/[0-9]+\.[0-9]+$/', $gs_entry, $matches ) ) { $ver = (float) $matches[0]; if ( $highest_ver < $ver ) { if ( @ is_executable( $gs_entry . '\\bin\\gswin64c.exe' ) && self::test_gs_cmd( $gs_entry . '\\bin\\gswin64c.exe' ) ) { $best_match = $gs_entry . '\\bin\\gswin64c.exe'; $highest_ver = $ver; } elseif ( @ is_executable( $gs_entry . '\\bin\\gswin32c.exe' ) && self::test_gs_cmd( $gs_entry . '\\bin\\gswin32c.exe' ) ) { $best_match = $gs_entry . '\\bin\\gswin32c.exe'; $highest_ver = $ver; } } } } if ( $best_match ) { $win_path = $best_match; break; } } } } // Resort to PATH. if ( ! $win_path && self::test_gs_cmd( 'gswin64c.exe' ) ) { $win_path = 'gswin64c.exe'; } if ( ! $win_path && self::test_gs_cmd( 'gswin32c.exe' ) ) { $win_path = 'gswin32c.exe'; } return $win_path; }
Changelog
Version | Description |
---|---|
BuddyBoss 1.4.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.