diff --git a/www/loader-wizard.php b/www/loader-wizard.php
new file mode 100755
index 0000000000..7bb0a2e46d
--- /dev/null
+++ b/www/loader-wizard.php
@@ -0,0 +1,3872 @@
+$v) {
+ $tmp_key = urlencode(is_int($k) ? $numeric_prefix.$k : $k);
+ if ($key) $tmp_key = $key.'['.$tmp_key.']';
+ if ( is_array($v) || is_object($v) ) {
+ $res[] = php4_http_build_query($v, null , $tmp_key);
+ } else {
+ $res[] = $tmp_key."=".urlencode($v);
+ }
+ }
+ $separator = ini_get('arg_separator.output');
+ return implode($separator, $res);
+}
+
+
+function script_version()
+{
+ return "2.36";
+}
+
+function retrieve_latest_wizard_version()
+{
+ $v = false;
+
+ $s = trim(remote_file_contents(WIZARD_LATEST_VERSION_URL));
+ if (preg_match('/^\d+([.]\d+)*$/', $s)) {
+ $v = $s;
+ }
+
+ return $v;
+}
+
+function latest_wizard_version()
+{
+ if (!isset($_SESSION['latest_wizard_version'])) {
+ $_SESSION['latest_wizard_version'] = retrieve_latest_wizard_version();
+ }
+ return $_SESSION['latest_wizard_version'];
+}
+
+function update_is_available($lv)
+{
+ if (is_numeric($lv)) {
+ $lv_parts = explode('.',$lv);
+ $script_parts = explode('.',script_version());
+ return ($lv_parts[0] > $script_parts[0] || ($lv_parts[0] == $script_parts[0] && $lv_parts[1] > $script_parts[1]));
+ } else {
+ return null;
+ }
+}
+
+function check_for_wizard_update($echo_message = false)
+{
+ $latest_version = latest_wizard_version();
+ $update_available = update_is_available($latest_version);
+
+ if ($update_available) {
+ if ($echo_message) {
+ echo '
该文件有一个新的版本,点击这里 查看.
';
+ }
+ return $latest_version;
+ } else {
+ return $update_available;
+ }
+}
+
+
+function remote_file_contents($url)
+{
+ $remote_file_opening = ini_get('allow_url_fopen');
+ $contents = false;
+ if (isset($_SESSION['timing_out']) && $_SESSION['timing_out']) {
+ return false;
+ }
+ @session_write_close();
+ $timing_out = 0;
+ if ($remote_file_opening) {
+ $fh = @fopen($url,'rb');
+ if ($fh) {
+ stream_set_blocking($fh,0);
+ stream_set_timeout($fh,IONCUBE_CONNECT_TIMEOUT);
+ while (!feof($fh)) {
+ $result = fgets($fh, 4096);
+ $info = stream_get_meta_data($fh);
+ $timing_out = $info['timed_out']?1:0;
+ if ($timing_out) {
+ break;
+ }
+ if ($result !== false) {
+ $contents .= $result;
+ } else {
+ break;
+ }
+ }
+ fclose($fh);
+ } else {
+ $timing_out = 1;
+ }
+ } elseif (extension_loaded('curl')) {
+ $ch = curl_init();
+
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_HEADER, 0);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,IONCUBE_CONNECT_TIMEOUT);
+ $output = curl_exec($ch);
+ $info = curl_getinfo($ch);
+ $timing_out = ($info['http_code'] >= 400)?1:0;
+ curl_close($ch);
+
+ if (is_string($output)) {
+ $contents = $output;
+ }
+ } else {
+ $timing_out = 1;
+ }
+ @session_start();
+ $_SESSION['timing_out'] = $timing_out;
+ return $contents;
+}
+
+function php_version()
+{
+ $v = explode('.',PHP_VERSION);
+
+ return array(
+ 'major' => $v[0],
+ 'minor' => $v[1],
+ 'release' => $v[2]);
+}
+
+function php_version_maj_min()
+{
+ $vprts = php_version();
+ return ($vprts['major'] . '.' . $vprts['minor']);
+}
+
+function is_supported_php_version()
+{
+ $v = php_version();
+
+ return ((($v['major'] == 4) && ($v['minor'] >= 1)) ||
+ (($v['major'] == 5) && (($v['minor'] >= 1) || ($v['release'] >= 3))));
+}
+
+function is_php_version_or_greater($major,$minor,$release = 0)
+{
+ $version = php_version();
+ return ($version['major'] > $major ||
+ ($version['major'] == $major && $version['minor'] > $minor) ||
+ ($version['major'] == $major && $version['minor'] == $minor && $version['release'] >= $release));
+}
+
+function ini_file_name()
+{
+ $sysinfo = get_sysinfo();
+ return (!empty($sysinfo['PHP_INI'])?$sysinfo['PHP_INI_BASENAME']:'php.ini');
+}
+
+function get_remote_session_value($session_var,$remote_url,$default_function)
+{
+ if (!isset($_SESSION[$session_var])) {
+ $serialised_res = remote_file_contents($remote_url);
+ $unserialised_res = @unserialize($serialised_res);
+ if (empty($unserialised_res)) {
+ $unserialised_res = call_user_func($default_function);
+ }
+ if (false === $unserialised_res) {
+ $unserialised_res = '';
+ }
+ $_SESSION[$session_var] = $unserialised_res;
+ }
+ return $_SESSION[$session_var];
+}
+
+function get_file_contents($file)
+{
+ if (function_exists('file_get_contents')) {
+ $strs = @file_get_contents($file);
+ } else {
+ $lines = @file($file);
+ $strs = join(' ',$lines);
+ }
+ return $strs;
+}
+
+function default_platform_list()
+{
+ $platforms = array();
+
+
+ $platforms[] = array('os'=>'win', 'os_human'=>'Windows VC6', 'os_mod' => '_vc6', 'arch'=>'x86', 'dirname'=>'win32', 'us1-dir'=>'windows_vc6/x86' );
+ $platforms[] = array('os'=>'win', 'os_human'=>'Windows VC6 (Non-TS)', 'os_mod' => '_nonts_vc6', 'arch'=>'x86', 'dirname'=>'win32-nonts', 'us1-dir'=>'windows_vc6/x86-nonts' );
+
+ $platforms[] = array('os'=>'win', 'os_human'=>'Windows VC9', 'os_mod' => '_vc9', 'arch'=>'x86', 'dirname'=>'win32_vc9', 'us1-dir'=>'windows_vc9/x86' );
+ $platforms[] = array('os'=>'win', 'os_human'=>'Windows VC9 (Non-TS)', 'os_mod' => '_nonts_vc9', 'arch'=>'x86', 'dirname'=>'win32-nonts_vc9', 'us1-dir'=>'windows_vc9/x86-nonts' );
+
+ $platforms[] = array('os'=>'lin', 'os_human'=>'Linux', 'arch'=>'x86', 'dirname'=>'linux_i686-glibc2.1.3', 'us1-dir'=>'linux/x86');
+ $platforms[] = array('os'=>'lin', 'os_human'=>'Linux', 'arch'=>'x86-64', 'dirname'=>'linux_x86_64-glibc2.3.4', 'us1-dir'=>'linux/x86_64');
+$platforms[] = array('os'=>'lin','os_human'=>'Linux', 'arch'=>'ppc', 'dirname'=>'linux_ppc-glibc2.3.4','us1-dir'=>'linux/ppc');
+ $platforms[] = array('os'=>'lin','os_human'=>'Linux', 'arch'=>'ppc64', 'dirname'=>'linux_ppc64-glibc2.5','us1-dir'=>'linux/ppc64');
+
+
+$platforms[] = array('os'=>'dra', 'os_human'=>'DragonFly',
+ 'arch'=>'x86', 'dirname'=>'dragonfly_i386-1.7', 'us1-dir'=>'Dragonfly/x86');
+
+$platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 4', 'os_mod'=>'_4', 'arch'=>'x86', 'dirname'=>'freebsd_i386-4.8', 'us1-dir'=>'FreeBSD/v4');
+
+ $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 6', 'os_mod'=>'_6', 'arch'=>'x86', 'dirname'=>'freebsd_i386-6.2', 'us1-dir'=>'FreeBSD/v6/x86');
+
+ $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 6', 'os_mod'=>'_6', 'arch'=>'x86-64', 'dirname'=>'freebsd_amd64-6.2', 'us1-dir'=>'FreeBSD/v6/AMD64');
+
+
+ $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 7', 'os_mod'=>'_7', 'arch'=>'x86', 'dirname'=>'freebsd_i386-7.3', 'us1-dir'=>'FreeBSD/v7/x86');
+ $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 7', 'os_mod'=>'_7', 'arch'=>'x86-64', 'dirname'=>'freebsd_amd64-7.3', 'us1-dir'=>'FreeBSD/v7/AMD64');
+
+
+ $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 8', 'os_mod'=>'_8', 'arch'=>'x86', 'dirname'=>'freebsd_i386-8.0', 'us1-dir'=>'FreeBSD/v8/x86');
+ $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 8', 'os_mod'=>'_8', 'arch'=>'x86-64', 'dirname'=>'freebsd_amd64-8.0', 'us1-dir'=>'FreeBSD/v8/AMD64');
+
+ $platforms[] = array('os'=>'bsd', 'os_human'=>'BSDi', 'arch'=>'x86', 'dirname'=>'bsdi_i386-4.3.1');
+ $platforms[] = array('os'=>'net', 'os_human'=>'NetBSD', 'arch'=>'x86', 'dirname'=>'netbsd_i386-2.1','us1-dir'=>'NetBSD/x86');
+ $platforms[] = array('os'=>'net', 'os_human'=>'NetBSD', 'arch'=>'x86-64', 'dirname'=>'netbsd_amd64-2.0','us1-dir'=>'NetBSD/x86_64');
+ $platforms[] = array('os'=>'ope', 'os_human'=>'OpenBSD 4.2', 'os_mod'=>'_4.2', 'arch'=>'x86', 'dirname'=>'openbsd_i386-4.2', 'us1-dir'=>'OpenBSD/x86');
+
+ $platforms[] = array('os'=>'ope', 'os_human'=>'OpenBSD 4.5', 'os_mod'=>'_4.5', 'arch'=>'x86', 'dirname'=>'openbsd_i386-4.5', 'us1-dir'=>'OpenBSD/x86');
+ $platforms[] = array('os'=>'ope', 'os_human'=>'OpenBSD 4.6', 'os_mod'=>'_4.6', 'arch'=>'x86', 'dirname'=>'openbsd_i386-4.6', 'us1-dir'=>'OpenBSD/x86');
+
+ $platforms[] = array('os'=>'ope', 'os_human'=>'OpenBSD 4.7', 'os_mod'=>'_4.7', 'arch'=>'x86-64', 'dirname'=>'openbsd_amd64-4.7', 'us1-dir' => 'OpenBSD/x86_64');
+
+ $platforms[] = array('os'=>'dar', 'os_human'=>'OS X', 'arch'=>'ppc', 'dirname'=>'osx_powerpc-8.5','us1-dir'=>'OSX/ppc');
+
+ $platforms[] = array('os'=>'dar', 'os_human'=>'OS X', 'arch'=>'x86', 'dirname'=>'osx_i386-8.11','us1-dir'=>'OSX/x86');
+
+ $platforms[] = array('os'=>'dar', 'os_human'=>'OS X', 'arch'=>'x86-64', 'dirname'=>'osx_x86-64-10.2','us1-dir'=>'OSX/x86_64');
+
+ $platforms[] = array('os'=>'sun', 'os_human'=>'Solaris', 'arch'=>'sparc', 'dirname'=>'solaris_sparc-5.9', 'us1-dir'=>'Solaris/sparc');
+
+ $platforms[] = array('os'=>'sun', 'os_human'=>'Solaris', 'arch'=>'x86', 'dirname'=>'solaris_i386-5.10','us1-dir'=>'Solaris/x86');
+
+ return $platforms;
+}
+
+function get_loader_platforms()
+{
+ return get_remote_session_value('loader_platform_info',LOADER_PLATFORM_URL,'default_platform_list');
+}
+
+function get_platforminfo()
+{
+ static $platforminfo;
+
+ if (empty($platforminfo)) {
+ $platforminfo = get_loader_platforms();
+ }
+ return $platforminfo;
+}
+
+function supported_os_variants($os_code,$arch_code)
+{
+ if (empty($os_code)) {
+ return ERROR_UNKNOWN_OS;
+ }
+ if (empty($arch_code)) {
+ return ERROR_UNKNOWN_ARCH;
+ }
+
+ $os_found = false;
+ $arch_found = false;
+ $os_arch_matches = array();
+ $pinfo = get_platforminfo();
+
+ foreach ($pinfo as $p) {
+ if ($p['os'] == $os_code && $p['arch'] == $arch_code) {
+ $os_arch_matches[$p['os_human']] = (isset($p['os_mod']))?(0 + str_replace('_','',$p['os_mod'])):'';
+ }
+ if ($p['os'] == $os_code) {
+ $os_found = true;
+ } elseif ($p['arch'] == $arch_code) {
+ $arch_found = true;
+ }
+ }
+ if (!empty($os_arch_matches)) {
+ asort($os_arch_matches);
+ return $os_arch_matches;
+ } elseif (!$os_found) {
+ return ERROR_UNSUPPORTED_OS;
+ } elseif (!$arch_found) {
+ return ERROR_UNSUPPORTED_ARCH;
+ } else {
+ return ERROR_UNSUPPORTED_ARCH_OS;
+ }
+}
+
+function default_win_compilers()
+{
+ return array('VC6','VC9');
+}
+
+function supported_win_compilers()
+{
+ static $win_compilers;
+
+ if (empty($win_compilers)) {
+ $win_compilers = find_win_compilers();
+ }
+ return $win_compilers;
+}
+
+function find_win_compilers()
+{
+ return get_remote_session_value('php_compilers_info',PHP_COMPILERS_URL,'default_win_compilers');
+}
+
+function server_software_info()
+{
+ $ss = array('full' => '','short' => '');
+ $ss['full'] = $_SERVER['SERVER_SOFTWARE'];
+
+ if (preg_match('/apache/i', $ss['full'])) {
+ $ss['short'] = 'Apache';
+ } else if (preg_match('/IIS/',$ss['full'])) {
+ $ss['short'] = 'IIS';
+ } else {
+ $ss['short'] = '';
+ }
+ return $ss;
+}
+
+function match_arch_pattern($str)
+{
+ $arch = null;
+ $arch_patterns = array(
+ 'i.?86' => 'x86',
+ 'x86[-_]64' => 'x86',
+ 'x86' => 'x86',
+ 'amd64' => 'x86',
+ 'ppc64' => 'ppc',
+ 'ppc' => 'ppc',
+ 'powerpc' => 'ppc',
+ 'sparc' => 'sparc',
+ 'sun' => 'sparc'
+ );
+
+ foreach ($arch_patterns as $token => $a) {
+ if (preg_match("/$token/i", $str)) {
+ $arch = $a;
+ break;
+ }
+ }
+ return $arch;
+}
+
+function required_loader_arch($mach_info,$os_code,$wordsize)
+{
+ if ($os_code == 'win') {
+ $arch = ($wordsize == 32)?'x86':'x86-64';
+ if ($wordsize != 32) {
+ $arch = ERROR_WINDOWS_64_BIT;
+ }
+ } elseif (!empty($os_code)) {
+ $arch = match_arch_pattern($mach_info);
+ if ($wordsize == 64) {
+ if ($arch == 'x86') {
+ $arch = 'x86-64';
+ } elseif ($arch == 'ppc') {
+ $arch = 'ppc64';
+ }
+ }
+ } else {
+ $arch = ERROR_UNKNOWN_ARCH;
+ }
+ return $arch;
+}
+
+function uname($part = 'a')
+{
+ $result = '';
+ if (!function_is_disabled('php_uname')) {
+ $result = @php_uname($part);
+ } elseif (function_exists('posix_uname') && !function_is_disabled('posix_uname')) {
+ $posix_equivs = array(
+ 'm' => 'machine',
+ 'n' => 'nodename',
+ 'r' => 'release',
+ 's' => 'sysname'
+ );
+ $puname = @posix_uname();
+ if ($part == 'a' || !array_key_exists($part,$posix_equivs)) {
+ $result = join(' ',$puname);
+ } else {
+ $result = $puname[$posix_equivs[$part]];
+ }
+ } else {
+ if (!function_is_disabled('phpinfo')) {
+ ob_start();
+ phpinfo(INFO_GENERAL);
+ $pinfo = ob_get_contents();
+ ob_end_clean();
+ if (preg_match('~System.*?(| => |v">)([^<]*)~i',$pinfo,$match)) {
+ $uname = $match[2];
+ if ($part == 'r') {
+ if (!empty($uname) && preg_match('/\S+\s+\S+\s+([0-9.]+)/',$uname,$matchver)) {
+ $result = $matchver[1];
+ } else {
+ $result = '';
+ }
+ } else {
+ $result = $uname;
+ }
+ }
+ } else {
+ $result = '';
+ }
+ }
+ return $result;
+}
+
+function calc_word_size($os_code)
+{
+ $wordsize = null;
+ if ('win' === $os_code) {
+ ob_start();
+ phpinfo(INFO_GENERAL);
+ $pinfo = ob_get_contents();
+ ob_end_clean();
+ if (preg_match('~Compiler.*?( | => |v">)([^<]*)~i',$pinfo,$compmatch)) {
+ if (preg_match("/(VC[0-9]+)/i",$compmatch[2],$vcmatch)) {
+ $compiler = strtoupper($vcmatch[1]);
+ } else {
+ $compiler = 'VC6';
+ }
+ } else {
+ $compiler = 'VC6';
+ }
+ if ($compiler === 'VC9') {
+ if (isset($_ENV['PROCESSOR_ARCHITECTURE']) && preg_match('~(amd64|x86-64|x86_64)~i',$_ENV['PROCESSOR_ARCHITECTURE'])) {
+ if (preg_match('~Configure Command.*?( | => |v">)([^<]*)~i',$pinfo,$confmatch)) {
+ if (preg_match('~(x64|lib64|system64)~i',$confmatch[2])) {
+ $wordsize = 64;
+ }
+ }
+ }
+ }
+ }
+ if (empty($wordsize)) {
+ $wordsize = ((-1^0xffffffff)?64:32);
+ }
+ return $wordsize;
+}
+
+function required_loader($unamestr = '')
+{
+ $un = empty($unamestr)?uname():$unamestr;
+
+ $php_major_version = substr(PHP_VERSION,0,3);
+
+ $os_name = substr($un,0,strpos($un,' '));
+ $os_code = empty($os_name)?'':strtolower(substr($os_name,0,3));
+
+ $wordsize = calc_word_size($os_code);
+
+ $arch = required_loader_arch($un,$os_code,$wordsize);
+ if (!is_string($arch)) {
+ return $arch;
+ }
+ $os_variants = supported_os_variants($os_code,$arch);
+ if (!is_array($os_variants)) {
+ return $os_variants;
+ }
+
+ $os_ver = '';
+ if (preg_match('/([0-9.]+)/',uname('r'),$match)) {
+ $os_ver = $match[1];
+ }
+ $os_ver_parts = preg_split('@\.@',$os_ver);
+
+ $loader_sfix = (($os_code == 'win') ? 'dll' : 'so');
+ $file = "ioncube_loader_${os_code}_${php_major_version}.${loader_sfix}";
+
+ if ($os_code == 'win') {
+ $os_name = 'Windows';
+ $file_ts = $file;
+ $os_name_qual = 'Windows';
+ } else {
+ $os_names = array_keys($os_variants);
+ if (count($os_variants) > 1) {
+ $parts = explode(" ",$os_names[0]);
+ $os_name = $parts[0];
+ $os_name_qual = $os_name . ' ' . $os_ver_parts[0] . '.' . $os_ver_parts[1];
+ } else {
+ $os_name = $os_names[0];
+ $os_name_qual = $os_name;
+ }
+ $file_ts = "ioncube_loader_${os_code}_${php_major_version}_ts.${loader_sfix}";
+ }
+
+ return array(
+ 'uname' => $un,
+ 'arch' => $arch,
+ 'oscode' => $os_code,
+ 'osname' => $os_name,
+ 'osnamequal' => $os_name_qual,
+ 'osvariants' => $os_variants,
+ 'osver' => $os_ver,
+ 'osver2' => $os_ver_parts,
+ 'file' => $file,
+ 'file_ts' => $file_ts,
+ 'wordsize' => $wordsize
+ );
+}
+
+function ic_system_info()
+{
+ $thread_safe = null;
+ $debug_build = null;
+ $cgi_cli = false;
+ $is_cgi = false;
+ $is_cli = false;
+ $php_ini_path = '';
+ $php_ini_dir = '';
+ $php_ini_add = '';
+ $is_supported_compiler = true;
+ $php_compiler = is_ms_windows()?'VC6':'';
+
+ ob_start();
+ phpinfo(INFO_GENERAL);
+ $php_info = ob_get_contents();
+ ob_end_clean();
+
+ $breaker = (php_sapi_name() == 'cli')?'\n':'';
+ $lines = explode($breaker,$php_info);
+ foreach ($lines as $line) {
+ if (preg_match('/command/i',$line)) {
+ continue;
+ }
+
+ if (preg_match('/thread safety/i', $line)) {
+ $thread_safe = (preg_match('/(enabled|yes)/i', $line) != 0);
+ }
+
+ if (preg_match('/debug build/i', $line)) {
+ $debug_build = (preg_match('/(enabled|yes)/i', $line) != 0);
+ }
+
+ if (preg_match('~configuration file.*( | => |v">)([^ <]*)~i',$line,$match)) {
+ $php_ini_path = $match[2];
+
+ if (!@file_exists($php_ini_path)) {
+ $php_ini_path = '';
+ }
+ }
+ if (preg_match('~dir for additional \.ini files.*( | => |v">)([^ <]*)~i',$line,$match)) {
+ $php_ini_dir = $match[2];
+ if (!@file_exists($php_ini_dir)) {
+ $php_ini_dir = '';
+ }
+ }
+ if (preg_match('~additional \.ini files parsed.*( | => |v">)([^ <]*)~i',$line,$match)) {
+ $php_ini_add = $match[2];
+ }
+ if (preg_match('/compiler/i',$line)) {
+ $supported_match = join('|',supported_win_compilers());
+ $is_supported_compiler = preg_match("/($supported_match)/i",$line);
+ if (preg_match("/(VC[0-9]+)/i",$line,$match)) {
+ $php_compiler = strtoupper($match[1]);
+ } else {
+ $php_compiler = '';
+ }
+ }
+ }
+ $is_cgi = strpos(php_sapi_name(),'cgi') !== false;
+ $is_cli = strpos(php_sapi_name(),'cli') !== false;
+ $cgi_cli = $is_cgi || $is_cli;
+
+ $ss = server_software_info();
+
+ if (!$php_ini_path && function_exists('php_ini_loaded_file')) {
+ $php_ini_path = php_ini_loaded_file();
+ if ($php_ini_path === false) {
+ $php_ini_path = '';
+ }
+ }
+ if (!empty($php_ini_path)) {
+ $real_path = @realpath($php_ini_path);
+ if (false !== $real_path) {
+ $php_ini_path = $real_path;
+ }
+ }
+
+ $php_ini_basename = basename($php_ini_path);
+
+ return array(
+ 'THREAD_SAFE' => $thread_safe,
+ 'DEBUG_BUILD' => $debug_build,
+ 'PHP_INI' => $php_ini_path,
+ 'PHP_INI_BASENAME' => $php_ini_basename,
+ 'PHP_INI_DIR' => $php_ini_dir,
+ 'PHP_INI_ADDITIONAL' => $php_ini_add,
+ 'PHPRC' => getenv('PHPRC'),
+ 'CGI_CLI' => $cgi_cli,
+ 'IS_CGI' => $is_cgi,
+ 'IS_CLI' => $is_cli,
+ 'PHP_COMPILER' => $php_compiler,
+ 'SUPPORTED_COMPILER' => $is_supported_compiler,
+ 'FULL_SS' => $ss['full'],
+ 'SS' => $ss['short']);
+}
+
+function is_possibly_dedicated_or_local()
+{
+ $sys = get_sysinfo();
+
+ return (empty($sys['PHP_INI']) || !@file_exists($sys['PHP_INI']) || (is_readable($sys['PHP_INI']) && (0 !== strpos($sys['PHP_INI'],$_SERVER['DOCUMENT_ROOT']))));
+}
+
+function is_local()
+{
+ $ret = false;
+ if ($_SERVER["SERVER_NAME"] == 'localhost') {
+ $ret = true;
+ } else {
+ $ip_address = strtolower($_SERVER["REMOTE_ADDR"]);
+ if (strpos(':',$ip_address) === false) {
+ $ip_parts = explode('.',$ip_address);
+ $ret = (($ip_parts[0] == 10) ||
+ ($ip_parts[0] == 172 && $ip_parts[1] >= 16 && $ip_parts[1] <= 31) ||
+ ($ip_parts[0] == 192 && $ip_parts[1] == 168));
+ } else {
+ $ret = ($ip_address == '::1') || (($ip_address[0] == 'f') && ($ip_address[1] >= 'c' && $ip_address[1] <= 'f'));
+ }
+ }
+ return $ret;
+}
+
+function is_shared()
+{
+ return !is_local() && !is_possibly_dedicated_or_local();
+}
+
+function find_server_type($chosen_type = '',$type_must_be_chosen = false,$set_session = false)
+{
+ $server_type = SERVER_UNKNOWN;
+ if (empty($chosen_type)) {
+ if ($type_must_be_chosen) {
+ $server_type = SERVER_UNKNOWN;
+ } else {
+ if (isset($_SESSION['server_type']) && $_SESSION['server_type'] != SERVER_UNKNOWN) {
+ $server_type = $_SESSION['server_type'];
+ } elseif (is_local()) {
+ $server_type = SERVER_LOCAL;
+ } elseif (!is_possibly_dedicated_or_local()) {
+ $server_type = SERVER_SHARED;
+ } else {
+ $server_type = SERVER_UNKNOWN;
+ }
+ }
+ } else {
+ switch ($chosen_type) {
+ case 's':
+ $server_type = SERVER_SHARED;
+ break;
+ case 'd':
+ $server_type = SERVER_DEDICATED;
+ break;
+ case 'l':
+ $server_type = SERVER_LOCAL;
+ break;
+ default:
+ $server_type = SERVER_UNKNOWN;
+ break;
+ }
+ }
+ if ($set_session) {
+ $_SESSION['server_type'] = $server_type;
+ }
+ return $server_type;
+}
+
+function server_type_string()
+{
+ $server_code = find_server_type();
+ switch ($server_code) {
+ case SERVER_SHARED:
+ $server_string = 'SHARED';
+ break;
+ case SERVER_LOCAL:
+ $server_string = 'LOCAL';
+ break;
+ case SERVER_DEDICATED:
+ $server_string = 'DEDICATED';
+ break;
+ default:
+ $server_string = 'UNKNOWN';
+ break;
+ }
+ return $server_string;
+}
+
+function server_type_code()
+{
+ $server_code = find_server_type();
+ switch ($server_code) {
+ case SERVER_SHARED:
+ $server_char = 's';
+ break;
+ case SERVER_LOCAL:
+ $server_char = 'l';
+ break;
+ case SERVER_DEDICATED:
+ $server_char = 'd';
+ break;
+ default:
+ $server_char = '';
+ break;
+ }
+ return $server_char;
+}
+
+function get_sysinfo()
+{
+ static $sysinfo;
+
+ if (empty($sysinfo)) {
+ $sysinfo = ic_system_info();
+ }
+ return $sysinfo;
+}
+
+function get_loaderinfo()
+{
+ static $loader;
+
+ if (empty($loader)) {
+ $loader = required_loader();
+ }
+ return $loader;
+}
+
+function is_ms_windows()
+{
+ $loader_info = get_loaderinfo();
+ return ($loader_info['oscode'] == 'win');
+}
+
+function function_is_disabled($fn_name)
+{
+ $disabled_functions=explode(',',ini_get('disable_functions'));
+ return in_array($fn_name, $disabled_functions);
+}
+
+function selinux_is_enabled()
+{
+ $se_enabled = false;
+
+ if (!is_ms_windows()) {
+ $cmd = @shell_exec('sestatus');
+ $se_enabled = preg_match('/enabled/i',$cmd);
+ }
+
+ return $se_enabled;
+}
+
+function grsecurity_is_enabled()
+{
+ $gr_enabled = false;
+
+ if (!is_ms_windows()) {
+ $cmd = @shell_exec('gradm -S');
+ $gr_enabled = preg_match('/enabled/i',$cmd);
+ }
+
+ return $gr_enabled;
+}
+
+function threaded_and_not_cgi()
+{
+ $sys = get_sysinfo();
+ return($sys['THREAD_SAFE'] && !$sys['IS_CGI']);
+}
+
+function is_restricted_server($only_safe_mode = false)
+{
+ $disable_functions = ini_get('disable_functions');
+ $open_basedir = ini_get('open_basedir');
+ $php_restrictions = !empty($disable_functions) || !empty($open_basedir);
+ $system_restrictions = selinux_is_enabled() || grsecurity_is_enabled();
+ $non_safe_mode_restrictions = $php_restrictions || $system_restrictions;
+ return (ini_get('safe_mode') || (!$only_safe_mode && $non_safe_mode_restrictions));
+}
+
+function server_restriction_warnings()
+{
+ $warnings = array();
+
+ if (find_server_type() == SERVER_SHARED) {
+ if (is_restricted_server()) {
+ $warnings[] = "服务器的限制可能影响向导的进行和加密程序的安装。";
+ }
+ } else {
+ $warning_suffix = "这可能会对加密向导产生影响。";
+ if (ini_get('safe_mode')) {
+ $warnings[] = "服务器已经开启安全模式(php已设置safe_mode)," . $warning_suffix;
+ }
+ $disabled_functions = ini_get('disable_functions');
+ if (!empty($disabled_functions)) {
+ $warnings[] = "一些php方法不可用(php已设置disable_functions)," . $warning_suffix;
+ }
+ $open_basedir = ini_get('open_basedir');
+ if (!empty($open_basedir)) {
+ $warnings[] = "php的open_basedir不为空," . $warning_suffix;
+ }
+ }
+ return $warnings;
+}
+
+function own_php_ini_possible($only_safe_mode = false)
+{
+ $sysinfo = get_sysinfo();
+ return ($sysinfo['CGI_CLI'] && !is_ms_windows() && !is_restricted_server($only_safe_mode));
+}
+
+function extension_dir()
+{
+ $extdir = ini_get('extension_dir');
+ if ($extdir == './' || ($extdir == '.\\' && is_ms_windows())) {
+ $extdir = '.';
+ }
+ return $extdir;
+}
+
+function possibly_selinux()
+{
+ $loaderinfo = get_loaderinfo();
+ $se_env = (getenv("SELINUX_INIT"));
+ return (strtolower($loaderinfo['osname']) == 'linux' && $se_env && ($se_env == 'Yes' || $se_env == '1'));
+}
+
+function ini_same_dir_as_wizard()
+{
+ $sys = get_sysinfo();
+ return dirname($sys['PHP_INI']) == dirname(__FILE__);
+}
+
+function extension_dir_path()
+{
+ $ext_dir = extension_dir();
+ if ($ext_dir == '.' || (dirname($ext_dir) == '.')) {
+ $ext_dir_path = @realpath($ext_dir);
+ } else {
+ $ext_dir_path = $ext_dir;
+ }
+ return $ext_dir_path;
+}
+
+function get_loader_name()
+{
+ $u = uname();
+ $sys = get_sysinfo();
+ $os = substr($u,0,strpos($u,' '));
+ $os_key = strtolower(substr($u,0,3));
+
+ $php_version = phpversion();
+ $php_family = substr($php_version,0,3);
+
+ $loader_sfix = (($os_key == 'win') ? '.dll' : (($sys['THREAD_SAFE'])?'_ts.so':'.so'));
+ $loader_name="ioncube_loader_${os_key}_${php_family}${loader_sfix}";
+
+ return $loader_name;
+}
+
+function get_reqd_version($variants)
+{
+ $exact_match = false;
+ $nearest_version = 0;
+ $loader_info = get_loaderinfo();
+ $os_version = $loader_info['osver2'][0] . '.' . $loader_info['osver2'][1];
+ $os_version_major = $loader_info['osver2'][0];
+ foreach ($variants as $v) {
+ if ($v == $os_version || (is_int($v) && $v == $os_version_major)) {
+ $exact_match = true;
+ $nearest_version = $v;
+ break;
+ } elseif ($v > $os_version) {
+ break;
+ } else {
+ $nearest_version = $v;
+ }
+ }
+ return (array($nearest_version,$exact_match));
+}
+
+function get_default_loader_dir_webspace()
+{
+ return ($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . LOADER_SUBDIR);
+}
+
+function get_loader_location($loader_dir = '')
+{
+ if (empty($loader_dir)) {
+ $loader_dir = get_default_loader_dir_webspace();
+ }
+ $loader_name = get_loader_name();
+ return ($loader_dir . DIRECTORY_SEPARATOR . $loader_name);
+}
+
+function get_loader_location_from_ini($php_ini = '')
+{
+ $errors = array();
+ if (empty($php_ini)) {
+ $sysinfo = get_sysinfo();
+ $php_ini = $sysinfo['PHP_INI'];
+ }
+ if (!@file_exists($php_ini)) {
+ if (empty($php_ini)) {
+ $errors[ERROR_INI_NOT_FOUND] = "配置文件没有找到。";
+ } else {
+ $errors[ERROR_INI_NOT_FOUND] = "$php_ini 没有找到。";
+ }
+ } elseif (!is_readable($php_ini)) {
+ $errors[ERROR_INI_NOT_READABLE] = "$php_ini 没有权限读取。";
+ }
+ if (!empty($errors)) {
+ return array('location' => '', 'errors' => $errors);
+ }
+ $lines = file($php_ini);
+ $ext_start = zend_extension_line_start();
+ $wrong_ext_start = ($ext_start == 'zend_extension')?'zend_extension_ts':'zend_extension';
+ $loader_path = '';
+ $loader_name_match = "ioncube_loader";
+ foreach ($lines as $l) {
+ if (preg_match("/^\s*$ext_start\s*=\s*\"?([^\"]+)\"?/i",$l,$corr_matches)) {
+ if (preg_match("/$loader_name_match/i",$corr_matches[1])) {
+ if (!empty($loader_path)) {
+ $errors[ERROR_INI_MULTIPLE_IC_LOADER_LINES] = "配置文件($php_ini)中可能有多行存在$ext_start。";
+ }
+ $loader_path = $corr_matches[1];
+ } else {
+ if (empty($loader_path)) {
+ $errors[ERROR_INI_NOT_FIRST_ZE] = "$php_ini 中的ionCube加密程序配置必须放在Zend扩展之前";
+ }
+ }
+ }
+ if (empty($loader_path)) {
+ if (preg_match("/^\s*$wrong_ext_start\s*=\s*\"?([^\"]+)\"?/i",$l,$bad_start_matches)) {
+ if (preg_match("/$loader_name_match/i",$bad_start_matches[1])) {
+ $bad_zend_ext_msg = "配置文件$php_ini中的ionCube加密程序所在的行,应该以 $ext_start 开头,而不是 $wrong_ext_start.";
+ $errors[ERROR_INI_WRONG_ZE_START] = $bad_zend_ext_msg;
+ $loader_path = $bad_start_matches[1];
+ }
+ }
+ }
+ }
+ $loader_path = trim($loader_path);
+ if ($loader_path === '') {
+ $errors[ERROR_INI_ZE_LINE_NOT_FOUND] = "配置文件($php_ini)没有Zend扩展。";
+ } elseif (!@file_exists($loader_path)) {
+ $errors[ERROR_INI_LOADER_FILE_NOT_FOUND] = "配置文件($php_ini)中的加密程序路径($loader_path)错误或不能访问。";
+ } elseif (basename($loader_path) == $loader_path) {
+ $errors[ERROR_INI_NOT_FULL_PATH] = "配置文件($php_ini)中的加密程序路径必须是完整路径。";
+ }
+ return array('location' => $loader_path, 'errors' => $errors);
+}
+
+function zend_extension_line_missing($ini_path)
+{
+ $loader_loc = get_loader_location_from_ini($ini_path);
+ return (!empty($loader_loc['errors']) && array_key_exists(ERROR_INI_ZE_LINE_NOT_FOUND,$loader_loc['errors']));
+}
+
+function find_additional_ioncube_ini()
+{
+ $sys = get_sysinfo();
+ $ioncube_ini = '';
+
+ if (!empty($sys['PHP_INI_ADDITIONAL']) && !preg_match('/(none)/i',$sys['PHP_INI_ADDITIONAL'])) {
+ $ini_files = explode(',',$sys['PHP_INI_ADDITIONAL']);
+ foreach ($ini_files as $f) {
+ $fn = trim($f);
+ $bfn = basename($fn);
+ if (preg_match('/ioncube/i',$bfn)) {
+ $ioncube_ini = $fn;
+ break;
+ }
+ }
+ }
+ return $ioncube_ini;
+}
+
+function get_additional_ini_files()
+{
+ $sys = get_sysinfo();
+ $ini_files = array();
+ if (!empty($sys['PHP_INI_ADDITIONAL']) && !preg_match('/(none)/i',$sys['PHP_INI_ADDITIONAL'])) {
+ $ini_files = explode(',',$sys['PHP_INI_ADDITIONAL']);
+ }
+ return (array_map('trim',$ini_files));
+}
+
+function all_ini_contents()
+{
+ $sys = get_sysinfo();
+ $output = '';
+
+ $output .= ";;; *MAIN INI FILE AT ${sys['PHP_INI']}* ;;;" . PHP_EOL;
+ $output .= get_file_contents($sys['PHP_INI']);
+ $other_inis = get_additional_ini_files();
+ foreach ($other_inis as $inif) {
+ $output .= ";;; *Additional ini file at $inif* ;;;" . PHP_EOL;
+ $output .= get_file_contents($inif);
+ }
+ $here = unix_path_dir();
+ $unrec_ini_files = unrecognised_inis_webspace($here);
+ foreach ($unrec_ini_files as $urinif) {
+ $output .= ";;; *UNRECOGNISED INI FILE at $urinif* ;;;" . PHP_EOL;
+ $output .= get_file_contents($urinif);
+ }
+ return $output;
+}
+
+function scan_inis_for_loader()
+{
+ $ldloc = '';
+ $sysinfo = get_sysinfo();
+ if (empty($sysinfo['PHP_INI'])) {
+ $ini_files_not_found = array("Main ini file");
+ $ini_file_list = get_additional_ini_files();
+ } else {
+ $ini_files_not_found = array();
+ $ini_file_list = array_merge(array($sysinfo['PHP_INI']),get_additional_ini_files());
+ }
+ $server_type = find_server_type();
+ $shared_server = SERVER_SHARED == $server_type;
+ foreach ($ini_file_list as $f) {
+ $ldloc = get_loader_location_from_ini($f);
+ if (array_key_exists(ERROR_INI_ZE_LINE_NOT_FOUND,$ldloc['errors'])) {
+ unset($ldloc['errors'][ERROR_INI_ZE_LINE_NOT_FOUND]);
+ }
+ if ($shared_server && array_key_exists(ERROR_INI_NOT_FOUND,$ldloc['errors'])) {
+ if (false == user_ini_space_path($f)) {
+ $ldloc['errors'][ERROR_INI_NOT_FOUND] = "安装向导不能找到或读取系统的ini文件,在该共享服务器上不能继续进行安装。";
+ } else {
+ $ldloc['errors'][ERROR_INI_USER_INI_NOT_FOUND] = $ldloc['errors'][ERROR_INI_NOT_FOUND];
+ }
+ } elseif (array_key_exists(ERROR_INI_NOT_FOUND,$ldloc['errors'])) {
+ $ini_files_not_found[] = $f;
+ }
+ if (!empty($ldloc['location'])) {
+ break;
+ }
+ }
+ if (!empty($ini_files_not_found)) {
+ $plural = (count($ini_files_not_found) > 1)?"s":"";
+ $ldloc['errors'][ERROR_INI_NOT_FOUND] = "向导没有找到以下配置文件: " . join(',',$ini_files_not_found);
+ if (is_restricted_server()) {
+ $ldloc['errors'][ERROR_INI_NOT_FOUND] .= " 可能是服务器进行了限制。";
+ }
+ }
+ if (empty($ldloc['location'])) {
+ $ldloc['errors'][ERROR_INI_ZE_LINE_NOT_FOUND] = "配置文件没有找到Zend扩展。";
+ }
+ return $ldloc;
+}
+
+function find_loader_filesystem()
+{
+ $ld_inst_dir = loader_install_dir(find_server_type());
+ $loader_name = get_loader_name();
+ $suggested_loader_path = $ld_inst_dir . DIRECTORY_SEPARATOR . $loader_name;
+ if (@file_exists($suggested_loader_path)) {
+ $location = $suggested_loader_path;
+ } elseif (@file_exists($loader_name)) {
+ $location = @realpath($loader_name);
+ } else {
+ $ld_loc = get_loader_location();
+ if (@file_exists($ld_loc)) {
+ $location = $ld_loc;
+ } else {
+ $location = '';
+ }
+ }
+ return $location;
+}
+
+function find_loader($search_directories_if_not_ini = false)
+{
+ $sysinfo = get_sysinfo();
+ $php_ini = $sysinfo['PHP_INI'];
+ $rtl_path = get_runtime_loading_path_if_applicable();
+ $location = '';
+ $errors = array();
+
+ if (!empty($rtl_path)) {
+ $location = $rtl_path;
+ } else {
+ $loader_ini = scan_inis_for_loader();
+ $location = $loader_ini['location'];
+ $errors = $loader_ini['errors'];
+ }
+ if (empty($location) && (empty($errors) || $search_directories_if_not_ini)) {
+ $errors = array();
+ $location = find_loader_filesystem();
+ if (empty($location)) {
+ $errors[ERROR_LOADER_NOT_FOUND] = '加密程序不在php扩展的默认路径。';
+ }
+ }
+ if (!empty($errors)) {
+ return $errors;
+ } else {
+ return $location;
+ }
+}
+
+function zend_extension_line_start()
+{
+ $sysinfo = get_sysinfo();
+ $is_53_or_later = is_php_version_or_greater(5,3);
+ return (is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE'] && !$is_53_or_later ? 'zend_extension_ts' : 'zend_extension');
+}
+
+function ioncube_loader_version_information()
+{
+ $old_version = true;
+ $liv = "";
+ $lv = "";
+ $mv = 0;
+ if (function_exists('ioncube_loader_iversion')) {
+ $liv = ioncube_loader_iversion();
+ $lv = sprintf("%d.%d.%d", $liv / 10000, ($liv / 100) % 100, $liv % 100);
+
+ $latest_version = get_latestversion();
+
+ $lat_parts = explode('.',$latest_version);
+ $cur_parts = explode('.',$lv);
+
+ if (($cur_parts[0] > $lat_parts[0]) ||
+ ($cur_parts[0] == $lat_parts[0] && $cur_parts[1] > $lat_parts[1]) ||
+ ($cur_parts[0] == $lat_parts[0] && $cur_parts[1] == $lat_parts[1] && $cur_parts[2] >= $lat_parts[2])) {
+ $old_version = false;
+ } else {
+ $old_version = $latest_version;
+ }
+ $mv = $cur_parts[0];
+ }
+ return array($lv,$mv,$old_version);
+}
+
+function default_loader_version_info()
+{
+ return array();
+}
+
+function get_loader_version_info()
+{
+ return get_remote_session_value('loader_version_info',LOADER_LATEST_VERSIONS_URL,'default_loader_version_info');
+}
+
+function calc_dirname()
+{
+ $platform_info = get_platforminfo();
+ $loader = get_loaderinfo();
+ $multiple_os_versions = false;
+ if (is_array($loader) && array_key_exists('osvariants',$loader) && is_array($loader['osvariants'])) {
+ $versions = array_values($loader['osvariants']);
+ $multiple_os_versions = !empty($versions[0]);
+ }
+ if ($multiple_os_versions) {
+ list($osvar,$exact_match) = get_reqd_version($loader['osvariants']);
+ } else {
+ $osvar = null;
+ }
+ $dirname = '';
+ foreach ($platform_info as $p) {
+ if ($p['os'] == $loader['oscode'] && $p['arch'] == $loader['arch'] && (empty($osvar) || $p['os_mod'] == "_" . $osvar)) {
+ $dirname = $p['dirname'];
+ break;
+ }
+ }
+ return $dirname;
+}
+
+function calc_loader_latest_version()
+{
+ $lv_info = get_loader_version_info();
+ $latest_version = RECENT_LOADER_VERSION;
+ if (!empty($lv_info)) {
+ $dirname = calc_dirname();
+
+ if (!empty($dirname)) {
+ $compiler_specific_version = false;
+ if (is_ms_windows()) {
+ $sys = get_sysinfo();
+ $phpc = strtolower($sys['PHP_COMPILER']);
+ if (!empty($phpc)) {
+ $dirname_comp = $dirname . "_" . $phpc;
+ if (array_key_exists($dirname_comp,$lv_info)) {
+ $latest_version = $lv_info[$dirname_comp];
+ $compiler_specific_version = true;
+ }
+ }
+ }
+ if (!$compiler_specific_version && array_key_exists($dirname,$lv_info)) {
+ $latest_version = $lv_info[$dirname];
+ }
+ }
+ }
+ return $latest_version;
+}
+
+function get_latestversion()
+{
+ static $latest_version;
+
+ if (empty($latest_version)) {
+ $latest_version = calc_loader_latest_version();
+ }
+ return $latest_version;
+}
+
+
+function runtime_loader_location()
+{
+ $loader_path = false;
+ $ext_path = extension_dir_path();
+ if ($ext_path !== false) {
+ $id = $ext_path;
+ $here = dirname(__FILE__);
+ if (isset($id[1]) && $id[1] == ':') {
+ $id = str_replace('\\','/',substr($id,2));
+ $here = str_replace('\\','/',substr($here,2));
+ }
+ $rd=str_repeat('/..',substr_count($id,'/')).$here.'/';
+ $i=strlen($rd);
+
+ $loader_loc = DIRECTORY_SEPARATOR . basename($here) . DIRECTORY_SEPARATOR . get_loader_name();
+ while($i--) {
+ if($rd[$i]=='/') {
+ $loader_path = runtime_location_exists($ext_path,$rd,$i,$loader_loc);
+ if ($loader_path !== false) {
+ break;
+ }
+ }
+ }
+
+ if (!$loader_path && !empty($loader_loc) && @file_exists($loader_loc)) {
+ $loader_path = basename($loader_loc);
+ }
+ }
+ return $loader_path;
+}
+
+function runtime_location_exists($ext_dir,$path_str,$sep_pos,$loc_name)
+{
+ $sub_path = substr($path_str,0,$sep_pos);
+ $lp = $sub_path . $loc_name;
+ $fqlp = $ext_dir.$lp;
+
+ if(@file_exists($fqlp)) {
+ return $lp;
+ } else {
+ return false;
+ }
+}
+
+function runtime_loading_is_possible() {
+ return !((is_php_version_or_greater(5,2,5)) || is_restricted_server() || !ini_get('enable_dl') || !function_exists('dl') || function_is_disabled('dl') || threaded_and_not_cgi());
+}
+
+function shared_and_runtime_loading()
+{
+ return (find_server_type() == SERVER_SHARED && empty($_SESSION['use_ini_method']) && runtime_loading_is_possible());
+}
+
+function get_valid_runtime_loading_path($ignore_loading_check = false)
+{
+ if ($ignore_loading_check || runtime_loading_is_possible()) {
+ return runtime_loader_location();
+ } else {
+ return false;
+ }
+}
+
+function runtime_loading($rtl_path = null)
+{
+ if (empty($rtl_path)) {
+ $rtl_path = get_valid_runtime_loading_path();
+ }
+ if (!empty($rtl_path) && @dl($rtl_path)) {
+ return $rtl_path;
+ } else {
+ return false;
+ }
+}
+
+function get_runtime_loading_path_if_applicable()
+{
+ $rtl = null;
+ if (shared_and_runtime_loading()) {
+ $rtl = get_valid_runtime_loading_path();
+ }
+ return $rtl;
+}
+
+function try_runtime_loading_if_applicable()
+{
+ $rtl_path = get_runtime_loading_path_if_applicable();
+ if (!empty($rtl_path)) {
+ return runtime_loading($rtl_path);
+ } else {
+ return $rtl_path;
+ }
+}
+
+function runtime_loading_instructions()
+{
+ $default = get_default_address();
+ echo '”运行时加载程序“说明 ';
+ echo '';
+ echo '
在共享服务器上,加密程序可以通过“运行时加载技术”安装,';
+ echo " (如果您的程序不是 运行在共享服务器,请单击这里 .)
";
+
+ if ('.' == extension_dir()) {
+ $dirphrase = is_ms_windows()?'folder':'directory';
+ echo "注意:加密程序
必须 与第一个加密文件在同一个目录下。";
+ }
+ echo '
';
+ loader_download_instructions();
+ $loader_dir = loader_install_instructions(SERVER_SHARED,dirname(__FILE__));
+ shared_test_instructions();
+ echo ' ';
+ echo '
';
+}
+
+function runtime_loading_errors()
+{
+ $errors = array();
+ $ext_path = extension_dir_path();
+ if (false === $ext_path) {
+ $errors[ERROR_RUNTIME_EXT_DIR_NOT_FOUND] = "扩展所在的目录没有找到。";
+ } else {
+ $expected_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . get_loader_name();
+ if (!@file_exists($expected_file)) {
+ $errors[ERROR_RUNTIME_LOADER_FILE_NOT_FOUND] = "加密程序应该放在$expected_file,但是没有发现。";
+ } else {
+ $errors = loader_compatibility_test($expected_file);
+ }
+ }
+ return $errors;
+}
+
+
+function windows_package_name()
+{
+ $sys = get_sysinfo();
+ return (LOADERS_PACKAGE_PREFIX . 'win' . '_' . ($sys['THREAD_SAFE']?'':'nonts_') . strtolower($sys['PHP_COMPILER']) . '_' . 'x86');
+}
+
+function unix_package_name()
+{
+ $sysinfo = get_sysinfo();
+ $loader = get_loaderinfo();
+ $multiple_os_versions = false;
+ if (is_array($loader) && array_key_exists('osvariants',$loader) && is_array($loader['osvariants'])) {
+ $versions = array_values($loader['osvariants']);
+ $multiple_os_versions = !empty($versions[0]);
+ }
+ if ($multiple_os_versions) {
+ list($reqd_version,$exact_match) = get_reqd_version($loader['osvariants']);
+ if ($reqd_version) {
+ $basename = LOADERS_PACKAGE_PREFIX . $loader['oscode'] . '_' . $reqd_version . '_' . $loader['arch'];
+ } else {
+ $basename = "";
+ }
+ } else {
+ $basename = LOADERS_PACKAGE_PREFIX . $loader['oscode'] . '_' . $loader['arch'];
+ }
+ return array($basename,$multiple_os_versions);
+}
+
+function loader_download_instructions()
+{
+ $sysinfo = get_sysinfo();
+ $loader = get_loaderinfo();
+ $multiple_os_versions = false;
+
+ if (is_ms_windows()) {
+ if (is_bool($sysinfo['THREAD_SAFE'])) {
+ $download_str = '下载下列Windows ' . $sysinfo['PHP_COMPILER'];
+ if (!$sysinfo['THREAD_SAFE']) {
+ $download_str .= ' non-TS';
+ }
+ $download_str .= ' x86 Loaders的一个压缩包:';
+ echo $download_str;
+ $basename = windows_package_name();
+ echo make_archive_list($basename,array('zip','ipf.zip'));
+ echo "请注意:无论是从本地PC直接安装在Windows机器上,或上传到您的服务器,该MS Windows Installer都是通用的。 ";
+ echo '也可以从' . LOADERS_PAGE . ' 下载一个Loader包。';
+ } else {
+ echo '
从这里 下载一个Windows Loaders包。 如果PHP禁用线程安全模式,使用Windows non-TS Loaders。';
+ }
+ } else {
+ list($basename,$multiple_os_versions) = unix_package_name();
+ if ($basename == "") {
+ echo ' 从这里 下载一个 ' . $loader['osname'] . ' ' . $loader['arch'] . ' Loaders包.';
+ echo " 您的系统可能是${loader['wordsize']}位${loader['osnamequal']}。如果该程序在${loader['osname']}不可用,更早的版本的Loaders应该能够运行。注意:您需要重新安装兼容库。";
+ echo ' 如果你不能找到一个合适的Loaders,请联系我们 获得支持和帮助 .';
+ } else {
+ echo ' 下载一个' . $loader['osnamequal'] . ' ' . $loader['arch'] . '的Loaders包:';
+ if (SERVER_SHARED == find_server_type()) {
+ $archives = array('zip','tar.gz','tar.bz2','ipf.zip');
+ } else {
+ $archives = array('tar.gz','tar.bz2','ipf.zip');
+ }
+ echo make_archive_list($basename,$archives);
+ echo "注意:确保Windows installer在远程${loader['osname']}服务器上可用。 ";
+ echo "
";
+ if ($multiple_os_versions && !$exact_match) {
+ echo "注意:您可能需要重新安装${loader['osname']}兼容库。
";
+ }
+ }
+ }
+
+ echo ' ';
+}
+
+function ini_dir()
+{
+ $sysinfo = get_sysinfo();
+ $parent_dir = '';
+ if (!empty($sysinfo['PHP_INI'])) {
+ $parent_dir = dirname($sysinfo['PHP_INI']);
+ } else {
+ $parent_dir = $_SERVER["PHPRC"];
+ if (@is_file($parent_dir)) {
+ $parent_dir = dirname($parent_dir);
+ }
+ }
+ return $parent_dir;
+}
+
+function unix_install_dir()
+{
+ $ext_dir = extension_dir_path();
+ $cur_dir = @realpath('.');
+ if (empty($ext_dir) || $ext_dir == $cur_dir) {
+ $loader_dir = UNIX_SYSTEM_LOADER_DIR;
+ } else {
+ $loader_dir = $ext_dir;
+ }
+ return $loader_dir;
+}
+
+function windows_install_dir()
+{
+ $sysinfo = get_sysinfo();
+ if ($sysinfo['SS'] == 'IIS') {
+ if (false === ($ext_dir = extension_dir_path())) {
+ $parent_dir = ini_dir();
+ $ext_dir = $parent_dir . '\\ext';
+ if (!empty($parent_dir) && @file_exists($ext_dir)) {
+ $loader_dir = $ext_dir;
+ } else {
+ $loader_dir = $_SERVER['windir'] . '\\' . WINDOWS_IIS_LOADER_DIR;
+ }
+ } else {
+ $loader_dir = $ext_dir;
+ }
+ } else {
+ $parent_dir = ini_dir();
+ $loader_dir = $parent_dir . '\\' . 'ioncube';
+ }
+ return $loader_dir;
+}
+
+function loader_install_dir($server_type)
+{
+ if (SERVER_SHARED == $server_type && own_php_ini_possible()) {
+ $loader_dir = get_default_loader_dir_webspace();
+ } elseif (is_ms_windows()) {
+ $loader_dir = windows_install_dir();
+ } else {
+ $loader_dir = unix_install_dir();
+ }
+ return $loader_dir;
+}
+
+function writeable_directories()
+{
+ $root_path = @realpath($_SERVER['DOCUMENT_ROOT']);
+ $above_root_path = @realpath($_SERVER['DOCUMENT_ROOT'] . "/..");
+ $root_path_cgi_bin = @realpath($_SERVER['DOCUMENT_ROOT'] . "/cgi-bin");
+ $above_root_cgi_bin = @realpath($_SERVER['DOCUMENT_ROOT'] . "/../cgi-bin");
+
+ $paths = array();
+ foreach (array($root_path,$above_root_path,$root_path_cgi_bin,$above_root_cgi_bin) as $p) {
+ if (@is_writeable($p)) {
+ $paths[] = $p;
+ }
+ }
+ return $paths;
+}
+
+function loader_install_instructions($server_type,$loader_dir = '')
+{
+ if (empty($loader_dir)) {
+ $loader_dir = loader_install_dir($server_type);
+ }
+ if (SERVER_LOCAL == $server_type) {
+ echo "将Loader文件放到$loader_dir ";
+ } else {
+ echo "将Loaders上传到服务器,并在$loader_dir安装 ";
+ }
+ return $loader_dir;
+}
+
+function zend_extension_lines($loader_dir)
+{
+ $zend_extension_lines = array();
+ $sysinfo = get_sysinfo();
+ $qt = (is_ms_windows()?'"':'');
+ $loader = get_loaderinfo();
+
+ if (!is_bool($sysinfo['THREAD_SAFE']) || !$sysinfo['THREAD_SAFE']) {
+ $path = $qt . $loader_dir . DIRECTORY_SEPARATOR . $loader['file'] . $qt;
+ $zend_extension_lines[] = "zend_extension = " . $path;
+ }
+ if ((!is_bool($sysinfo['THREAD_SAFE']) && !is_php_version_or_greater(5,3)) || $sysinfo['THREAD_SAFE']) {
+ $line_start = is_php_version_or_greater(5,3)?'zend_extension':'zend_extension_ts';
+ $path = $qt . $loader_dir . DIRECTORY_SEPARATOR . $loader['file_ts'] . $qt;
+ $zend_extension_lines[] = $line_start . " = " . $path;
+ }
+ return $zend_extension_lines;
+}
+
+function user_ini_base()
+{
+ $doc_root_path = realpath($_SERVER['DOCUMENT_ROOT']);
+ $above_root_path = @realpath($_SERVER['DOCUMENT_ROOT'] . "/..");
+ if (!empty($above_root_path) && @is_writeable($above_root_path)) {
+ $start_path = $above_root_path;
+ } else {
+ $start_path = $doc_root_path;
+ }
+ return $start_path;
+}
+
+function user_ini_space_path($file)
+{
+ $user_base = user_ini_base();
+ $fpath = @realpath($file);
+ if (!empty($fpath) && (0 === strpos($fpath,$user_base))) {
+ return $fpath;
+ } else {
+ return false;
+ }
+}
+
+function default_ini_path()
+{
+ return (realpath($_SERVER['DOCUMENT_ROOT']));
+}
+
+function shared_ini_location()
+{
+ $phprc = getenv('PHPRC');
+ if (!empty($phprc)) {
+ $phprc_path = user_ini_space_path($phprc);
+ if (false !== $phprc_path) {
+ return $phprc_path;
+ } else {
+ return default_ini_path();
+ }
+ } else {
+ return default_ini_path();
+ }
+}
+
+
+function zend_extension_instructions($server_type,$loader_dir)
+{
+ $sysinfo = get_sysinfo();
+ $base = get_base_address();
+ $editing_ini = true;
+
+ $php_ini_name = ini_file_name();
+
+ if (isset($sysinfo['PHP_INI']) && @file_exists($sysinfo['PHP_INI'])) {
+ $php_ini_path = $sysinfo['PHP_INI'];
+ } else {
+ $php_ini_path = '';
+ }
+
+ if (is_bool($sysinfo['THREAD_SAFE'])) {
+ $kwd = zend_extension_line_start();
+ } else {
+ $kwd = 'zend_extension/zend_extension_ts';
+ }
+
+ $server_type_code = server_type_code();
+
+ $zend_extension_lines = zend_extension_lines($loader_dir);
+
+ if (SERVER_SHARED == $server_type && own_php_ini_possible()) {
+ $ini_dir = shared_ini_location();
+ $php_ini_path = $ini_dir . DIRECTORY_SEPARATOR . $php_ini_name;
+ if (@file_exists($php_ini_path)) {
+ $edit_line = "Edit the $php_ini_name in the $ini_dir directory";
+ if (zend_extension_line_missing($php_ini_path) && @is_writeable($php_ini_path) && @is_writeable($ini_dir)) {
+ if (function_exists('file_get_contents')) {
+ $ini_strs = @file_get_contents($php_ini_path);
+ } else {
+ $lines = @file($php_ini_path);
+ $ini_strs = join(' ',$lines);
+ }
+ $fh = @fopen($php_ini_path,"wb");
+ if ($fh !== false) {
+ foreach ($zend_extension_lines as $zl) {
+ fwrite($fh,$zl . PHP_EOL);
+ }
+ fwrite($fh,$ini_strs);
+ fclose($fh);
+ $editing_ini = false;
+ echo " $php_ini_path下的php.ini已经修改,包含了对ionCube loader的引用。";
+ } else {
+ echo $edit_line;
+ }
+ } else {
+ echo $edit_line;
+ }
+ } else {
+ $download_ini_file = " 保存$php_ini_name ,并上传到$ini_dir (服务器的完整路径)。";
+ if (@is_writeable($ini_dir)) {
+ $fh = @fopen($php_ini_path,"wb");
+ if ($fh !== false) {
+ foreach ($zend_extension_lines as $zl) {
+ fwrite($fh,$zl . PHP_EOL);
+ }
+ if (!empty($sysinfo['PHP_INI']) && is_readable($sysinfo['PHP_INI'])) {
+ if (function_exists('file_get_contents')) {
+ $ini_strs = @file_get_contents($sysinfo['PHP_INI']);
+ } else {
+ $lines = @file($sysinfo['PHP_INI']);
+ $ini_strs = join(' ',$lines);
+ }
+ fwrite($fh,$ini_strs);
+ }
+ fclose($fh);
+ echo "$php_ini_name已经在$ini_dir创建。";
+ } else {
+ echo $download_ini_file;
+ }
+ } else {
+ echo $download_ini_file;
+ }
+ $editing_ini = false;
+ }
+ } elseif (!empty($sysinfo['PHP_INI'])) {
+ if (empty($sysinfo['PHP_INI_DIR'])) {
+ echo "Edit the file ${sysinfo['PHP_INI']}";
+ } else {
+ $php_ini_path = find_additional_ioncube_ini();
+ if (empty($php_ini_path)) {
+ $php_ini_name = ADDITIONAL_INI_FILE_NAME;
+ echo " 保存 $php_ini_name ,拷贝到ini目录, ${sysinfo['PHP_INI_DIR']}";
+ $editing_ini = false;
+ } else {
+ $php_ini_name = basename($php_ini_path);
+ echo "编辑文件$php_ini_path";
+ }
+ }
+ } else {
+ echo " 编辑系统文件$php_ini_name";
+ }
+ if ($editing_ini) {
+ echo " 并且在其它$kwd行之前 ,确保下面的内容被包含: ";
+ foreach ($zend_extension_lines as $zl) {
+ echo "$zl ";
+ }
+ if (!empty($php_ini_path)) {
+ if (zend_extension_line_missing($php_ini_path)) {
+ echo "另外,下载 新的 $php_ini_name 文件 ,替换当前的$php_ini_path 文件。";
+ }
+ }
+ }
+ echo ' ';
+}
+
+function server_restart_instructions()
+{
+ $sysinfo = get_sysinfo();
+ $base = get_base_address();
+
+ if ($sysinfo['SS']) {
+ echo "重启${sysinfo['SS']} 服务器程序. ";
+ } else {
+ echo "重启服务器程序。 ";
+ }
+
+ echo "服务器程序重启完毕后,点击这里测试Loader 。 ";
+
+ if ($sysinfo['SS'] == 'Apache' && !is_ms_windows()) {
+ echo '如果Loader安装失败,检查Apache错误日志,查看Unix相关错误 。 ';
+ }
+}
+
+function shared_test_instructions()
+{
+ $base = get_base_address();
+ echo "点击这里测试Loader 。 ";
+}
+
+function link_to_php_ini_instructions()
+{
+ $default = get_default_address();
+ echo "请点击这里查看使用php.ini方式的介绍 。
";
+}
+
+function php_ini_instruction_list($server_type)
+{
+ echo '安装说明 ';
+ echo '';
+ echo '
';
+
+ loader_download_instructions();
+ $loader_dir = loader_install_instructions($server_type);
+ zend_extension_instructions($server_type,$loader_dir);
+ if ($server_type != SERVER_SHARED || !own_php_ini_possible()) {
+ server_restart_instructions();
+ } else {
+ shared_test_instructions();
+ }
+ echo ' ';
+ echo '
';
+}
+
+function php_ini_install_shared($give_preamble = true)
+{
+ $php_ini_name = ini_file_name();
+ $default = get_default_address();
+ if ($give_preamble) {
+ echo "在您的共享 服务器上, 建议使用$php_ini_name配置文件安装Loader。";
+ echo " (如果服务器不是 共享服务器,请单击这里 .)
";
+ }
+
+ if (own_php_ini_possible()) {
+ echo '您可能可以使用自己账号专有的PHP配置文件,进行配置。
';
+ } else {
+ echo "可能您不能使用$php_ini_name文件安装ioncube loader。您的服务器提供商或者系统管理员应该能够为您安装。请将下面的介绍告诉他们。
";
+ }
+
+ php_ini_instruction_list(SERVER_SHARED);
+}
+
+function php_ini_install($server_type_desc = null, $server_type = SERVER_DEDICATED, $required = true)
+{
+ $php_ini_name = ini_file_name();
+ $default = get_default_address();
+
+ echo '';
+ if ($server_type_desc) {
+ echo "在一个 $server_type_desc 服务器";
+ } else {
+ echo "在本地服务器";
+ }
+
+ if ($required) {
+ echo "你应该使用配置文件$php_ini_name,来安装Ioncube Loader。";
+ } else {
+ echo "推荐使用配置文件$php_ini_name安装Ioncube Loader。";
+ }
+ if ($server_type_desc) {
+ echo " (如果不是一个 $server_type_desc 服务器,点击此链接 .)";
+ }
+ echo '
';
+
+ php_ini_instruction_list($server_type);
+}
+
+function help_resources($error_list = array())
+{
+ $base = get_base_address();
+ $server_type_code = server_type_code();
+ $server_type = find_server_type();
+ $sysinfo = get_sysinfo();
+ $resources = array(
+ 'ionCube Loaders FAQ ',
+ 'ionCube Loader论坛 '
+ );
+ if (SERVER_SHARED != $server_type || own_php_ini_possible(true)) {
+ $resources[2] = '通过提高我们的服务台支持票 ';
+ }
+ if (SERVER_LOCAL == $server_type) {
+ $resources[2] .= "支持工单创建以后,请";
+ $resources[2] .= " 单击这里获得系统信息包 。 ";
+ $resources[2] .= "请将系统信息包和创建的支持工单绑定在一起。 ";
+ }
+ if (SERVER_SHARED == $server_type && own_php_ini_possible(true) && !user_ini_space_path($sysinfo['PHP_INI'])) {
+ $resources[3] = '请检查您是否可以创建一个php.ini,来覆盖系统默认的php.ini。 ';
+ }
+ return $resources;
+}
+
+function system_info_temporary_files()
+{
+ $tmpfname_ini = tempnam("/tmp", "INI");
+ $tmpfname_ini .= ".ini";
+ $fh_ini = @fopen($tmpfname_ini,'wb');
+ if ($fh_ini) {
+ $config = all_ini_contents();
+ fwrite($fh_ini,$config);
+ fclose($fh_ini);
+ } else {
+ $tmpfname_ini = '';
+ }
+
+ $tmpfname_pinf = tempnam("/tmp", "PIN");
+ $tmpfname_pinf .= ".html";
+ $fh_pinfo = @fopen($tmpfname_pinf,'wb');
+ if ($fh_pinfo) {
+ ob_start();
+ @phpinfo();
+ $pinfo = ob_get_contents();
+ ob_end_clean();
+ fwrite($fh_pinfo,$pinfo);
+ fclose($fh_pinfo);
+ } else {
+ $tmpfname_pinf = '';
+ }
+
+ $tmpfname_add = tempnam("/tmp", "ADD");
+ $tmpfname_add .= ".html";
+ $fh_add = @fopen($tmpfname_add,'wb');
+ if ($fh_add) {
+ ob_start();
+ extra_page();
+ $extra = ob_get_contents();
+ ob_end_clean();
+ fwrite($fh_add,$extra);
+ fclose($fh_add);
+ } else {
+ $tmpfname_add = '';
+ }
+
+ if (empty($tmpfname_ini) || empty($tmpfname_pinf) || empty($tmpfname_add)) {
+ return (array());
+ } else {
+ return (array('ini' => $tmpfname_ini,
+ 'phpinfo' => $tmpfname_pinf,
+ 'additional' => $tmpfname_add));
+ }
+}
+
+function system_info_archive_page()
+{
+ info_disabled_check();
+ $loader = find_loader(true);
+ if (is_string($loader)) {
+ $loader_file = $loader;
+ } else {
+ $loader_file = '';
+ }
+ $all_files = system_info_temporary_files();
+ if (!empty($all_files)) {
+ if (!empty($loader_file)) {
+ $all_files['loader'] = $loader_file;
+ }
+ $archive_name = tempnam('/tmp',"ARC");
+ if (extension_loaded('zip')) {
+ $archive_name .= '.zip';
+ $zip = @new ZipArchive();
+ $mode = @constant("ZIPARCHIVE::OVERWRITE");
+ if (!$zip || $zip->open($archive_name, $mode)!==TRUE) {
+ $archive_name = '';
+ } else {
+ foreach($all_files as $f) {
+ $zip->addFile($f,basename($f));
+ }
+ $zip->close();
+ }
+ } elseif (extension_loaded('zlib') && !is_ms_windows()) {
+ $tar_name = $archive_name . ".tar";
+ $all_files_str = join(' ',$all_files);
+ $script = "tar -chf $tar_name $all_files_str";
+ $result = @system($script,$retval);
+ if ($result !== false) {
+ $archive_name = $tar_name . '.gz';
+ $zp = gzopen($archive_name,"w9");
+ $tar_contents = get_file_contents($tar_name);
+ gzwrite($zp,$tar_contents);
+ gzclose($zp);
+ } else {
+ $archive_name = '';
+ }
+ } else {
+ $archive_name = '';
+ }
+ } else {
+ $archive_name = '';
+ }
+ if ($archive_name) {
+ header('Content-Type: application/octet-stream');
+ header('Content-Disposition: attachment; filename='. $archive_name);
+ @readfile($archive_name);
+ } else {
+ $self = get_self();
+ $base = get_base_address();
+ $server_type_code = server_type_code();
+ heading();
+ echo "没有创建可下载的系统信息包。
+ 请保存下面的这些,然后将它们绑定到支持工单:
";
+ echo "";
+ footer(true);
+ }
+}
+
+function support_ticket_information($error_list = array())
+{
+ $sys = get_sysinfo();
+ $ld = get_loaderinfo();
+
+ $ticket_strs = array();
+ $ticket_strs[] = "PLEASE DO NOT REMOVE THE FOLLOWING INFORMATION\r\n";
+ $ticket_strs[] = "==============\r\n";
+ if (!empty($error_list)) {
+ $ticket_strs[] = "[hr]";
+ $ticket_strs[] = "ERRORS";
+ $ticket_strs[] = "[table]";
+ $ticket_strs[] = '[tr][td]' . join('[/td][/tr][tr][td]',$error_list) . '[/td][/tr]';
+ $ticket_strs[] = "[/table]";
+ }
+ $ticket_strs[] = "[hr]";
+ $ticket_strs[] = "SYSTEM INFORMATION";
+ $info_lines = array();
+ $info_lines["Wizard version"] = script_version();
+ $info_lines["PHP uname"] = $ld['uname'];
+ $info_lines["Machine architecture"] = $ld['arch'];
+ $info_lines["Word size"] = $ld['wordsize'];
+ $info_lines["Operating system"] = $ld['osname'] . ' ' . $ld['osver'];
+ if (selinux_is_enabled() || possibly_selinux()) {
+ $info_lines["Security enhancements"] = "SELinux";
+ } elseif (grsecurity_is_enabled()) {
+ $info_lines["Security enhancements"] = "Grsecurity";
+ } else {
+ $info_lines["Security enhancements"] = "None";
+ }
+ $info_lines["PHP version"] = PHP_VERSION;
+ if ($sys['DEBUG_BUILD']) {
+ $info_lines["DEBUG BUILD"] = "DEBUG BUILD OF PHP";
+ }
+ if (!$sys['SUPPORTED_COMPILER']) {
+ $info_lines["SUPPORTED PHP COMPILER"] = "FALSE";
+ $info_lines["PHP COMPILER"] = $sys['PHP_COMPILER'];
+ }
+ $info_lines["Is CLI?"] = ($sys['IS_CLI']?"Yes":"No");
+ $info_lines["Is CGI?"] = ($sys['IS_CGI']?"Yes":"No");
+ $info_lines["Is thread-safe?"] = ($sys['THREAD_SAFE']?"Yes":"No");
+ $info_lines["Web server"] = $sys['FULL_SS'];
+ $info_lines["Server type"] = server_type_string();
+ $info_lines["PHP ini file"] = $sys['PHP_INI'];
+ if (!@file_exists($sys['PHP_INI'])) {
+ $info_lines["Ini file found"] = "INI FILE NOT FOUND";
+ } else {
+ if (is_readable($sys['PHP_INI'])) {
+ $info_lines["Ini file found"] = "INI FILE READABLE";
+ } else {
+ $fh = @fopen($sys['PHP_INI'],"rb");
+ if ($fh === false) {
+ $info_lines["Ini file found"] = "INI FILE FOUND BUT POSSIBLY NOT READABLE";
+ } else {
+ $info_lines["Ini file found"] = "INI FILE READABLE";
+ }
+ }
+ }
+ $info_lines["PHPRC"] = $sys['PHPRC'];
+ $loader_path = find_loader();
+ if (is_string($loader_path)) {
+ $info_lines["Loader path"] = $loader_path;
+ $info_lines["Loader file size"] = filesize($loader_path) . " bytes.";
+ $info_lines["Loader MD5 sum"] = md5_file($loader_path);
+ } else {
+ $info_lines["Loader path"] = "LOADER PATH NOT FOUND";
+ }
+ $server_type_code = server_type_code();
+ if (!empty($_SESSION['hostprovider'])) {
+ $info_lines['Hosting provider'] = $_SESSION['hostprovider'];
+ $info_lines['Provider URL'] = $_SESSION['hosturl'];
+ }
+ $info_lines["Wizard script path"] = '[url]http://' . $_SERVER["HTTP_HOST"] . get_self() . '?stype='. $server_type_code . '[/url]';
+ $ticket_strs[] = "[table]";
+ foreach ($info_lines as $h => $i) {
+ $value = (empty($i))?'EMPTY':$i;
+ $ticket_strs[] = '[tr][td]' . $h . '[/td]' . '[td]' . $value . '[/td][/tr]';
+ }
+ $ticket_strs[] = '[/table]';
+ $ticket_strs[] = '[hr]';
+ $ticket_strs[] = "\r\n==============\r\n";
+ $ticket_strs[] = "PLEASE ENTER ANY ADDITIONAL INFORMATION BELOW\r\n";
+
+ $support_ticket_str = join('',$ticket_strs);
+ return urlencode($support_ticket_str);
+}
+
+function wizard_stats_data($page_id)
+{
+ $data = array();
+
+ try_runtime_loading_if_applicable();
+ $sysinfo = get_sysinfo();
+ $ldinfo = get_loaderinfo();
+
+ $data['sessionid'] = session_id();
+ $data['wizard_version'] = script_version();
+ $data['server_type'] = server_type_code();
+ $data['hostprovider'] = (isset($_SESSION['hostprovider']))?$_SESSION['hostprovider']:'';
+ $data['hosturl'] = (isset($_SESSION['hosturl']))?$_SESSION['hosturl']:'';
+ $data['page_id'] = $page_id;
+ $data['loader_state'] = (extension_loaded(LOADER_EXTENSION_NAME))?'installed':'failure';
+ $data['ini_location'] = $sysinfo['PHP_INI'];
+ $data['is_cgi'] = ($sysinfo['IS_CGI'])?"yes":"no";
+ $data['is_ts'] = ($sysinfo['THREAD_SAFE'])?"yes":"no";
+ $data['arch'] = $ldinfo['arch'];
+ $data['php_version'] = PHP_VERSION;
+ $data['os'] = $ldinfo['osname'];
+ $data['word_size'] = $ldinfo['wordsize'];
+ $data['referrer'] = $_SERVER["HTTP_HOST"] . get_self();
+
+ return $data;
+}
+
+function send_stats($page_id = 'default')
+{
+ $server_type = find_server_type();
+ $res = false;
+
+ if (SERVER_LOCAL != $server_type) {
+ $stats_data = wizard_stats_data($page_id);
+
+ if (!isset($_SESSION['stats_sent'][$page_id][$stats_data['loader_state']])) {
+ $url = WIZARD_STATS_URL;
+
+ if (!empty($stats_data)) {
+ if(function_exists('http_build_query')) {
+ $qparams = http_build_query($stats_data);
+ } else {
+ $qparams = php4_http_build_query($stats_data);
+ }
+ $url .= '?' . $qparams;
+ $res = remote_file_contents($url);
+ }
+ $_SESSION['stats_sent'][$page_id][$stats_data['loader_state']] = 1;
+ } else {
+ $res = true;
+ }
+ } else {
+ $res = 'LOCAL';
+ }
+ return $res;
+}
+
+function os_arch_string_check($loader_str)
+{
+ $errors = array();
+ if (preg_match("/target os:\s*(([^_]+)_([^-]*)-([[:graph:]]*))/i",$loader_str,$os_matches)) {
+ $loader_info = get_loaderinfo();
+ $dirname = calc_dirname();
+ $packed_osname = preg_replace('/\s/','',strtolower($loader_info['osname']));
+ if (strtolower($dirname) != $os_matches[1] && $packed_osname != $os_matches[2]) {
+ $errors[ERROR_LOADER_WRONG_OS] = "您服务器操作系统" . $loader_info['osname'] . "安装了错误的loader。";
+ } else {
+ $loader_wordsize = (strpos($os_matches[3],'64') === false)?32:64;
+ if ($loader_info['arch'] != ($ap = required_loader_arch($os_matches[3],$loader_info['oscode'],$loader_wordsize))) {
+ $err_str = "您服务器上安装了错误的loader。";
+ $err_str .= " 您得系统是 " . $loader_info['arch'];
+ $err_str .= " 但是该loader是用于 " . $ap . ".";
+ $errors[ERROR_LOADER_WRONG_ARCH] = $err_str;
+ }
+ }
+ }
+ return $errors;
+}
+
+function get_loader_strings($loader_location)
+{
+ if (function_exists('file_get_contents')) {
+ $loader_strs = @file_get_contents($loader_location);
+ } else {
+ $lines = @file($loader_location);
+ $loader_strs = join(' ',$lines);
+ }
+ return $loader_strs;
+}
+
+function loader_system($loader_location)
+{
+ $loader_system = array();
+ $loader_strs = get_loader_strings($loader_location);
+
+ if (!empty($loader_strs)) {
+
+ if (preg_match("/ioncube_loader_.\.._(.)\.(.)\.(..?)(_nonts)?\.dll/i",$loader_strs,$version_matches)) {
+ $loader_system['oscode'] = 'win';
+ $loader_system['thread_safe'] = (isset($version_matches[4]) && $version_matches[4] == '_nonts')?0:1;
+ $loader_system['wordsize'] = 32;
+ $loader_system['arch'] = 'x86';
+ $loader_system['php_version_major'] = $version_matches[1];
+ $loader_system['php_version_minor'] = $version_matches[2];
+ if (preg_match("/assemblyIdentity.*version=\"([^.]+)\./",$loader_strs,$compiler_matches)) {
+ $loader_system['compiler'] = "VC" . strtoupper($compiler_matches[1]);
+ } else {
+ $loader_system['compiler'] = 'VC6';
+ }
+ } elseif (preg_match("/php version:\s*(.)\.(.)\.(..?)(-ts)?/i",$loader_strs,$version_matches)) {
+ $loader_system['thread_safe'] = (isset($version_matches[4]) && $version_matches[4] == '-ts')?1:0;
+ $loader_system['php_version_major'] = $version_matches[1];
+ $loader_system['php_version_minor'] = $version_matches[2];
+ if (preg_match("/target os:\s*(([^_]+)_([^-]*)-([[:graph:]]*))/i",$loader_strs,$os_matches)) {
+ $loader_system['oscode'] = strtolower(substr($os_matches[2],0,3));
+ $loader_system['wordsize'] = (strpos($os_matches[3],'64') === false)?32:64;
+ $loader_system['arch'] = required_loader_arch($os_matches[3],$loader_system['oscode'],$loader_system['wordsize']);
+ $loader_system['compiler'] = $os_matches[4];
+ }
+ }
+ if (preg_match("/ionCube Loader Version\s+(\S+)/",$loader_strs,$loader_version)) {
+ $loader_system['loader_version'] = $loader_version[1];
+ } else {
+ $loader_system['loader_version'] = 'UNKNOWN';
+ }
+ if (isset($loader_system['php_version_major'])) {
+ $loader_system['php_version'] = $loader_system['php_version_major'] . '.' . $loader_system['php_version_minor'];
+ }
+ }
+ return $loader_system;
+}
+
+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 ($installed_loader_name) 不是系统支持的loader ($expected_loader_name) 。 请检查loader与系统是否兼容。";
+ }
+ }
+ if (empty($errors) && !is_readable($loader_location)) {
+ $execute_error = "$loader_location下的loader不可读。";
+ $execute_error .= " 请检查它是否存在或可读。";
+ $execute_error .= " 请检查目录权限 ";
+ $execute_error .= (is_ms_windows()?'folder':'directory') . '.';
+ if (($sysinfo['SS'] == 'IIS') || !($sysinfo['IS_CGI'] || $sysinfo['IS_CLI'])) {
+ $execute_error .= " 请检查服务器是否已经重启了。";
+ }
+ $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;
+}
+
+
+function shared_server()
+{
+ if (!$rtl_path = runtime_loading()) {
+ if (empty($_SESSION['use_ini_method']) && runtime_loading_is_possible()) {
+ runtime_loading_instructions();
+ } else {
+ php_ini_install_shared();
+ }
+ } else {
+ list($lv,$mv,$newer_version) = ioncube_loader_version_information();
+ $phpv = php_version_maj_min();
+ echo "适用于 PHP $phpv 的ionCube Loader $lv 已经成功安装。
";
+ $is_legacy_loader = loader_major_version_instructions($mv);
+ if ($is_legacy_loader) {
+ loader_upgrade_instructions($lv,$newer_version);
+ }
+ successful_install_end_instructions($rtl_path);
+ }
+}
+
+function dedicated_server()
+{
+ php_ini_install('dedicated or VPS', SERVER_DEDICATED, true);
+}
+
+function local_install()
+{
+ php_ini_install('local',SERVER_LOCAL, true);
+}
+
+
+function unregister_globals()
+{
+ if (!ini_get('register_globals')) {
+ return;
+ }
+
+ if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
+ die('GLOBALS overwrite attempt detected');
+ }
+
+ $noUnset = array('GLOBALS', '_GET',
+ '_POST', '_COOKIE',
+ '_REQUEST', '_SERVER',
+ '_ENV', '_FILES');
+
+ $input = array_merge($_GET, $_POST,
+ $_COOKIE, $_SERVER,
+ $_ENV, $_FILES,
+ isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array());
+
+ foreach ($input as $k => $v) {
+ if (!in_array($k, $noUnset) && isset($GLOBALS[$k])) {
+ unset($GLOBALS[$k]);
+ }
+ }
+}
+
+function clear_session($persist = array())
+{
+ $persist['not_go_daddy'] = empty($_SESSION['not_go_daddy'])?0:1;
+ $persist['use_ini_method'] = empty($_SESSION['use_ini_method'])?0:1;
+ $persist['server_type'] = empty($_SESSION['server_type'])?SERVER_UNKNOWN:$_SESSION['server_type'];
+ @session_destroy();
+ $_SESSION = array();
+ $_SESSION['CREATED'] = time();
+ $_SESSION = $persist;
+}
+
+function info_should_be_disabled()
+{
+ $elapsed = time() - max(filemtime(__FILE__),filectime(__FILE__));
+
+ return (extension_loaded(LOADER_EXTENSION_NAME) && ($elapsed > WIZARD_EXPIRY_MINUTES * 60));
+}
+
+function info_disabled_text()
+{
+ return "Loader安装成功后,您访问的方法不可用。";
+}
+
+function info_disabled_check()
+{
+ if (info_should_be_disabled()) {
+ heading();
+ echo info_disabled_text();
+ footer(true);
+ exit;
+ }
+}
+
+function run()
+{
+ unregister_globals();
+ if (is_php_version_or_greater(4,3,0)) {
+ ini_set('session.use_only_cookies',1);
+ }
+ $session_ok = @session_start();
+
+ if (!defined('PHP_EOL')) {
+ if (is_ms_windows()) {
+ define('PHP_EOL',"\r\n");
+ } else {
+ define('PHP_EOL',"\n");
+ }
+ }
+
+ if (!isset($_SESSION['CREATED'])) {
+ $_SESSION['CREATED'] = time();
+ } elseif (time() - $_SESSION['CREATED'] > SESSION_LIFETIME_MINUTES * 60 ) {
+ clear_session();
+ }
+ if (!isset($_SERVER)) $_SERVER =& $HTTP_SERVER_VARS;
+
+ (php_sapi_name() == 'cli') && die("该脚本只能运行在网站服务器上。\n");
+
+ $page = get_request_parameter('page');
+ $host = get_request_parameter('host');
+ $clear = get_request_parameter('clear');
+ $ini = get_request_parameter('ini');
+ $timeout = get_request_parameter('timeout');
+
+ if ($timeout) {
+ $_SESSION['timing_out'] = 1;
+ $_SESSION['initial_run'] = 0;
+ }
+
+ if (!empty($host)) {
+ if ($host == 'ngd') {
+ $_SESSION['not_go_daddy'] = 1;
+ }
+ }
+ if (!empty($ini)) {
+ $_SESSION['use_ini_method'] = 1;
+ }
+
+ if (!empty($clear)) {
+ clear_session();
+ unset($_SESSION['not_go_daddy']);
+ unset($_SESSION['use_ini_method']);
+ unset($_SESSION['server_type']);
+ } else {
+ $stype = get_request_parameter('stype');
+ $hostprovider = get_request_parameter('hostprovider');
+ $hosturl = get_request_parameter('hosturl');
+ if (!empty($hostprovider)) {
+ $_SESSION['hostprovider'] = $hostprovider;
+ $_SESSION['hosturl'] = $hosturl;
+ }
+ $server_type = find_server_type($stype,false,true);
+ }
+ if ($session_ok && !$timeout && !isset($_SESSION['initial_run']) && empty($page)) {
+ $_SESSION['initial_run'] = 1;
+ initial_page();
+ @session_write_close();
+ exit;
+ } else {
+ $_SESSION['initial_run'] = 0;
+ }
+
+ if (empty($_SESSION['server_type'])) {
+ $_SESSION['server_type'] = SERVER_UNKNOWN;
+ }
+
+ if (empty($page) || !function_exists($page . "_page")) {
+ $page = get_default_page();
+ }
+
+ $fn = "${page}_page";
+ $fn();
+
+ @session_write_close();
+ exit(0);
+}
+
+function wizardversion_page()
+{
+ $start_time = time();
+ $wizard_version_only = get_request_parameter('wizard_only');
+ $clear_session_info = get_request_parameter('clear_info');
+ if ($clear_session_info) {
+ unset($_SESSION['timing_out']);
+ unset($_SESSION['latest_wizard_version']);
+ }
+ $wizard_version = latest_wizard_version();
+ $message = '';
+ if (false === $wizard_version) {
+ $message = "0";
+ } elseif (update_is_available($wizard_version)) {
+ $message = "$wizard_version";
+ } else {
+ $message = "1";
+ }
+ echo $message;
+ @session_write_close();
+ exit(0);
+}
+
+function platforminfo_page()
+{
+ $message = '';
+ $platforms = get_loader_platforms();
+ $message = empty($platforms)?0:1;
+ echo $message;
+ @session_write_close();
+ exit(0);
+}
+
+function loaderversion_page()
+{
+ $message = '';
+ $loader_versions = get_loader_version_info();
+ $message = empty($loader_versions)?0:1;
+ echo $message;
+ @session_write_close();
+ exit(0);
+}
+
+function compilerversion_page()
+{
+ $message = '';
+ $compiler_versions = find_win_compilers();
+ $message = empty($compiler_versions)?0:1;
+ echo $message;
+ @session_write_close();
+ exit(0);
+}
+
+function initial_page()
+{
+ $self = get_self();
+ $start_page = get_default_address(false);
+ $stage_timeout = 7000;
+ $step_lag = 500;
+
+ echo <<
+
+
+ ionCube Loader Wizard
+
+
+
+
+
+
+
+
+
+
+
+EOT;
+}
+
+function default_page($loader_extension = LOADER_EXTENSION_NAME)
+{
+ $self = get_self();
+ foreach (array('self') as $vn) {
+ if (empty($$vn)) {
+ error("Unable to initialise ($vn).");
+ }
+ }
+
+ heading();
+
+ $wizard_update = check_for_wizard_update(true);
+
+ $rtl = try_runtime_loading_if_applicable();
+
+ $server_type = find_server_type();
+
+ if (extension_loaded($loader_extension) && $server_type != SERVER_UNKNOWN) {
+ loader_already_installed($rtl);
+ } else {
+ loader_not_installed();
+ }
+ send_stats('default');
+
+ footer($wizard_update);
+}
+
+function uninstall_wizard_instructions()
+{
+ echo 'For security reasons we advise that you remove this Wizard script from your server now that the ionCube Loader is installed.
';
+}
+
+function contact_script_provider_instructions()
+{
+ echo 'Please contact the script provider if you do experience any problems running encoded files.
';
+}
+
+function may_need_to_copy_ini()
+{
+ $sys = get_sysinfo();
+ if (ini_same_dir_as_wizard() && $sys['IS_CGI']) {
+ $dirphrase = is_ms_windows()?'folder':'directory';
+ $ini = ini_file_name();
+ echo "注意:如果在不同的目录加密的文件解密失败,请将 $ini 文件复制到每个加密文件的目录下。
";
+ }
+}
+
+function successful_install_end_instructions($rtl_path = null)
+{
+ if (empty($rtl_path)) {
+ may_need_to_copy_ini();
+ } elseif (is_string($rtl_path)) {
+ echo "”运行时加载方式“已在$rtl_path下使用。
";
+ }
+ contact_script_provider_instructions();
+ uninstall_wizard_instructions();
+}
+
+function loader_major_version_instructions($mv)
+{
+ if ($mv < LATEST_LOADER_MAJOR_VERSION) {
+ echo "已安装的Loader版本不能运行最新版本encoder加密的文件, ";
+ echo " 您需要一个版本为 " . LATEST_LOADER_MAJOR_VERSION . " 的loader运行这些文件。
";
+ }
+ return ($mv < LATEST_LOADER_MAJOR_VERSION);
+}
+
+function loader_already_installed($rtl = null)
+{
+ list($lv,$mv,$newer_version) = ioncube_loader_version_information();
+ $phpv = php_version_maj_min();
+ $php_str = ' for PHP ' . $phpv;
+ echo '';
+ echo '
Loader已经安装 ';
+ if ($newer_version) {
+ echo '
版本为' . $lv . $php_str . '的ionCube loader已经安装 但该版本不是最新版本。';
+ echo ' 请及时升级到最新版本。
';
+ $know_latest_version = is_string($newer_version);
+ $is_legacy_loader = loader_major_version_instructions($mv);
+ echo '
';
+ loader_upgrade_instructions($lv,$newer_version);
+ } else {
+ echo '版本为' . $lv . $php_str . '的 ionCube loader已经安装,并能够正确运行加密文件。
';
+ echo '';
+ $is_legacy_loader = loader_major_version_instructions($mv,true);
+ if ($is_legacy_loader) {
+ loader_upgrade_instructions($lv,true);
+ }
+ }
+
+ successful_install_end_instructions($rtl);
+}
+
+function loader_upgrade_instructions($installed_version,$newer_version)
+{
+ if ($newer_version) {
+ echo '';
+ echo '
Loader升级说明 ';
+ $restart_needed = true;
+ $server_type = find_server_type();
+ if ($server_type == SERVER_SHARED || $server_type == SERVER_UNKNOWN) {
+ $loader_path = find_loader(true);
+ if (!is_string($loader_path) || false === user_ini_space_path($loader_path)) {
+ $verb_case = ($server_type == SERVER_UNKNOWN)?"may":"will";
+ echo "
注意:你可能需要管理员权限进行升级。升级完成后服务器需要重启。
";
+ }
+ $restart_needed = false;
+ }
+ if (is_string($newer_version)) {
+ $version_str = "version $newer_version";
+ } else {
+ $version_str = "a newer version";
+ }
+ $loader_name = get_loader_name();
+ echo "
为了从$installed_version 升级到 $version_str,请将下面安装包的$loader_name替换掉已经存在的同名文件:
";
+ if (is_ms_windows()) {
+ $basename = windows_package_name();
+ } else {
+ list($basename,$multiple_os_versions) = unix_package_name();
+ }
+ echo make_archive_list($basename,array('zip','tar.gz'));
+ if ($restart_needed) {
+ echo "
替换掉loader文件后,请重启服务器。
";
+ }
+ echo '
';
+ }
+}
+
+function loader_not_installed()
+{
+ $loader = get_loaderinfo();
+ $sysinfo = get_sysinfo();
+
+ $stype = get_request_parameter('stype');
+ $manual_select = get_request_parameter('manual');
+ $host_type = find_server_type($stype,$manual_select,true);
+
+ if ($host_type != SERVER_UNKNOWN && is_array($loader) && !$sysinfo['DEBUG_BUILD']) {
+ $warnings = server_restriction_warnings();
+ if (empty($_SESSION['use_ini_method']) && $host_type == SERVER_SHARED && runtime_loading_is_possible()) {
+ $errors = runtime_loading_errors();
+ } else {
+ $errors = ini_loader_errors();
+ $warnings = array_merge($warnings,ini_loader_warnings());
+ }
+ if (!empty($errors)) {
+ echo '' . '请注意,Ioncube Loader的安装目前存在以下问题:';
+ echo make_list($errors,"ul");
+ echo '
';
+ }
+ if (!empty($warnings)) {
+ $addword = empty($errors)?'':'also';
+ $plural = (count($warnings)>1)?'s':'';
+ echo '';
+ echo "注意以下问题:";
+ echo make_list($warnings,"ul");
+ echo '
';
+ }
+ }
+ if (!isset($stype)) {
+ echo '文件已经被 ionCube PHP Encoder 加密保护, 必须安装ionCube Loader组件。
';
+ }
+
+ if (!is_supported_php_version()) {
+ echo '服务器目前运行的PHP版本为 ' . PHP_VERSION . ' ,ionCube Loaders支持该版本,同时还支持PHP4系列 PHP 4.2或更高版本, PHP5系列PHP 5.1 或更高版本。
';
+ } elseif ($sysinfo['DEBUG_BUILD']) {
+ echo '服务器运行的PHP是Debug版本, Loader 不支持Debug版本。请确保使用非debug版本重新配置。
';
+ } elseif (!is_array($loader)) {
+ if ($loader == ERROR_WINDOWS_64_BIT) {
+ echo 'Windows 64位的Loaders是可用的。但是如果你安装并运行32位的PHP ,请使用相应32位的loader
';
+ if ($sysinfo['THREAD_SAFE']) {
+ echo '下载下面的32位x86 Windows loader包:';
+ } else {
+ echo ' 下载下面的一个32位x86 Windows非线程安全版本的Windows loader包:';
+ }
+ echo make_archive_list(windows_package_name());
+ } else {
+ echo 'ionCube Loader可能没有符合您操作系统的版本,但是,如果你创建了一个支持服务单 , 可能会需要更多的帮助, 请在工单中包含该向导的URL。
';
+ }
+ } elseif (!$sysinfo['SUPPORTED_COMPILER']) {
+ $supported_compilers = supported_win_compilers();
+ $supported_compiler_string = join('/',$supported_compilers);
+ echo '目前,ionCube Loader 需要使用' . $supported_compiler_string . '编译的PHP。你服务器的PHP是使用 ' . $sysinfo['PHP_COMPILER'] . '.编译的, 可以从PHP.net 下载合适的编译版本。';
+ } else {
+ switch ($host_type) {
+ case SERVER_SHARED:
+ shared_server();
+ break;
+ case SERVER_DEDICATED:
+ dedicated_server();
+ break;
+ case SERVER_LOCAL:
+ local_install();
+ break;
+ default:
+ echo server_selection_form();
+ break;
+ }
+ }
+}
+
+function server_selection_form()
+{
+ $self = get_self();
+ $timeout = (isset($_SESSION['timing_out']) && $_SESSION['timing_out'])?1:0;
+ $hostprovider = (!empty($_SESSION['hostprovider']))?$_SESSION['hostprovider']:'';
+ $hostprovider = htmlspecialchars($hostprovider, ENT_QUOTES, 'UTF-8');
+ $hosturl = (!empty($_SESSION['hosturl']))?$_SESSION['hosturl']:'';
+ $hosturl = htmlspecialchars($hosturl, ENT_QUOTES, 'UTF-8');
+ $form = <<本向导会教你如何安装Ioncube Loader
+ 请选择你的Web服务器的类型,然后单击“下一步”。
+
+
+EOT;
+ return $form;
+}
+
+function phpinfo_page()
+{
+ info_disabled_check();
+ if (function_is_disabled('phpinfo')) {
+ echo "phpinfo is disabled on this server";
+ } else {
+ @phpinfo();
+ }
+}
+
+function loader_check_page($ext_name = LOADER_EXTENSION_NAME)
+{
+ heading();
+
+ $rtl_path = try_runtime_loading_if_applicable();
+
+ if (extension_loaded($ext_name)) {
+ list($lv,$mv,$newer_version) = ioncube_loader_version_information();
+ $phpv = php_version_maj_min();
+ $php_str = ' for PHP ' . $phpv;
+ echo '';
+ echo '
Loader 安装成功 ';
+ echo '
ionCube Loader ' . $lv . $php_str . ' 已经安装 ,加密文件可以正确运行。';
+ if ($newer_version) {
+ echo ' 注意:您的ionCube loader是旧的版本。
';
+ $is_legacy_loader = loader_major_version_instructions($mv);
+ echo '
';
+ loader_upgrade_instructions($lv,$newer_version);
+ } else {
+ echo '';
+ $is_legacy_loader = loader_major_version_instructions($mv);
+ echo '';
+ if ($is_legacy_loader) {
+ loader_upgrade_instructions($lv,true);
+ }
+ }
+ successful_install_end_instructions($rtl_path);
+ } else {
+ echo '';
+ echo '
Loader安装失败 ';
+ echo '
ionCube Loader没有 安装成功。
';
+ if (!is_null($rtl_path)) {
+ echo '
运行时加载失败。
';
+ echo '
';
+ $rt_errors = runtime_loading_errors();
+ if (!empty($rt_errors)) {
+ list_loader_errors($rt_errors);
+ }
+ link_to_php_ini_instructions();
+ } else {
+ echo '';
+ list_loader_errors();
+ }
+ }
+ send_stats('check');
+
+ footer(true);
+}
+
+function ini_loader_errors()
+{
+ $errors = array();
+ if (SERVER_SHARED == find_server_type() && !own_php_ini_possible(true)) {
+ $errors[ERROR_INI_USER_CANNOT_CREATE] = "好像您没有权限在共享服务器上创建您自己的ini配置文件,请联系管理员安装ionCube loader。 ";
+ }
+ $loader_loc = find_loader(false);
+ if (is_string($loader_loc)) {
+ if (!shared_and_runtime_loading()) {
+ $sys = get_sysinfo();
+ if (empty($sys['PHP_INI'])) {
+ $errors[ERROR_INI_NO_PATH] = '找不到配置文件(php.ini)的路径。';
+ } elseif (!@file_exists($sys['PHP_INI'])) {
+ $errors[ERROR_INI_NOT_FOUND] = 'PHP配置文件(' . $sys['PHP_INI'] .')没有找到。';
+ }
+ }
+ $errors = $errors + loader_compatibility_test($loader_loc);
+ } else {
+ $errors = $errors + $loader_loc;
+ $fs_location = find_loader_filesystem();
+ if (!empty($fs_location)) {
+ $fs_loader_errors = loader_compatibility_test($fs_location);
+ if (!empty($fs_loader_errors)) {
+ $errors[ERROR_LOADER_WRONG_GENERAL] = "在$fs_location 下的loader文件与您的系统不兼容。";
+ }
+ $errors = $errors + $fs_loader_errors;
+ }
+ }
+ return $errors;
+}
+
+function unix_path_dir($dir = '')
+{
+ if (empty($dir)) {
+ $dir = dirname(__FILE__);
+ }
+ if (is_ms_windows()) {
+ $dir = str_replace('\\','/',substr($dir,2));
+ }
+ return $dir;
+}
+
+function unrecognised_inis_webspace($startdir)
+{
+ $ini_list = array();
+
+ $ini_name = ini_file_name();
+ $sys = get_sysinfo();
+ $depth = substr_count($startdir,'/');
+
+ $rel_path = '';
+ $rootpath = realpath($_SERVER['DOCUMENT_ROOT']);
+ for ($seps = 0; $seps < $depth; $seps++) {
+ $full_ini_loc = @realpath($startdir . '/' . $rel_path) . DIRECTORY_SEPARATOR . $ini_name;
+ if (@file_exists($full_ini_loc) && $sys['PHP_INI'] != $full_ini_loc) {
+ $ini_list[] = @realpath($full_ini_loc);
+ }
+
+ if (dirname($full_ini_loc) == $rootpath) {
+ break;
+ }
+ $rel_path .= '../';
+ }
+ return $ini_list;
+}
+
+function correct_loader_wrong_location()
+{
+ $loader_location_pair = array();
+ $loader_location = find_loader_filesystem();
+ if (is_string($loader_location)) {
+ $loader_errors = loader_compatibility_test($loader_location);
+ if (empty($loader_errors)) {
+ $ini_loader = scan_inis_for_loader();
+ if (!empty($ini_loader['location'])) {
+ $ini_loader_errors = loader_compatibility_test($ini_loader['location']);
+ if (!empty($ini_loader_errors)) {
+ $loader_location_pair['loader'] = $loader_location;
+ $loader_location_pair['newloc'] = dirname($ini_loader['location']);
+ }
+ } else {
+ $std_dir = loader_install_dir(find_server_type());
+ $std_ld_path = $std_dir . DIRECTORY_SEPARATOR . get_loader_name();
+ if (@file_exists($std_ld_path)) {
+ $stdloc_loader_errors = loader_compatibility_test($std_ld_path);
+ } else {
+ $stdloc_loader_errors = array("Loader文件不存在。");
+ }
+ if (!empty($stdloc_loader_errors)) {
+ $loader_location_pair['loader'] = $loader_location;
+ $loader_location_pair['newloc'] = $std_dir;
+ }
+ }
+ }
+ }
+ return $loader_location_pair;
+}
+
+function ini_loader_warnings()
+{
+ $warnings = array();
+ if (find_server_type() == SERVER_SHARED)
+ {
+ if (own_php_ini_possible()) {
+ $sys = get_sysinfo();
+ $ini_name = ini_file_name();
+ $rootpath = realpath($_SERVER['DOCUMENT_ROOT']);
+ $root_ini_file = $rootpath . DIRECTORY_SEPARATOR . $ini_name;
+ $cgibinpath = @realpath($_SERVER['DOCUMENT_ROOT'] . "/cgi-bin");
+ $cgibin_ini_file = (empty($cgibinpath))?'':$cgibinpath . DIRECTORY_SEPARATOR . $ini_name;
+ $here = unix_path_dir();
+ $ini_files = unrecognised_inis_webspace($here);
+ $shared_ini_loc = shared_ini_location();
+ $shared_ini_file = $shared_ini_loc . DIRECTORY_SEPARATOR . $ini_name;
+ $ini_dir = dirname($sys['PHP_INI']);
+ $all_ini_locations_used = !empty($ini_files);
+ foreach ($ini_files as $full_ini_loc) {
+ $advice = "文件 $full_ini_loc 没有被PHP认可。";
+ $advice .= " 请检查文件名、路径是正确的。";
+ if (!ini_same_dir_as_wizard()) {
+ $ini_loc_dir = dirname($full_ini_loc);
+ if (!@file_exists($shared_ini_file) && !empty($shared_ini_loc) && $ini_loc_dir != $shared_ini_loc && $ini_dir != $shared_ini_loc) {
+ $all_ini_locations_used = false;
+ $advice .= " 请将$full_ini_loc 复制到" . $shared_ini_loc . "。";
+ } else {
+ if (!@file_exists($root_ini_file) && $rootpath != $shared_ini_loc && $full_ini_loc != $rootpath) {
+ $all_ini_locations_used = false;
+ $advice .= " 请将文件 $full_ini_loc 复制到 " . $rootpath . ".";
+ }
+ if (!empty($cgibin_ini_file) && !@file_exists($cgibin_ini_file) && $cgibinpath != $shared_ini_loc && $full_ini_loc != $cgibinpath && $cgibinpath != $rootpath) {
+ $all_ini_locations_used = false;
+ $advice .= " 请将文件 $full_ini_loc 复制到 " . $cgibinpath . "。";
+ }
+ $herepath = realpath($here);
+ $here_ini_file = $herepath . DIRECTORY_SEPARATOR . $ini_name;
+ if (!@file_exists($here_ini_file) && $herepath != $rootpath && $herepath != $cgibinpath) {
+ $all_ini_locations_used = false;
+ $advice .= " 需要将文件 $full_ini_loc 复制到 $herepath 和所有加密文件所在的路径。";
+ }
+ }
+ } else {
+ $all_ini_locations_used = false;
+ }
+ $warnings[] = $advice;
+ }
+ if ($all_ini_locations_used) {
+ $warnings[] = "好像ini配置文件不在默认的位置,请联系服务器提供商,询问是否能够创建自己的PHP ini文件和创建位置。 ";
+ }
+ } else {
+ if (own_php_ini_possible(true)) {
+ $warnings[] = "你可能没有权限在共享服务器上创建自己的ini文件。 请联系管理员安装ionCube loader。 ";
+ }
+ }
+ } else {
+ $loader_dir_pair = correct_loader_wrong_location();
+ if (!empty($loader_dir_pair)) {
+ $advice = "在${loader_dir_pair['loader']}已经找到可用的loader。";
+ if ($loader_dir_pair['loader'] != $loader_dir_pair['newloc']) {
+ $advice .= " 你可能想将loader文件 ${loader_dir_pair['loader']} 复制到 ${loader_dir_pair['newloc']}。";
+ }
+ $warnings[] = $advice;
+ }
+ }
+ return $warnings;
+}
+
+function list_loader_errors($errors = array(),$warnings = array(),$suggest_restart = true)
+{
+ $default = get_default_address();
+ $retry_message = '';
+
+ if (empty($errors)) {
+ $errors = ini_loader_errors();
+ if (empty($warnings)) {
+ $warnings = ini_loader_warnings();
+ }
+ }
+ if (!empty($errors)) {
+ $try_again = '重试 ';
+ echo '';
+ if (count($errors) > 1) {
+ echo '安装过程中出现以下问题:';
+ $retry_message = "请解决这些问题并$try_again。";
+ } else {
+ echo '安装过程中出现以下问题:';
+ $retry_message = "请解决这些问题并$try_again。";
+ }
+ if (array_key_exists(ERROR_INI_USER_CANNOT_CREATE,$errors)) {
+ $retry_message = '';
+ }
+ echo make_list($errors,"ul");
+ echo '
';
+ if (!empty($warnings)) {
+ echo '';
+ echo '同时请注意:';
+ echo make_list($warnings,"ul");
+ echo '
';
+ }
+ } elseif (!empty($warnings)) {
+ echo '';
+ echo '注意下面潜在的问题:';
+ echo make_list($warnings,"ul");
+ echo '
';
+ } elseif ($suggest_restart) {
+ if (SERVER_SHARED == find_server_type()) {
+ echo "请联系管理员安装ionCube Loader。
";
+ } else {
+ if (selinux_is_enabled()) {
+ echo "好像服务器上的SElinux已经开启。 使用root 运行命令 restorecon [full path to loader file]能够解决该问题。如果没有解决,请参照 http://www.cuteshift.com/57/install-ioncube-loader-while-selinux-enabled/ ,安装 ionCube Loader。
";
+ } elseif (grsecurity_is_enabled()) {
+ echo "好像服务器上的 grsecurity 已经开启。 运行命令 execstack -c [full path to loader file] ,并重启服务器。
";
+ } else {
+ $sysinfo = get_sysinfo();
+ $ss = $sysinfo['SS'];
+ if (!$sysinfo['CGI_CLI'] || is_ms_windows()) {
+ echo "请检查 $ss 服务器已经重启。
";
+ }
+ }
+ }
+ }
+ echo '';
+ echo $retry_message;
+ echo " 你可能需要下面的帮助:";
+ echo make_list(help_resources($errors),"ul");
+ echo '
点击这里重新开始向导 。
';
+}
+
+function phpconfig_page()
+{
+ info_disabled_check();
+ $sys = get_sysinfo();
+ $download = get_request_parameter('download');
+ $ini_file_name = '';
+ if (!empty($download)) {
+ $ini_file_name = get_request_parameter('ininame');
+ if (empty($ini_file_name)) {
+ $ini_file_name = ini_file_name();
+ }
+ header('Content-Type: text/plain');
+ header('Content-Disposition: attachment; filename=' . $ini_file_name);
+ } else {
+ header('Content-Type: text/plain');
+ }
+ $exclude_original = get_request_parameter('newlinesonly');
+ $prepend = get_request_parameter('prepend');
+ $stype = get_request_parameter('stype');
+ $server_type = find_server_type($stype);
+ if (!empty($exclude_original) || !empty($prepend)) {
+ $loader_dir = loader_install_dir($server_type);
+ $zend_lines = zend_extension_lines($loader_dir);
+ echo join(PHP_EOL,$zend_lines);
+ echo PHP_EOL;
+ }
+ if (empty($ini_file_name) || empty($sys['PHP_INI_DIR']) || ($sys['PHP_INI_BASENAME'] == $ini_file_name)) {
+ $original_ini_file = isset($sys['PHP_INI'])?$sys['PHP_INI']:'';
+ } else {
+ $original_ini_file = $sys['PHP_INI_DIR'] . DIRECTORY_SEPARATOR . $ini_file_name;
+ }
+ if (empty($exclude_original) && !empty($original_ini_file) && @file_exists($original_ini_file)) {
+ if (!empty($download)) {
+ @readfile($original_ini_file);
+ } else {
+ echo all_ini_contents();
+ }
+ }
+}
+
+function extra_page()
+{
+ info_disabled_check();
+ heading();
+ $sys = get_sysinfo();
+ $ini_loader = scan_inis_for_loader();
+ $ini_loader_path = $ini_loader['location'];
+ $loader_path = find_loader(true);
+ $ldinf = get_loaderinfo();
+ $self = get_self();
+ echo "附加信息 ";
+ echo "";
+ $lines = array();
+ if (is_string($loader_path)) {
+ $lines['Loader is at'] = $loader_path;
+ $loader_system = loader_system($loader_path);
+ if (!empty($loader_system)) {
+ $lines['Loader OS code'] = $loader_system['oscode'];
+ $lines['Loader architecture'] = $loader_system['arch'];
+ $lines['Loader word size'] = $loader_system['wordsize'];
+ $lines['Loader PHP version'] = $loader_system['php_version'];
+ $lines['Loader thread safety'] = $loader_system['thread_safe']?'Yes':'No';
+ $lines['Loader compiler'] = $loader_system['compiler'];
+ $lines['Loader version'] = $loader_system['loader_version'];
+ $lines['File size is'] = filesize($loader_path) . " bytes.";
+ $lines['MD5 sum is'] = md5_file($loader_path);
+ }
+ $lines['Loader file'] = "Download loader file ";
+ } else {
+ $lines['Loader file'] = "Loader cannot be found.";
+ }
+ $lines['Loader found in ini file'] = empty($ini_loader_path)?"No":"Yes";
+ if (!empty($ini_loader_path) && (!is_string($loader_path) || $ini_loader_path != $loader_path)) {
+ $lines['Loader location found in ini file'] = $ini_loader_path;
+ $loader_system = loader_system($ini_loader_path);
+ if (!empty($loader_system)) {
+ $lines['Ini Loader OS code'] = $loader_system['oscode'];
+ $lines['Ini Loader architecture'] = $loader_system['arch'];
+ $lines['Ini Loader word size'] = $loader_system['wordsize'];
+ $lines['Ini Loader PHP version'] = $loader_system['php_version'];
+ $lines['Ini Loader thread safety'] = $loader_system['thread_safe']?'Yes':'No';
+ $lines['Ini Loader compiler'] = $loader_system['compiler'];
+ $lines['Ini Loader version'] = $loader_system['loader_version'];
+ }
+ }
+ $lines["OS extra security"] = (selinux_is_enabled() || possibly_selinux())?"SELinux":(grsecurity_is_enabled()?"Grsecurity":"None");
+ $lines['PHPRC is'] = $sys['PHPRC'];
+ $lines['INI DIR is'] = $sys['PHP_INI_DIR'];
+ $lines['Additional INI files'] = $sys['PHP_INI_ADDITIONAL'];
+ $stype = get_request_parameter('stype');
+ $server_type = find_server_type($stype);
+ $lines['Server type is'] = server_type_string();
+ $lines["PHP uname"] = $ldinf['uname'];
+ $lines['Server word size is'] = $ldinf['wordsize'];
+ $lines['Disabled functions'] = ini_get('disable_functions');
+ $writeable_dirs = writeable_directories();
+ $lines['Writeable loader locations'] = (empty($writeable_dirs))?"None ":join(", ",$writeable_dirs);
+ if (!empty($_SESSION['hostprovider'])) {
+ $lines['Hosting provider'] = $_SESSION['hostprovider'];
+ $lines['Provider URL'] = $_SESSION['hosturl'];
+ }
+ foreach ($lines as $h => $i) {
+ $v = (empty($i))?'EMPTY ':$i;
+ echo ''. $h . ': ' . '' . $v . ' ';
+ }
+ echo "
";
+ footer(true);
+}
+
+function loaderbin_page()
+{
+ info_disabled_check();
+ $loader_path = find_loader(true);
+ if (is_string($loader_path)) {
+ header('Content-Type: application/octet-stream');
+ header('Content-Disposition: attachment; filename='. basename($loader_path));
+ @readfile($loader_path);
+ }
+}
+
+
+
+function GoDaddy_root($html_root = '')
+{
+ if (empty($_SESSION['not_go_daddy']) && empty($_SESSION['godaddy_root'])) {
+ $godaddy_pattern = "[\\/]home[\\/]content[\\/][0-9a-z][\\/][0-9a-z][\\/][0-9a-z][\\/][0-9a-z]+[\\/]html";
+
+ if (empty($html_root)) {
+ $html_root = $_SERVER['DOCUMENT_ROOT'];
+ }
+ if (preg_match("@$godaddy_pattern@i",$html_root,$matches)) {
+ $_SESSION['godaddy_root'] = $matches[0];
+ } else {
+ $_SESSION['not_go_daddy'] = 1;
+ $_SESSION['godaddy_root'] = '';
+ }
+ } elseif (!empty($_SESSION['not_go_daddy'])) {
+ $_SESSION['godaddy_root'] = '';
+ }
+ if (!empty($_SESSION['godaddy_root'])) {
+ $_SESSION['hostprovider'] = 'GoDaddy';
+ $_SESSION['hosturl'] = 'www.godaddy.com';
+ }
+ return $_SESSION['godaddy_root'];
+}
+
+function GoDaddy_windows_instructions()
+{
+ $instr = "It appears that you are hosted on a Windows server at GoDaddy. ";
+ $instr .= "Please change to a Linux hosting plan at GoDaddy. ";
+ $instr .= "If you contact their support team they should be able to switch you to a Linux server.";
+
+ echo $instr;
+}
+
+function GoDaddy_linux_instructions($html_dir)
+{
+ $base = get_base_address();
+ $loader_name = get_loader_name();
+ $zend_extension_line="zend_extension = $html_dir/ioncube/$loader_name";
+ $php_ini_name = is_php_version_or_greater(5,0)?'php5.ini':'php.ini';
+ $ini_path = $html_dir . '/' . $php_ini_name;
+
+ $instr = array();
+ $instr[] = 'In your html directory, ' . $html_dir . ', create a sub-directory called ioncube .';
+ if (@file_exists($ini_path)) {
+ $instr[] = "Edit the $php_ini_name in your $html_dir and add the following line to the top of the file: " . $zend_extension_line ;
+ } else {
+ $instr[] = "Save this $php_ini_name file and upload it to your html directory, $html_dir";
+ }
+ $instr[] = 'Download the Linux ionCube Loaders .';
+ $instr[] = 'Unzip the loaders and upload them into the ioncube directory you created previously.';
+ $instr[] = 'The encoded files should now be working.';
+
+ echo '';
+ echo (make_list($instr));
+ echo '
';
+}
+
+function GoDaddy_page()
+{
+ $base = get_base_address();
+
+ heading();
+
+ $inst_str = 'GoDaddy Installation Instructions ';
+ $inst_str .= 'It appears that you are hosted with GoDaddy (www.godaddy.com ). ';
+ $inst_str .= "If that is not the case then please click here to go to the main page of this installation wizard .
";
+ $inst_str .= "If you have already installed the loader then please click here to test the loader .
";
+
+ echo $inst_str;
+
+ if (is_ms_windows()) {
+ GoDaddy_windows_instructions();
+ } else {
+ GoDaddy_linux_instructions($_SESSION['godaddy_root']);
+ }
+
+ send_stats('gd_default');
+
+ footer(true);
+}
+
+
+
+function get_request_parameter($param_name)
+{
+ static $request_array;
+
+ if (!isset($request_array)) {
+ if (isset($_GET)) {
+ $request_array = $_GET;
+ } elseif (isset($HTTP_GET_VARS)) {
+ $request_array = $HTTP_GET_VARS;
+ }
+ }
+
+ if (isset($request_array[$param_name])) {
+ $return_value = strip_tags($request_array[$param_name]);
+ } else {
+ $return_value = null;
+ }
+ return $return_value;
+}
+
+function make_list($list_items,$list_type='ol')
+{
+ $html = '';
+ if (!empty($list_items)) {
+ $html .= "<$list_type>";
+ $html .= ' ';
+ $html .= join(' ',$list_items);
+ $html .= ' ';
+ $html .= "$list_type>";
+ }
+ return $html;
+}
+
+function make_archive_list($basename,$archives_list = array(),$download_server = IONCUBE_DOWNLOADS_SERVER)
+{
+ if (empty($archives_list)) {
+ $archives_list = array('tar.gz','tar.bz2','zip','ipf.zip');
+ }
+
+ foreach ($archives_list as $a) {
+ $link_text = ($a == 'ipf.zip')?'MS Windows installer':$a;
+ $ext_sep = ($a == 'ipf.zip')?'_':'.';
+ $archive_list[] = "$link_text ";
+ }
+
+ return make_list($archive_list,"ul");
+}
+
+function error($m)
+{
+ die("错误: $m 你可以反馈该错误 来完善文档。最好包含出错的URL,这样我们可以测试一下。");
+}
+
+function failsafe_get_self()
+{
+ $result = '';
+ $sfn = $_SERVER['SCRIPT_FILENAME'];
+ $dr = $_SERVER['DOCUMENT_ROOT'];
+ if (!empty($sfn) && !empty($dr)) {
+ if ($dr == '/' || $dr == '\\') {
+ $result = $sfn;
+ } else {
+ $drpos = strpos($sfn,$dr);
+ if ($drpos === 0) {
+ $drlen = strlen($dr);
+ $result = substr($sfn,$drlen);
+ }
+ }
+ $result = str_replace('\\','/',$result);
+ }
+ if (empty($result)) {
+ $result = DEFAULT_SELF;
+ }
+ return $result;
+}
+
+function get_self()
+{
+ if (empty($_SERVER['PHP_SELF'])) {
+ if (empty($_SERVER['SCRIPT_NAME'])) {
+ if (empty($_SERVER['REQUEST_URI'])) {
+ return failsafe_get_self();
+ } else {
+ return $_SERVER['REQUEST_URI'];
+ }
+ } else {
+ return $_SERVER['SCRIPT_NAME'];
+ }
+ } else {
+ return $_SERVER['PHP_SELF'];
+ }
+}
+
+function get_default_page()
+{
+ $godaddy_root = GoDaddy_root();
+ if (empty($godaddy_root)) {
+ $page = 'default';
+ } else {
+ $page = 'GoDaddy';
+ }
+ return $page;
+}
+
+function get_base_address()
+{
+ $self = get_self();
+ $remote_timeout = (isset($_SESSION['timing_out']) && $_SESSION['timing_out'])?'timeout=1':'timeout=0';
+ $using_ini = (isset($_SESSION['use_ini_method']) && $_SESSION['use_ini_method'])?'ini=1':'ini=0';
+ return $self . '?' . $remote_timeout . '&' . $using_ini;
+}
+
+function get_default_address($include_timeout = true)
+{
+ if ($include_timeout) {
+ $base = get_base_address();
+ $base .= "&";
+ } else {
+ $base = get_self();
+ $base .= "?";
+ }
+ $page = get_default_page();
+
+ return $base . 'page=' . $page;
+}
+
+function heading()
+{
+ $self = get_self();
+
+ echo <<
+
+
+ ionCube Loader Wizard
+
+
+
+
+
+
+
+
+
ionCube Loader 安装向导
+EOT;
+}
+
+function footer($update_info = null)
+{
+ $self = get_self();
+ $base = get_base_address();
+ $default = get_default_address(false);
+ $year = gmdate("Y");
+
+ echo "
";
+ echo "\n";
+ echo "\n\n";
+}
+
+function css_page()
+{
+ header('Content-Type: text/css');
+ echo <<