function loader_compatibility_test($loader_location) { $errors = array(); $sysinfo = get_sysinfo(); if (LOADER_NAME_CHECK) { $installed_loader_name = basename($loader_location); $expected_loader_name = get_loader_name(); if ($installed_loader_name != $expected_loader_name) { $errors[ERROR_LOADER_UNEXPECTED_NAME] = "The installed loader (<code>{$installed_loader_name}</code>) does not have the name expected (<code>{$expected_loader_name}</code>) for your system. Please check that you have the correct loader for your system."; } } if (empty($errors) && !is_readable($loader_location)) { $execute_error = "The loader at {$loader_location} does not appear to be readable."; $execute_error .= "<br>Please check that it exists and is readable."; $execute_error .= "<br>Please also check the permissions of the containing "; $execute_error .= (is_ms_windows() ? 'folder' : 'directory') . '.'; if ($sysinfo['SS'] == 'IIS' || !($sysinfo['IS_CGI'] || $sysinfo['IS_CLI'])) { $execute_error .= "<br>Please also check that the web server has been restarted."; } $execute_error .= "."; $errors[ERROR_LOADER_NOT_READABLE] = $execute_error; } $loader_strs = get_loader_strings($loader_location); $phpv = php_version(); if (preg_match("/php version:\\s*(.)\\.(.)\\.(..?)(-ts)?/i", $loader_strs, $version_matches)) { if ($version_matches[1] != $phpv['major'] || $version_matches[2] != $phpv['minor']) { $loader_php = $version_matches[1] . "." . $version_matches[2]; $server_php = $phpv['major'] . "." . $phpv['minor']; $errors[ERROR_LOADER_PHP_MISMATCH] = "The installed loader is for PHP {$loader_php} but your server is running PHP {$server_php}."; } if (is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE'] && !is_ms_windows() && !(isset($version_matches[4]) && $version_matches[4] == '-ts')) { $errors[ERROR_LOADER_NONTS_PHP_TS] = "Your server is running a thread-safe version of PHP but the loader is not a thread-safe version."; } elseif (isset($version_matches[4]) && $version_matches[4] == '-ts' && !(is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE'])) { $errors[ERROR_LOADER_TS_PHP_NONTS] = "Your server is running a non-thread-safe version of PHP but the loader is a thread-safe version."; } } elseif (preg_match("/ioncube_loader_.\\.._(.)\\.(.)\\.(..?)(_nonts)?\\.dll/i", $loader_strs, $version_matches)) { if (!is_ms_windows()) { $errors[ERROR_LOADER_WIN_SERVER_NONWIN] = "You have a Windows loader but your server does not appear to be running Windows."; } else { if (isset($version_matches[4]) && $version_matches[4] == '_nonts' && is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE']) { $errors[ERROR_LOADER_WIN_NONTS_PHP_TS] = "You have the non-thread-safe version of the Windows loader but you need the thread-safe one."; } elseif (!(is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE']) && !(isset($version_matches[4]) && $version_matches[4] == '_nonts')) { $errors[ERROR_LOADER_WIN_TS_PHP_NONTS] = "You have the thread-safe version of the Windows loader but you need the non-thread-safe one."; } if ($version_matches[1] != $phpv['major'] || $version_matches[2] != $phpv['minor']) { $loader_php = $version_matches[1] . "." . $version_matches[2]; $server_php = $phpv['major'] . "." . $phpv['minor']; $errors[ERROR_LOADER_WIN_PHP_MISMATCH] = "The installed loader is for PHP {$loader_php} but your server is running PHP {$server_php}."; } if (preg_match("/assemblyIdentity.*version=\"([^.]+)\\./", $loader_strs, $compiler_matches)) { $loader_compiler = "VC" . strtoupper($compiler_matches[1]); } else { $loader_compiler = 'VC6'; } if ($loader_compiler != $sysinfo['PHP_COMPILER']) { $errors[ERROR_LOADER_WIN_COMPILER_MISMATCH] = "Your loader was built using {$loader_compiler} but you need the loader built using {$sysinfo['PHP_COMPILER']}."; } } } else { $errors[ERROR_LOADER_PHP_VERSION_UNKNOWN] = "The PHP version for the loader cannot be determined - please check that you have a valid ionCube Loader."; } $errors += os_arch_string_check($loader_strs); return $errors; }
function loader_compatibility_test($loader_location) { $errors = array(); $sysinfo = get_sysinfo(); if (LOADER_NAME_CHECK) { $installed_loader_name = basename($loader_location); $expected_loader_name = get_loader_name(); if ($installed_loader_name != $expected_loader_name) { $errors[ERROR_LOADER_UNEXPECTED_NAME] = "安装的loader (<code>{$installed_loader_name}</code>) 不是系统支持的loader (<code>{$expected_loader_name}</code>) 。 请检查loader与系统是否兼容。"; } } if (empty($errors) && !is_readable($loader_location)) { $execute_error = "{$loader_location下的loader不可读。}"; $execute_error .= "<br>请检查它是否存在或可读。"; $execute_error .= "<br>请检查目录权限 "; $execute_error .= (is_ms_windows() ? 'folder' : 'directory') . '.'; if ($sysinfo['SS'] == 'IIS' || !($sysinfo['IS_CGI'] || $sysinfo['IS_CLI'])) { $execute_error .= "<br>请检查服务器是否已经重启了。"; } $execute_error .= "."; $errors[ERROR_LOADER_NOT_READABLE] = $execute_error; } $loader_strs = get_loader_strings($loader_location); $phpv = php_version(); if (preg_match("/php version:\\s*(.)\\.(.)\\.(..?)(-ts)?/i", $loader_strs, $version_matches)) { if ($version_matches[1] != $phpv['major'] || $version_matches[2] != $phpv['minor']) { $loader_php = $version_matches[1] . "." . $version_matches[2]; $server_php = $phpv['major'] . "." . $phpv['minor']; $errors[ERROR_LOADER_PHP_MISMATCH] = "安装的loader用于 PHP {$loader_php,但服务器是} PHP {$server_php}."; } if (is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE'] && !is_ms_windows() && !(isset($version_matches[4]) && $version_matches[4] == '-ts')) { $errors[ERROR_LOADER_NONTS_PHP_TS] = "服务器运行的PHP是线程安全的,但是该loader不是线程安全的。"; } elseif (isset($version_matches[4]) && $version_matches[4] == '-ts' && !(is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE'])) { $errors[ERROR_LOADER_TS_PHP_NONTS] = "服务器运行的PHP版本是非线程安全的,但该版本的loader是线程安全的。"; } } elseif (preg_match("/ioncube_loader_.\\.._(.)\\.(.)\\.(..?)(_nonts)?\\.dll/i", $loader_strs, $version_matches)) { if (!is_ms_windows()) { $errors[ERROR_LOADER_WIN_SERVER_NONWIN] = "这是一个Windows版本的loader,但服务器好像不是Windows系统。"; } else { if (isset($version_matches[4]) && $version_matches[4] == '_nonts' && is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE']) { $errors[ERROR_LOADER_WIN_NONTS_PHP_TS] = "该loader版本是非线程安全的,这里需要一个线程安全的版本。"; } elseif (!(is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE']) && !(isset($version_matches[4]) && $version_matches[4] == '_nonts')) { $errors[ERROR_LOADER_WIN_TS_PHP_NONTS] = "该loader版本是线程安全的,这里需要一个非线程安全的版本。"; } if ($version_matches[1] != $phpv['major'] || $version_matches[2] != $phpv['minor']) { $loader_php = $version_matches[1] . "." . $version_matches[2]; $server_php = $phpv['major'] . "." . $phpv['minor']; $errors[ERROR_LOADER_WIN_PHP_MISMATCH] = "已安装的loader用于 PHP {$loader_php} ,但服务器的PHP版本是 {$server_php}."; } if (preg_match("/assemblyIdentity.*version=\"([^.]+)\\./", $loader_strs, $compiler_matches)) { $loader_compiler = "VC" . strtoupper($compiler_matches[1]); } else { $loader_compiler = 'VC6'; } if ($loader_compiler != $sysinfo['PHP_COMPILER']) { $errors[ERROR_LOADER_WIN_COMPILER_MISMATCH] = "该loader用 {$loader_compiler} 编译,这里需要用 {$sysinfo['PHP_COMPILER']}编译。"; } } } else { $errors[ERROR_LOADER_PHP_VERSION_UNKNOWN] = "未能检测服务器的PHP版本 - 请自行安装可用的loader。"; } $errors += os_arch_string_check($loader_strs); return $errors; }