[-]
[+]
|
Changed |
php5-ioncube.spec
|
|
[-]
[+]
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/LICENSE.txt
^
|
@@ -235,4 +235,4 @@
interpreted in accordance with the laws of England and subject to the
exclusive jurisdiction of the English courts.
-Copyright (c) 2002-2009 ionCube Ltd. Last revised 11-Jul-2009
+Copyright (c) 2002-2010 ionCube Ltd. Last revised 11-Jul-2009
|
[-]
[+]
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/README.txt
^
|
@@ -1,114 +1,64 @@
- The ionCube Loader - Version 3.3
- --------------------------------
+ The ionCube Loader
+ ------------------
-This package contains the latest available Loaders for the PHP versions and
-operating systems that you selected.
+This package contains:
-In the package you should also have:
+* the latest available Loaders for the platform(s) selected
-* Loaders, including beta support for PHP 5.3 (not available on all platforms)
+* a Loader Wizard script to assist with Loader installation (loader-wizard.php)
-* The Loader installation helper script (ioncube-loader-helper.php)
+* the License document for use of the Loader and encoded files (LICENSE)
-* A file encoded with the ionCube PHP Encoder. This is needed by the helper
- script (ioncube-encoded-file.php).
-* The License for use of the Loader and encoded files (LICENSE)
-
-
-PHP 5.3 Support
----------------
-
-This package also includes a Loader for the latest generation of the PHP
-language, PHP 5.3. Our Loader for PHP 5.3 allows files encoded for previous
-versions of PHP to be run on PHP 5.3, including in most cases, files encoded
-for the PHP 4 language. The support for PHP 5.3 is well tested both with our
-own test suite and also major web applications, however it is a beta release,
-and we welcome reports of any unexpected behaviour, which if accompanied by a
-a test case to reproduce, we will investigate.
-
-
-Installation
+INSTALLATION
------------
-* INSTALLING FOR RUN-TIME LOADING
-
-The run-time loading feature is the easiest way to run encoded files, and
-lets encoded files locate and install the correct Loader when needed.
-
-Provided that run-time loading is supported on the target system, encoded
-scripts and Loaders can be bundled together without the user having to install
-any Loader or update their system configuration, and without having to
-know about the PHP version or operating system used.
-
-For run-time loading to work, a directory called 'ioncube' containing the
-Loaders (e.g. this directory) should be placed in or above the top
-directory of encoded files. For example, if you have encoded files in
-or below '/var/www/htdocs/', you might place the 'ioncube' directory
-in '/var/www/htdocs' or '/var/www'. If you have an application or library
-to distribute, you could place the ioncube directory within the top directory
-of your project or library.
+** Installing to a remote SHARED server
+1. Upload the contents of this package to a directory/folder called ioncube
+ within your main web scripts area.
-Runtime install with PHP 5.2.5 and above
-----------------------------------------
+2. Launch the Loader Wizard script in your browser. For example:
+ http://yourdomain/ioncube/loader-wizard.php
-The PHP 5.2.5 release of PHP addressed a potential security weakness with the
-dl() function, used by the runtime install method. This improvement requires
-that module libraries such as the Loader must be located in the module
-extensions directory if installed with dl(). If the Loader is installed in
-the extensions directory, and files are encoded by Encoder 6.5.16 and later,
-the online Encoder, or on older Encoder releases with a modified
-PHP preamble (http://www.ioncube.com/newpreamble.zip and tar.gz), then
-runtime install will usually be possible if dl() is available. If the
-runtime method is unavailable, installing in a php.ini file may be used.
+If the wizard is not found, carefully check the location where you uploaded
+the Loaders and the wizard script to on your server.
-It's not working - why?
------------------------
+** Installing to a remote UNIX/LINUX DEDICATED or VPS server
-If encoded files fail to run with run-time loading, you can test this by
-using the helper PHP script 'ioncube-loader-helper.php' that's included in
-this package.
+1. Upload the contents of this package to /usr/local/ioncube
-1. Copy the 'ioncube-loader-helper.php' and 'ioncube-encoded-file.php' PHP scripts
- to a directory where you expect encoded files to be working.
+2. Copy the loader-wizard.php script to the root web directory of a
+ configured domain on the server
-2. Access the 'ioncube-loader-helper.php' script from a web server or with a
- PHP cli or cgi executable.
+2. Launch the Loader Wizard script in your browser. For example:
+ http://yourdomain/loader-wizard.php
-3. Choose the 'Run-time loading installation instructions' option.
-4. The script will try to locate and install the required Loader, and will
- produce output as it runs.
+** Installing to a remote WINDOWS DEDICATED or VPS server
-5. Once complete the script will either report that run-time loading is working,
- will provide instructions for how to correct any issue with the server
- configuration, or will report that Loaders must be installed in the php.ini
- file.
+1. Upload the contents of this package to C:\windows\system32
+2. Copy the loader-wizard.php script to the root web folder of a
+ configured domain on the server
-* INSTALLING IN PHP.INI
+2. Launch the Loader Wizard script in your browser. For example:
+ http://yourdomain/loader-wizard.php
-Installing in the php.ini file is also simple, and offers the best
-performance for encoded scripts. It is also required for systems that use
-safe mode, or if PHP has been built with thread support, e.g. on Windows.
-The 'php.ini installation instructions' option on the installation helper PHP
-script is provided to assist with this. Access the script from a web server
-or a PHP cli or cgi executable and it should tell you which Loader to install,
-which file to edit and what you need to add (it's just a one line change).
+XCACHE and XDEBUG
+-----------------
+If you wish to enable *both* XCache and Xdebug whilst running the Loader, please
+use XCache as an ordinary extension rather than a Zend engine extension. That
+is, install XCache using the following line in the ini file and with xcache.so
+in the extensions directory:
-* NON-THREADED WINDOWS
+extension = xcache.so
-Until recent PHP releases, PHP has always been built with thread-safety
-enabled. Our standard Windows Loaders are built for threaded releases, and
-would be installed in the php.ini file using zend_extension_ts.
-As of PHP 5.2, PHP installations on Windows are sometimes made with
-thread safety disabled, and in this case our Windows non-TS Loaders should
-be used, and zend_extension used in the php.ini file instead of
-zend_extension_ts.
+If you are only running XCache then it can be installed as a Zend engine
+extension when the Loader is also installed.
-Copyright (c) 2002-2009 ionCube Ltd. Last revised 09-Oct-2009
+Copyright (c) 2002-2011 ionCube Ltd. Last revised 21-Jan-2011
|
[-]
[+]
|
Deleted |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube-encoded-file.php
^
|
@@ -1,11 +0,0 @@
-<?php //00337
-if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='/ioncube/ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if((@$__id[1])==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}@dl($__ln);}else{echo('The file '.__FILE__." is corrupted.\n");return 0;}if(function_exists('_il_exec')){return _il_exec();}echo('This encoded file cannot be run. Please run the file ioncube-loader-helper.php for more information.');return 0;
-
-?>
-4+oV5E3tizCOGmZayKycyFdfdNEYKcDQ2UctWQgi5wUMAYDSmMVeoLZpTJYlsb2ZS87vmUDNyJXy
-u6mBqXBOY8uBDM8S9FpfYpOU8H2UybP4eoySb3gsXR3LRDVhZQOE547VladmAtDtg672Z0axEinz
-4Q0KK4ySJmQf/y74+9n0mQxv89e/3ORP/KEy9C7qQ57ANCp167ft8uwqnxmMG2B0FghtwVsgbjWW
-TRM9HpX9RfSRUpbRfJyiWM77aOjzW9XB2eAJyxqd/T5a5+EXVl7auGnQ2ZiQhbeeajCwKRwWP0X9
-N8VmcedG2VriSa6TMSY++2C4zLx5FcRziK7DMb2vYBQA0IhN8SOiVv4t5JIzumywsmq9bHtAZLdU
-62oKLWPotyYaB7R/+nSDX4s7Vwifp0nXJe8NQ5zI36p4UMmoZnHHKC/+oFab7U7rI4uC707fwrhr
-b95eZu1QsG+TWFhNjn3Ao9UClGrvoye+fIL7xrq=
\ No newline at end of file
|
[-]
[+]
|
Deleted |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube-loader-helper.php
^
|
@@ -1,921 +0,0 @@
-<?php
-
-//globals used by rtl tester
-$working = "";
-$status = "";
-$instructions = "";
-$already_loaded = extension_loaded('ionCube Loader');
-
-if (!isset($HTTP_SERVER_VARS))
- $HTTP_SERVER_VARS = &$_SERVER;
-
-if (!isset($HTTP_GET_VARS))
- $HTTP_GET_VARS = &$_GET;
-
-//install assistant globals
-
-ini_set('error_reporting', E_ALL & ~E_NOTICE);
-ini_set('display_errors', 'On');
-ini_set('log_errors','Off');
-
-//
-// Determine PHP flavour
-//
-
-$php_version = phpversion();
-$php_flavour = substr($php_version,0,3);
-
-
-//
-// Get the full name and short name for the OS
-//
-
-$os_name = substr(php_uname(),0,strpos(php_uname(),' '));
-$os_code = strtolower(substr($os_name,0,3));
-
-$dll_sfix = (($os_code == 'win') ? '.dll' : '.so');
-
-
-//
-// Analyse the PHP build
-//
-
-ob_start();
-phpinfo(INFO_GENERAL);
-$php_info = ob_get_contents();
-ob_end_clean();
-
-$thread_safe = false;
-$debug_build = false;
-$php_ini_path = '';
-
-
-//
-// Text or HTML output?
-//
-
-$cli = (php_sapi_name() == 'cli');
-$nl = ($cli ? "\n" : '<br>');
-
-
-function check_safe_mode()
-{
- $sm = ini_get('safe_mode');
- return ($sm=='1');
-}
-
-function getCSS()
-{
- $css = "
- body, td
- {
- font-size:70%;
- font-family:verdana, helvetica, arial;
- line-height:200%;
- }
-
- div.main
- {
- width:80%;
- text-align:left;
- top:20px;
- position:relative;
- border:2px solid #F0F0F0;
- padding:20px;
- }
-
- code
- {
- font-family:courier, helvetica, arial;
- }
- table.ini_line
- {
- border:2px solid #c8e8c8;
- background-color:white;
- }
-
- table.ini_line tr td
- {
- background-color:#c8e8c8;
- }
-
- table.analysis
- {
- border:2px solid #e0e0ff;
- background-color:white;
- }
-
- table.analysis tr td
- {
- background-color: #e0e0ff;
- }
- ";
- return $css;
-}
-
-function displayLogo()
-{
-
- $img_encoded="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";
-
- header("Content-type: image/gif");
- header("Cache-control: public");
- echo base64_decode($img_encoded);
-
-}
-
-function weblink($url, $display, $new_window=false)
-{
- if (use_html()) {
- $extra = "";
- if ($new_window)
- $extra = 'target="_blank"';
-
- return "<a href=\"$url\" $extra>$display</a>";
- } else {
- return $url;
- }
-}
-
-//
-// Where are we?
-//
-$here = dirname(__FILE__);
-
-
-
-
-//rtl tester specific functions
-function echo_working($msg)
-{
- global $working;
- $working.=$msg;
-}
-
-function echo_status($msg)
-{
- global $status;
- $status.=$msg;
-}
-
-function echo_instructions($msg)
-{
- global $instructions;
- $instructions.=$msg;
-}
-
-
-
-//
-// Detect some system parameters
-//
-function ic_system_info()
-{
- $thread_safe = false;
- $debug_build = false;
- $cgi_cli = false;
- $php_ini_path = '';
-
- ob_start();
- phpinfo(INFO_GENERAL);
- $php_info = ob_get_contents();
- ob_end_clean();
-
- foreach (split("\n",$php_info) as $line) {
- if (eregi('command',$line)) {
- continue;
- }
-
- if (preg_match('/thread safety.*(enabled|yes)/Ui',$line)) {
- $thread_safe = true;
- }
-
- if (preg_match('/debug.*(enabled|yes)/Ui',$line)) {
- $debug_build = true;
- }
-
- if (eregi("configuration file.*(</B></td><TD ALIGN=\"left\">| => |v\">)([^ <]*)(.*</td.*)?",$line,$match)) {
- $php_ini_path = $match[2];
-
- //
- // If we can't access the php.ini file then we probably lost on the match
- //
- if (!@file_exists($php_ini_path)) {
- $php_ini_path = '';
- }
- }
-
- $cgi_cli = ((strpos(php_sapi_name(),'cgi') !== false) ||
- (strpos(php_sapi_name(),'cli') !== false));
- }
-
- return array('THREAD_SAFE' => $thread_safe,
- 'DEBUG_BUILD' => $debug_build,
- 'PHP_INI' => $php_ini_path,
- 'CGI_CLI' => $cgi_cli);
-}
-
-function rtl_tester()
-{
-
- global $cli;
- global $nl;
- global $working;
- global $instructions;
- global $status;
- global $already_loaded;
-
- $working = "";
- $status = "";
- $instructions = "";
-
- $ok = true;
- $already_installed = false;
-
-
- echo_working("\n");
-
- //
- // Is the loader already installed?
- //
- if ($already_loaded) {
- echo_status("An ionCube Loader is already installed and run-time loading is unnecessary.\n"
-. "Encoded files should load without problems.$nl");
-
- echo_instructions("If you have problems running encoded files, make sure that you select binary\n"
-. "mode if using FTP. If unpacking files with WinZIP you must also disable the\n"
-. "'TAR Smart CR/LF conversion' feature.$nl$nl");
- $already_installed = true;
- } else {
- //
- // Intro
- //
- echo_working("Testing whether your system supports run-time loading...$nl$nl");
- }
-
-
-
- //
- // Test some system info
- //
- $sys_info = ic_system_info();
-
- if (!$already_installed) {
- if ($sys_info['THREAD_SAFE'] && !$sys_info['CGI_CLI']) {
- echo_status("Your PHP install appears to have threading support and run-time Loading\n"
- ."is only possible on threaded web servers if using the CGI, FastCGI or\n"
- ."CLI interface.$nl");
- echo_instructions("To run encoded files please install the Loader in the php.ini file.");
- $ok = false;
- }
-
- if ($sys_info['DEBUG_BUILD']) {
- echo_status("Your PHP installation appears to be built with debugging support\n"
-. "enabled and this is incompatible with ionCube Loaders.$nl${nl}Debugging support in PHP produces slower execution, is\n"
-. "not recommended for production builds and was probably a mistake.$nl");
-
- echo_instructions("You should rebuild PHP without the --enable-debug option.$nl");
- $ok = false;
- }
-
- //
- // Check safe mode and for a valid extensions directory
- //
- if (check_safe_mode()) {
- echo_status("PHP safe mode is enabled and run time loading will not be possible.");
- echo_instructions( "To run encoded files please install the Loader in the php.ini file.\n"
- . "Alternatively contact your hosting provider or system administrator,\n"
- . "and ask them to disable safe mode for your account.");
- $ok = false;
- }
- /*
- elseif (!is_dir(realpath(ini_get('extension_dir')))) {
- echo "The setting of extension_dir in the php.ini file is not a directory
- or may not exist and run time loading will not be possible. You do not need
- write permissions on the extension_dir but for run-time loading to work
- a path from the extensions directory to wherever the Loader is installed
- must exist.$nl";
- $ok = false;
- }
- */
-
- // If ok to try and find a Loader
- if ($ok) {
- //
- // Look for a Loader
- //
-
- // Old style naming should be long gone now
- $test_old_name = false;
-
- $_u = php_uname();
- $_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' : '.so');
-
- $_ln_old="ioncube_loader.$_loader_sfix";
- $_ln_old_loc="/ioncube/$_ln_old";
-
- $_ln_new="ioncube_loader_${_os_key}_${_php_family}${_loader_sfix}";
- $_ln_new_loc="/ioncube/$_ln_new";
-
- echo_working("${nl}Looking for Loader '$_ln_new'");
- if ($test_old_name) {
- echo_working(" or '$_ln_old'");
- }
- echo_working($nl.$nl);
-
- $_extdir = ini_get('extension_dir');
- if ($_extdir == './') {
- $_extdir = '.';
- }
-
- $_oid = $_id = realpath($_extdir);
-
- $_here = dirname(__FILE__);
- if ((@$_id[1]) == ':') {
- $_id = str_replace('\\','/',substr($_id,2));
- $_here = str_replace('\\','/',substr($_here,2));
- }
- $_rd=str_repeat('/..',substr_count($_id,'/')).$_here.'/';
-
- if ($_oid !== false) {
- echo_working("Extensions Dir: $_extdir ($_id)$nl");
- echo_working("Relative Path: $_rd$nl");
- } else {
- echo_working("Extensions Dir: $_extdir (NOT FOUND)$nl$nl");
-
- echo_status("The directory set for the extension_dir entry in the\n"
-. "php.ini file may not exist, and run time loading will not be possible.$nl");
- echo_instructions( "Please ask your hosting provider or system administrator to create the\n"
- . "directory$nl$nl"
- . "$_extdir$nl$nl"
- . "ensuring that it is accessible by the web server software. They do not\n"
- . "need to restart the server. Then rerun this script. As an alternative,\n"
- . "your host could install the Loader in the php.ini file.$nl");
- $ok = false;
- }
-
- if ($ok) {
- $_ln = '';
- $_i=strlen($_rd);
- while($_i--) {
- if($_rd[$_i]=='/') {
- if ($test_old_name) {
- // Try the old style Loader name
- $_lp=substr($_rd,0,$_i).$_ln_old_loc;
- $_fqlp=$_oid.$_lp;
- if(@file_exists($_fqlp)) {
- echo_working("Found Loader: $_fqlp$nl");
- $_ln=$_lp;
- break;
- }
- }
- // Try the new style Loader name
- $_lp=substr($_rd,0,$_i).$_ln_new_loc;
- $_fqlp=$_oid.$_lp;
- if(@file_exists($_fqlp)) {
- echo_working("Found Loader: $_fqlp$nl");
- $_ln=$_lp;
- break;
- }
- }
- }
-
- //
- // If Loader not found, try the fallback of in the extensions directory
- //
- if (!$_ln) {
- if ($test_old_name) {
- if (@file_exists($_id.$_ln_old_loc)) {
- $_ln = $_ln_old_loc;
- }
- }
- if (@file_exists($_id.$_ln_new_loc)) {
- $_ln = $_ln_new_loc;
- }
-
- if ($_ln) {
- echo_working("Found Loader $_ln in extensions directory.$nl");
- }
- }
-
- echo_working($nl);
-
- if ($_ln) {
- echo_working("Trying to install Loader - this may produce an error...$nl$nl");
- dl($_ln);
-
- if(extension_loaded('ionCube Loader')) {
- echo_status( "The Loader was successfully installed and encoded files should be able to\n"
-. "automatically install the Loader when needed.$nl");
- echo_instructions( "No changes to your php.ini file\n"
-. "are required to use encoded files on this system.${nl}");
- } else {
- echo_status("The Loader was not installed.$nl");
- }
- } else {
- echo_status( "Run-time loading should be possible on your system but no suitable Loader\n"
-. "was found.$nl$nl");
- echo_instructions( "The $_os Loader for PHP $_php_family releases is required.$nl"
-. "Loaders can be downloaded from " . weblink("http://www.ioncube.com/loaders.php","www.ioncube.com"));
- }
- }
- }
- }
-
- //$instructions should never be empty.
- //if it is, then put default:
- if (empty($instructions))
- {
- $instructions = "Run-time loading is not currently possible.$nl"
- . "If you require further assistance, please contact ionCube support providing${nl}a link to this script.";
- }
-
- if ($cli)
- {
- return "$working$status$instructions\n";
- }
- else
- {
-
- //echo "${nl}Please send the output of this script to $email if you have questions or require further assistance.$nl$nl";
-
- $body = "<center><h2>Run-Time Loading Installation Instructions</h2></center>"
- . "<h3>Testing Server</h3>"
- . "$working"
- . "<h3>Results</h3>"
- . "$status"
- . "<h3>Instructions</h3>"
- . $instructions;
-
- return $body;
-
- }
-}
-//END OF RTL-TESTER FUNCTIONS
-
-//BEGIN INSTALL ASSISTANT RELATED FUNCTIONS
-
-
-function query_self($text, $query)
-{
- global $HTTP_SERVER_VARS;
-
- if (use_html()) {
- return '<a target=_blank href="'.@$HTTP_SERVER_VARS['PHP_SELF']."?page=install-assistant&q=$query\">$text</a>";
- } else {
- return $text;
- }
-}
-
-
-
-function use_html()
-{
- return (php_sapi_name() != 'cli');
-}
-
-function para($text)
-{
- return ($text . (use_html() ? '<p>' : "\n\n"));
-}
-
-function code($text)
-{
- return (use_html() ? "<code>$text</code>" : $text);
-}
-
-function table($contents)
-{
- if (use_html()) {
- $res = '<table class="analysis" cellpadding=5 cellspacing=1 border=0>';
- foreach ($contents as $row) {
- $res .= "<tr>\n";
- foreach ($row as $cell) {
- $res .= "<td>$cell</td>\n";
- }
- $res .= "</tr>\n";
- }
- $res .= "</table>\n";
- } else {
- $colwidths = array();
- foreach ($contents as $row) {
- $cv = 0;
- foreach ($row as $cell) {
- $l = @$colwidths[$cv];
- $cl = strlen($cell);
-
- if ($cl > $l) {
- $colwidths[$cv] = $cl;
- }
- $cv++;
- }
- }
- $tw = 0;
- foreach ($colwidths as $cw) { $tw += ($cw + 2); }
- $tw2 = $tw + count($colwidths) - 1 + 2;
- $res = '+' . str_repeat('-',$tw2 - 2) . "+\n";
- foreach ($contents as $row) {
- $cv = 0;
- foreach ($row as $cell) {
- $res .= '| ' . str_pad($cell, $colwidths[$cv]) . ' ';
- $cv++;
- }
- $res .= "|\n";
- }
- $res .= '+' . str_repeat('-',$tw2 - 2) . "+\n";
- }
-
- return $res;
-}
-
-function ilia_header()
-{
- if (!use_html()) {
-
- return "\n"
-. "ionCube Loader Install Assistant\n"
-. "--------------------------------\n"
-. "\n"
-. "\n";
- }
- else
- {
-
- return "<center><h2>php.ini Installation Instructions</h2></center>"
- . "<h3>Analysis</h3>";;
-
- }
-
-}
-
-function heading($text)
-{
- if (use_html()) {
- return para("<font face=\"helvetica,verdana\"><b>$text</b></font>");
- } else {
- return para($text . "\n" . str_repeat('-', strlen($text)));
- }
-}
-
-function ilia_analysis()
-{
- global $php_version, $php_flavour, $os_name, $thread_safe, $php_ini_path, $required_loader,$os_code, $cli;
-
- $res = para('Analysis of your system configuration shows:')
- . table(array(array("PHP Version",$php_version),
- array("Operating System",$os_name),
- array("Threaded PHP",($thread_safe ? 'Yes' : 'No')),
- array("php.ini file", ($php_ini_path ? $php_ini_path : query_self("Check phpinfo() output for\n" .'location','phpinfo'))),
- array("Required Loader",$required_loader)
- ))
- . para('');
-
- if (!$cli)
- $res .= "<h3>Instructions</h3>";
-
- if ($php_ini_path)
- {
- $res .= para('To install the Loader in your '.code('php.ini')." file, edit or create the file\n\n"
- . code($php_ini_path) . "\n\n"
- . "and add the following line before any other ".code('zend_extension').' lines:');
- }
- else
- {
- $res .= para( 'To install the loader in your '.code('php.ini')." file, first check the location of the\n"
- . "php.ini file from phpinfo output. Then edit or create the file, and add the\n"
- . "following line before any other ".code('zend_extension').' lines:');
- }
-
- if ($os_code == 'win') {
- if (use_html()) {
- $path = '<drive>:\\<path>\\';
- } else {
- $path = '<drive>:\\<path>\\';
- }
-
- $ini = "zend_extension_ts = $path$required_loader";
- } else {
- if (use_html()) {
- $path = '/<path>/';
- } else {
- $path = '/<path>/';
- }
-
- if ($thread_safe) {
- $ini = "zend_extension_ts = $path$required_loader";
- } else {
- $ini = "zend_extension = $path$required_loader";
- }
- }
-
- if (use_html()) {
- $res .= "<table class=\"ini_line\" cellpadding=4 cellspacing=1 border=0><tr><td><code>$ini</code></td></tr></table><p>";
- } else {
- $res .= para(" $ini");
- }
-
- if ($os_code == 'win') {
- $res .= para('where '.code($path).' is where you\'ve installed the loader.');
- } else {
- $res .= para('where '.code($path).' is where you\'ve installed the loader, e.g. '.code('/usr/local/ioncube/'));
- }
-
-
- $res .= para("If there are no zend_extension lines already, you can put the
-line at any point in the file.");
-
- $res .= para("Finally, stop and restart your web server software for the changes to\n"
- . "take effect.");
-
- if (!check_safe_mode() && ($os_code != 'win')) {
- $res .= heading('Installing the Loader for run-time loading');
-
- $res .= para( "To install for runtime loading, create a directory called ".code('ioncube') . "\n"
- . "at or above the top level of your encoded files, and ensure that the directory\n"
- . "contains the ".code($required_loader) . " loader. If run-time install of\n"
- . "the Loader is possible on your system then encoded files should automatically\n"
- . "install the loader when needed.");
- }
-
- return $res;
-}
-
-function ilia_debug_builds_unsupported()
-{
- return para( "IMPORTANT NOTE: Your PHP installation may be incorrect\n"
-. "------------------------------------------------------\n"
-. "\n"
-. "Your PHP installation appears to be built with debugging\n"
-. "support enabled, and extensions cannot be installed in this case.")
- .para( "Debugging support in PHP produces slower execution, is not recommended for\n"
-. "production builds, and was probably a mistake.")
- .para( "Debugging support may sometimes be incorrectly detected, and so please\n"
-. "continue to follow the installation instructions and try the Loader.\n"
-. "However do contact the ionCube helpdesk if the Loader fails to\n"
-. "install, and include a web link to either this script or a page that\n"
-. "calls phpinfo() so that we can help.");
-}
-
-function install_assistant()
-{
- global $php_version, $php_flavour, $os_name, $thread_safe, $php_ini_path, $required_loader,$os_code, $php_info,$dll_sfix,$debug_build,$HTTP_GET_VARS;
-
- if ($q = @$HTTP_GET_VARS['q']) {
- if ($q == 'phpinfo') {
- phpinfo(INFO_GENERAL);
- }
- exit(0);
- }
-
- foreach (split("\n",$php_info) as $line) {
- if (eregi('command',$line)) {
- continue;
- }
-
- if (preg_match('/thread safety.*(enabled|yes)/Ui',$line)) {
- $thread_safe = true;
- }
-
- if (preg_match('/debug.*(enabled|yes)/Ui',$line)) {
- $debug_build = true;
- }
-
- if (eregi("configuration file.*(</B></td><TD ALIGN=\"left\">| => |v\">)([^ <]*)(.*</td.*)?",$line,$match)) {
- $php_ini_path = $match[2];
-
- //
- // If we can't access the php.ini file then we probably lost on the match
- //
- if (@!file_exists($php_ini_path)) {
- $php_ini_path = '';
- }
- }
- }
-
- //
- // We now know enough to give guidance
- //
- $ts = ((($os_code != 'win') && $thread_safe) ? '_ts' : '');
-
- $required_loader = "ioncube_loader_${os_code}_${php_flavour}${ts}${dll_sfix}";
-
- //
- // Create the output
- //
-
-
- $out = "";
- $out.=ilia_header();
- $out.=ilia_analysis();
- if ($debug_build) {
- $out.=ilia_debug_builds_unsupported();
- }
-
- return $out;
-}
-
-function getInstructions()
-{
- global $nl;
- global $cli;
-
- if ($cli)
- {
- return "\nAn ionCube Loader file is required by PHP to read files encoded with the\n"
- . "ionCube Encoder. This page will determine how you can install Loaders\n"
- . "on this particular server.$nl$nl";
-
- }
- else
- {
-
- return "Please read the ".weblink("http://www.ioncube.com/loader_installation.php", "online documentation", true).", or review the file readme.txt enclosed with the Loader bundle, for more help with Loader installation.$nl$nl";
- }
-}
-
-
-//main page
-
-function index()
-{
- global $HTTP_SERVER_VARS;
- global $nl;
- global $already_loaded;
-
- $self = @$HTTP_SERVER_VARS['PHP_SELF'];
- $host = @$HTTP_SERVER_VARS['HTTP_HOST'];
-
- ob_start();
- $success = include dirname(__FILE__).'/ioncube-encoded-file.php';
- $php_info = ob_get_contents();
- ob_end_clean();
-
- $body = "";
-
- $body.="An ionCube Loader file is required by PHP to read files encoded with the ionCube Encoder. This page will determine how you can install Loaders on this particular server.$nl$nl";
-
-
- $dir = dirname($self);
-
- $rtl = "<a href=\"$self?page=rtl-tester\">run-time loading installation instructions</a>";
- $sys = "<a href=\"$self?page=sysinfo\">Server System Information</a>";
- $ass = "<a href=\"$self?page=install-assistant\">php.ini installation instructions</a>";
-
-
- if ($success)
- {
- $body.= "An ionCube encoded file has been loaded <b><font color=green>successfully</font></b>.<br>"
- . "Encoded files should now function correctly.<br><br>";
-
-
- if (!$already_loaded)
- {
- $body.="If you have permission to edit the php.ini configuration file for this server you can increase performance by following the $ass.<br><br>";
- }
-
- $body.="If you have a problem with your PHP application, please contact the application provider.";
- }
- else
- {
- $body.= "The loading of ionCube encoded files is not currently working correctly on this server.<br><br>\n";
-
- $body.= "If you have permission to edit the php.ini configuration file for this server, please follow the "
- . "$ass.<br><br>";
-
- $body.= "If you do not access to the php.ini file, please follow the "
- . "$rtl.<br><br>";
-
- $body.=getInstructions();
- }
-
- return $body;
-}
-
-
-
-function read($fp) {
- $input = rtrim(fgets($fp, 1024));
- return $input;
-}
-
-function doMenu($fp)
-{
-
- echo("\n>> Please choose an option followed by Return, or 0 to exit this script.\n\n");
- echo("0. Exit this script\n");
- echo("1. php.ini installation instructions\n");
- echo("2. Run-time loading installation instructions\n");
- echo("\n");
- echo(">> ");
-
- do
- {
- $command = read($fp);
- }
- while(strlen($command)==0);
- return $command;
-}
-
-
-
-if ($cli)
-{
- $fp=fopen('php://stdin', 'r');
- echo(getInstructions());
-
- ob_start();
- $success = include dirname(__FILE__).'/ioncube-encoded-file.php';
- ob_end_clean();
-
- if ($success)
- {
- echo "An ionCube encoded file has been loaded successfully.\n"
- . "Encoded files should now function correctly.\n\n";
-
-
- if (!$already_loaded)
- {
- echo "If you have permission to edit the php.ini configuration file for this server you can increase performance by choosing option 1 below.\n\n";
- }
-
- echo "If you have a problem with your PHP application, please contact the application provider.";
- }
- else
- {
- echo "The loading of ionCube encoded files is not currently working correctly\n"
- . "on this server.\n\n";
-
- echo "If you have permission to edit the php.ini configuration file for this server,\n"
- . "please choose option 1 below.\n\n";
-
- echo "If you do not access to the php.ini file, please choose option 2 below.\n\n";
-
- $body.=getInstructions();
- }
-
-
- while(true)
- {
- $command = doMenu($fp);
- if ($command==0)
- exit(0);
- elseif ($command==2)
- echo(rtl_tester());
- elseif ($command==10)
- phpinfo();
- elseif ($command==1)
- echo(install_assistant());
- }
- fclose($fp);
-}
-else
-{
- global $HTTP_SERVER_VARS,$HTTP_GET_VARS;
- $us = @$HTTP_SERVER_VARS['PHP_SELF'];
- $page = @$HTTP_GET_VARS['page'];
-
- $css = getCSS();
- $out = "<html>\n"
- . "<head>\n"
- . "<style>$css</style>\n"
- . "<title>ionCube Loader Installation Tool</title>"
- . "</head>\n"
- . "<body>\n"
-
- ;
-
- $body = "";
- $body.="<div align=center><div class=\"main\">\n";
- $body.="<img src=\"$us?page=logo\"><br><br>\n";
-
-
-
- if ($page=="rtl-tester")
- $body.= rtl_tester();
- else if($page=="sysinfo")
- return phpinfo();
- else if($page=="install-assistant")
- {
- $body.= install_assistant();
- }
- else if($page=="logo")
- {
- displayLogo();
- exit(1);
- }
- else
- $body.= index();
-
- $body.="</div></div>\n";
- $out.=$body;
- $out.= "</body></html>\n";
- echo($out);
-}
-
-?>
|
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_4.1.so
^
|
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_4.2.so
^
|
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_4.3.so
^
|
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_4.3_ts.so
^
|
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_4.4.so
^
|
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_4.4_ts.so
^
|
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_5.0.so
^
|
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_5.0_ts.so
^
|
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_5.1.so
^
|
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_5.1_ts.so
^
|
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_5.2.so
^
|
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_5.2_ts.so
^
|
|
Changed |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_5.3.so
^
|
|
Added |
ioncube_loaders_lin_x86-64.tar.bz2/ioncube_loader_lin_5.3_ts.so
^
|
[-]
[+]
|
Added |
ioncube_loaders_lin_x86-64.tar.bz2/loader-wizard.php
^
|
@@ -0,0 +1,3307 @@
+<?php // -*- c++ -*-
+
+/**
+ * ionCube Loader install Wizard
+ *
+ * ionCube is a registered trademark of ionCube Ltd.
+ *
+ * Copyright (c) ionCube Ltd. 2002-2010
+ */
+
+
+
+
+define ('ERROR_UNKNOWN_OS',1);
+define ('ERROR_UNSUPPORTED_OS',2);
+define ('ERROR_UNKNOWN_ARCH',3);
+define ('ERROR_UNSUPPORTED_ARCH',4);
+define ('ERROR_UNSUPPORTED_ARCH_OS',5);
+define ('ERROR_WINDOWS_64_BIT',6);
+define ('ERROR_PHP_UNSUPPORTED',7);
+define ('ERROR_PHP_DEBUG_BUILD',8);
+define ('ERROR_RUNTIME_EXT_DIR_NOT_FOUND',101);
+define ('ERROR_RUNTIME_LOADER_FILE_NOT_FOUND',102);
+define ('ERROR_INI_NOT_FIRST_ZE',201);
+define ('ERROR_INI_WRONG_ZE_START',202);
+define ('ERROR_INI_ZE_LINE_NOT_FOUND',203);
+define ('ERROR_INI_LOADER_FILE_NOT_FOUND',204);
+define ('ERROR_INI_NOT_FULL_PATH',205);
+define ('ERROR_INI_NO_PATH',206);
+define ('ERROR_INI_NOT_FOUND',207);
+define ('ERROR_INI_NOT_READABLE',208);
+define ('ERROR_INI_MULTIPLE_IC_LOADER_LINES',209);
+define ('ERROR_LOADER_UNEXPECTED_NAME',301);
+define ('ERROR_LOADER_NOT_READABLE',302);
+define ('ERROR_LOADER_PHP_MISMATCH',303);
+define ('ERROR_LOADER_NONTS_PHP_TS',304);
+define ('ERROR_LOADER_TS_PHP_NONTS',305);
+define ('ERROR_LOADER_WRONG_OS',306);
+define ('ERROR_LOADER_WRONG_ARCH',307);
+define ('ERROR_LOADER_WIN_SERVER_NONWIN',321);
+define ('ERROR_LOADER_WIN_NONTS_PHP_TS',322);
+define ('ERROR_LOADER_WIN_TS_PHP_NONTS',323);
+define ('ERROR_LOADER_WIN_PHP_MISMATCH',324);
+define ('ERROR_LOADER_WIN_COMPILER_MISMATCH',325);
+define ('ERROR_LOADER_NOT_FOUND',380);
+define ('ERROR_LOADER_PHP_VERSION_UNKNOWN',390);
+
+
+define ('SERVER_UNKNOWN',0);
+define ('HAS_PHP_INI',1);
+define ('SERVER_SHARED',2);
+define ('SERVER_VPS',5);
+define ('SERVER_DEDICATED',7);
+define ('SERVER_LOCAL',9);
+
+define ('LOADERS_PAGE',
+ 'http://loaders.ioncube.com/');
+define ('SUPPORT_SITE',
+ 'http://support.ioncube.com/');
+define ('LOADER_FORUM_URL',
+ 'http://forum.ioncube.com/viewforum.php?f=4');
+define ('LOADERS_FAQ_URL',
+ 'http://www.ioncube.com/faqs/loaders.php');
+define ('UNIX_ERRORS_URL',
+ 'http://www.ioncube.com/loaders/unix_startup_errors.php');
+define ('LOADER_WIZARD_URL',
+ LOADERS_PAGE);
+define ('ENCODER_URL',
+ 'http://www.ioncube.com/sa_encoder.php');
+define ('LOADER_VERSION_URL',
+ 'http://www.ioncube.com/feeds/product_info/versions.php');
+define ('WIZARD_LATEST_VERSION_URL',
+ LOADER_VERSION_URL . '?item=loader-wizard');
+define ('PHP_COMPILERS_URL',
+ LOADER_VERSION_URL . '?item=php-compilers');
+define ('LOADER_PLATFORM_URL',
+ LOADER_VERSION_URL . '?item=loader-platforms');
+define ('LOADER_LATEST_VERSIONS_URL',
+ LOADER_VERSION_URL . '?item=loader-versions');
+define ('IONCUBE_DOWNLOADS_SERVER',
+ 'http://downloads2.ioncube.com/loader_downloads');
+define ('IONCUBE_CONNECT_TIMEOUT',4);
+
+define ('LOADER_NAME_CHECK',true);
+define ('LOADER_EXTENSION_NAME','ionCube Loader');
+define ('LOADER_SUBDIR','ioncube');
+define ('WINDOWS_IIS_LOADER_DIR', 'system32');
+define ('ADDITIONAL_INI_FILE_NAME','aa_ioncube.ini');
+define ('UNIX_SYSTEM_LOADER_DIR','/usr/local/ioncube');
+define ('RECENT_LOADER_VERSION','3.1.24');
+define ('LOADERS_PACKAGE_PREFIX','ioncube_loaders_');
+define ('SESSION_LIFETIME_MINUTES',360);
+define ('WIZARD_EXPIRY_MINUTES',10080);
+define ('MIN_INITIALISE_TIME',4);
+
+ run();
+
+
+function script_version()
+{
+ return "2.18";
+}
+
+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 '<p class="alert">An updated version of this Wizard script is available <a href="' . LOADER_WIZARD_URL . '">here</a>.</p>';
+ }
+ 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 is_supported_php_version()
+{
+ $v = php_version();
+
+ return ((($v['major'] == 4) && ($v['minor'] >= 1)) ||
+ (($v['major'] == 5) && (($v['minor'] >= 1) || ($v['release'] >= 5))));
+}
+
+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.1', 'us1-dir'=>'FreeBSD/v6/AMD64');
+
+
+ $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 7', 'os_mod'=>'_7', 'arch'=>'x86', 'dirname'=>'freebsd_i386-7.1', 'us1-dir'=>'FreeBSD/v7/x86');
+ $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 7', 'os_mod'=>'_7', 'arch'=>'x86-64', 'dirname'=>'freebsd_amd64-7.2', '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.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 required_loader($unamestr = '')
+{
+ $un = empty($unamestr)?php_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 = ((-1^0xffffffff) ? 64 : 32);
+
+ $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.]+)/',php_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':'</tr>';
+ $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.*(</B></td><TD ALIGN="left">| => |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.*(</B></td><TD ALIGN="left">| => |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.*(</B></td><TD ALIGN="left">| => |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 threaded_and_not_cgi()
+{
+ $sys = get_sysinfo();
+ return($sys['THREAD_SAFE'] && !$sys['IS_CGI']);
+}
+
+function is_restricted_server()
+{
+ $disable_functions = ini_get('disable_functions');
+ $open_basedir = ini_get('open_basedir');
+ return (ini_get('safe_mode') || !empty($disable_functions) || !empty($open_basedir) || selinux_is_enabled());
+}
+
+function server_restriction_warnings()
+{
+ $warnings = array();
+
+ if (find_server_type() == SERVER_SHARED) {
+ if (is_restricted_server()) {
+ $warnings[] = "Server restrictions are in place which might affect the operation of this Loader Wizard or prevent the installation of the Loader.";
+ }
+ } else {
+ $warning_suffix = "This may affect the operation of this Loader Wizard.";
+ if (ini_get('safe_mode')) {
+ $warnings[] = "Safe mode is in effect on the server. " . $warning_suffix;
+ }
+ $disabled_functions = ini_get('disable_functions');
+ if (!empty($disabled_functions)) {
+ $warnings[] = "Some functions are disabled through disable_functions. " . $warning_suffix;
+ }
+ $open_basedir = ini_get('open_basedir');
+ if (!empty($open_basedir)) {
+ $warnings[] = "Open basedir restrictions are in effect. " . $warning_suffix;
+ }
+ }
+ return $warnings;
+}
+
+function own_php_ini_possible()
+{
+ $sysinfo = get_sysinfo();
+ return ($sysinfo['CGI_CLI'] && !is_ms_windows() && !is_restricted_server());
+}
+
+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()
+{
+ return realpath(extension_dir());
+}
+
+function get_loader_name()
+{
+ $u = php_uname();
+ $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' : '.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] = "The configuration file could not be found.";
+ } else {
+ $errors[ERROR_INI_NOT_FOUND] = "The $php_ini file could not be found.";
+ }
+ } elseif (!is_readable($php_ini)) {
+ $errors[ERROR_INI_NOT_READABLE] = "The $php_ini file could not be read.";
+ }
+ 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] = "It appears that multiple $ext_start lines for the ionCube Loader have been included in the configuration file, $php_ini.";
+ }
+ $loader_path = $corr_matches[1];
+ } else {
+ if (empty($loader_path)) {
+ $errors[ERROR_INI_NOT_FIRST_ZE] = "The ionCube Loader must be the first Zend extension listed in the configuration file, $php_ini.";
+ }
+ }
+ }
+ 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 = "The line for the ionCube Loader in the configuration file, $php_ini, should start with $ext_start and <b>not</b> $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] = "The necessary zend_extension line could not be found in the configuration file, $php_ini.";
+ } elseif (!@file_exists($loader_path)) {
+ $errors[ERROR_INI_LOADER_FILE_NOT_FOUND] = "The loader file $loader_path, listed in the configuration file, $php_ini, does not exist or is not accessible.";
+ } elseif (basename($loader_path) == $loader_path) {
+ $errors[ERROR_INI_NOT_FULL_PATH] = "A full path must be specified for the loader file in the configuration file, $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();
+ $ini_file_list = array_merge(array($sysinfo['PHP_INI']),get_additional_ini_files());
+ $errors = array();
+ 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]);
+ }
+ $errors = array_merge($errors,$ldloc['errors']);
+ if (!empty($ldloc['location'])) {
+ break;
+ }
+ }
+ if (empty($ldloc['location'])) {
+ $ldloc['errors'][ERROR_INI_ZE_LINE_NOT_FOUND] = "The necessary zend_extension line could not be found in the configuration.";
+ }
+ 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] = 'The loader file could not be found in standard locations.';
+ }
+ }
+ 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 = "";
+ 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;
+ }
+ }
+ return array($lv,$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 (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 '<h4>Runtime Loading Instructions</h4>';
+ echo '<div class=panel>';
+ echo '<p>On your shared server the Loader can be installed using the runtime loading method.';
+ echo " (<a href=\"{$default}&manual=1\">Please click here if you are <strong>not</strong> on a shared server</a>.)</p>";
+
+ if ('.' == extension_dir()) {
+ $dirphrase = is_ms_windows()?'folder':'directory';
+ echo "Please note that on your system the Loader <em>must</em> be present in the same " . $dirphrase . " as the first encoded file accessed.";
+ }
+ echo '<ol>';
+ loader_download_instructions();
+ $loader_dir = loader_install_instructions(SERVER_SHARED,dirname(__FILE__));
+ shared_test_instructions();
+ echo '</ol>';
+ echo '</div>';
+}
+
+function runtime_loading_errors()
+{
+ $errors = array();
+ $ext_path = extension_dir_path();
+ if (false === $ext_path) {
+ $errors[ERROR_RUNTIME_EXT_DIR_NOT_FOUND] = "Extensions directory cannot be found.";
+ } else {
+ $expected_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . get_loader_name();
+ if (!@file_exists($expected_file)) {
+ $errors[ERROR_RUNTIME_LOADER_FILE_NOT_FOUND] = "The Loader file was expected to be at $expected_file but could not be found.";
+ } 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 loader_download_instructions()
+{
+ $sysinfo = get_sysinfo();
+ $loader = get_loaderinfo();
+ $multiple_os_versions = false;
+
+ if (is_ms_windows()) {
+ if (is_bool($sysinfo['THREAD_SAFE'])) {
+ if ($sysinfo['THREAD_SAFE']) {
+ echo '<li>Download one of the following archives of Windows x86 Loaders:';
+ } else {
+ echo '<li>Download one of the following archives of Windows non-TS x86 Loaders:';
+ }
+ $basename = windows_package_name();
+ echo make_archive_list($basename,array('zip','ipf.zip'));
+ echo "<p>Please note that the MS Windows installer version is suitable either for direct installation on a Windows machine or for
+uploading from a local PC to your server.<br>";
+ echo 'A Loaders archive can also be downloaded from <a href="' . LOADERS_PAGE . '" target="loaders">' . LOADERS_PAGE . '</a>.';
+ } else {
+ echo '<li>Download a Windows Loaders archive from <a href="' . LOADERS_PAGE . '" target=loaders>here</a>. If PHP is built with thread safety disabled, use the Windows non-TS Loaders.';
+ }
+ } else {
+ $multiple_os_versions = false;
+ if (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'];
+ }
+ if ($basename == "") {
+ echo '<li>Download a ' . $loader['osname'] . ' ' . $loader['arch'] . ' Loaders archive from <a href="' . LOADERS_PAGE . '" target="loaders">here</a>.';
+ echo "<br>Your system appears to be ${loader['osnamequal']} for ${loader['wordsize']} bit. If Loaders are not available for that exact release of ${loader['osname']}, Loaders built for an earlier release should work. Note that you may need to install back compatibility libraries for the operating system.";
+ echo '<br>If you cannot find a suitable loader then please raise a ticket at <a href="'. SUPPORT_SITE . '">our support helpdesk</a>.';
+ } else {
+ echo '<li>Download one of the following archives of Loaders for ' . $loader['osnamequal'] . ' ' . $loader['arch'] . ':';
+ 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 "<p>Please note that the MS Windows installer version is suitable for uploading from a Windows PC to your ${loader['osname']} server.<br>";
+ echo "</p>";
+ if ($multiple_os_versions && !$exact_match) {
+ echo "<p>Note that you may need to install back compatibility libraries for ${loader['osname']}.</p>";
+ }
+ }
+ }
+
+ echo '</li>';
+}
+
+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 loader_install_dir($server_type)
+{
+ if (SERVER_SHARED == $server_type && own_php_ini_possible()) {
+ $loader_dir = get_default_loader_dir_webspace();
+ } else {
+ if (is_ms_windows()) {
+ $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';
+ }
+ } else {
+ $loader_dir = UNIX_SYSTEM_LOADER_DIR;
+ }
+ }
+ return $loader_dir;
+}
+
+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 "<li>Put the Loader files in <code>$loader_dir</code></li>";
+ } else {
+ echo "<li>Transfer the Loaders to your web server and install in <code>$loader_dir</code></li>";
+ }
+ 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 shared_ini_location()
+{
+ $phprc = getenv('PHPRC');
+ $doc_root_path = realpath($_SERVER['DOCUMENT_ROOT']);
+ if (!empty($phprc)) {
+ $phprc_path = realpath($phprc);
+ if (0 === strpos($phprc_path,$doc_root_path)) {
+ return $phprc_path;
+ } else {
+ return $doc_root_path;
+ }
+ } else {
+ return $doc_root_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()) {
+ $html_dir = shared_ini_location();
+ $php_ini_path = $html_dir . DIRECTORY_SEPARATOR . $php_ini_name;
+ if (@file_exists($php_ini_path)) {
+ $edit_line = "<li>Edit the <code>$php_ini_name</code> in the <code>$html_dir</code> directory";
+ if (zend_extension_line_missing($php_ini_path) && is_writeable($php_ini_path) && is_writeable($html_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 "<li>Your php.ini file at $php_ini_path has been modified to include the necessary line for the ionCube Loader.";
+ } else {
+ echo $edit_line;
+ }
+ } else {
+ echo $edit_line;
+ }
+ } else {
+ $download_ini_file = "<li><a href=\"$base&page=phpconfig&ininame=$php_ini_name&stype=$server_type_code&download=1&prepend=1\">Save this <code>$php_ini_name</code> file</a> and upload it to <code>$html_dir</code> (full path on your server).";
+ if (is_writeable($html_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 "<li>A <code>$php_ini_name</code> file has been created for you in <code>$html_dir</code>.";
+ } 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 "<li>Edit the file <code>${sysinfo['PHP_INI']}</code>";
+ } else {
+ $php_ini_path = find_additional_ioncube_ini();
+ if (empty($php_ini_path)) {
+ $php_ini_name = ADDITIONAL_INI_FILE_NAME;
+ echo "<li><a href=\"$base&page=phpconfig&download=1&newlinesonly=1&ininame=$php_ini_name&stype=$server_type_code\">Save this $php_ini_name file</a> and put it in your ini files directory, <code>${sysinfo['PHP_INI_DIR']}</code>";
+ $editing_ini = false;
+ } else {
+ $php_ini_name = basename($php_ini_path);
+ echo "<li>Edit the file <code>$php_ini_path</code>";
+ }
+ }
+ } else {
+ echo "<li>Edit the system <code>$php_ini_name</code> file";
+ }
+ if ($editing_ini) {
+ echo " and <b>before</b> any other $kwd lines ensure that the following is included:<br>";
+ foreach ($zend_extension_lines as $zl) {
+ echo "<code>$zl</code><br>";
+ }
+ if (!empty($php_ini_path)) {
+ if (zend_extension_line_missing($php_ini_path)) {
+ echo "<a>Alternatively, replace your current <code>$php_ini_path</code> file with <a href=\"$base&page=phpconfig&ininame=$php_ini_name&stype=$server_type_code&download=1&prepend=1\">this new $php_ini_name file</a>.";
+ }
+ }
+ }
+ echo '</li>';
+}
+
+function server_restart_instructions()
+{
+ $sysinfo = get_sysinfo();
+ $base = get_base_address();
+
+ if ($sysinfo['SS']) {
+ echo "<li>Restart the ${sysinfo['SS']} server software.</li>";
+ } else {
+ echo "<li>Restart the server software.</li>";
+ }
+
+ echo "<li>When the server software has restarted, <a href=\"$base&page=loader_check\">click here to test the Loader</a>.</li>";
+
+ if ($sysinfo['SS'] == 'Apache' && !is_ms_windows()) {
+ echo '<li>If the Loader installation failed, check the Apache error log file for errors and see our guide to <a target="unix_errors" href="'. UNIX_ERRORS_URL . '">Unix related errors</a>.</li>';
+ }
+}
+
+function shared_test_instructions()
+{
+ $base = get_base_address();
+ echo "<li><a href=\"$base&page=loader_check\">Click here to test the Loader</a>.</li>";
+}
+
+function link_to_php_ini_instructions()
+{
+ $default = get_default_address();
+ echo "<p><a href=\"{$default}&stype=s&ini=1\">Please click here for instructions on using the php.ini method instead</a>.</p>";
+}
+
+function php_ini_instruction_list($server_type)
+{
+ echo '<h4>Installation Instructions</h4>';
+ echo '<div class=panel>';
+ echo '<ol>';
+
+ 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 '</ol>';
+ echo '</div>';
+}
+
+function php_ini_install_shared($give_preamble = true)
+{
+ $php_ini_name = ini_file_name();
+ $default = get_default_address();
+ if ($give_preamble) {
+ echo "<p>On your <strong>shared</strong> server, the Loader should be installed using a <code>$php_ini_name</code> configuration file.";
+ echo " (<a href=\"{$default}&manual=1\">Please click here if you are <strong>not</strong> on a shared server</a>.)</p>";
+ }
+
+ if (own_php_ini_possible()) {
+ echo '<p>With your hosting account, you may be able to use your own PHP configuration file.</p>';
+ } else {
+ echo "<p>It appears that you cannot install the ionCube Loader using the <code>$php_ini_name</code> file. Your server provider or system administrator should be able to perform the installation for you. Please refer them to the following instructions.</p>";
+ }
+
+ 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 '<p>';
+ if ($server_type_desc) {
+ echo "For a <strong>$server_type_desc</strong> server ";
+ } else {
+ echo "For this server ";
+ }
+
+ if ($required) {
+ echo "you should install the ionCube Loader using the <code>$php_ini_name</code> configuration file.";
+ } else {
+ echo "installing the ionCube Loader using the <code>$php_ini_name</code> file is recommended.";
+ }
+ if ($server_type_desc) {
+ echo " (<a href=\"{$default}&manual=1\">Please click here if you are <strong>not</strong> on a $server_type_desc server</a>.)";
+ }
+ echo '</p>';
+
+ php_ini_instruction_list($server_type);
+}
+
+function help_resources($error_list = array())
+{
+ $base = get_base_address();
+ $server_type_code = server_type_code();
+ $resources = array(
+ '<a target="_blank" href="' . LOADERS_FAQ_URL . '">ionCube Loaders FAQ</a>',
+ '<a target="_blank" href="' . LOADER_FORUM_URL . '">ionCube Loader Forum</a>',
+ '<a target="_blank" href="' . SUPPORT_SITE . 'index.php?department=3&subject=ionCube+Loader+installation+problem&message='. support_ticket_information($error_list) . '">Raise a support ticket through our helpdesk</a>');
+ if (SERVER_LOCAL == find_server_type()) {
+ $resources[2] .= "<br><span id=\"download-archive\">Once the support ticket has been created, please";
+ $resources[2] .= " <a href=\"$base&page=system_info_archive&stype=$server_type_code\">click here to get an archive of system information</a>.<br>";
+ $resources[2] .= "Please attach that archive of system information to the ticket that you have created.</span>";
+ }
+ 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 "<p>A downloadable archive of system information could not be created.<br>
+ <strong>Please save each of the following and then attach those files to the support ticket:</strong></p>";
+ echo "<ul>";
+ echo "<li><a href=\"$base&page=phpinfo\" target=\"phpinfo\">phpinfo()</a></li>";
+ echo "<li><a href=\"$base&page=phpconfig\" target=\"phpconfig\">config</a></li>";
+ echo "<li><a href=\"$base&page=extra&stype=$server_type_code\" target=\"extra\">additional information</a></li>";
+ echo "<li><a href=\"$self?page=loaderbin\">loader file</a></li>";
+ echo "</ul>";
+ 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";
+ } 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();
+ $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 rawurlencode($support_ticket_str);
+}
+
+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] = "You have the wrong loader for your operating system, ". $loader_info['osname'] . ".";
+ } 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 = "You have the wrong loader for your machine architecture.";
+ $err_str .= " Your system is " . $loader_info['arch'];
+ $err_str .= " but the loader you are using is for " . $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] = "The installed loader (<code>$installed_loader_name</code>) does not have the name expected (<code>$expected_loader_name</code>) for your system. Please check that you have the correct loader for your system.";
+ }
+ }
+ if (empty($errors) && !is_readable($loader_location)) {
+ $execute_error = "The loader at $loader_location does not appear to be readable.";
+ $execute_error .= "<br>Please check that it exists and is readable.";
+ $execute_error .= "<br>Please also check the permissions of the containing ";
+ $execute_error .= (is_ms_windows()?'folder':'directory') . '.';
+ if (($sysinfo['SS'] == 'IIS') || !($sysinfo['IS_CGI'] || $sysinfo['IS_CLI'])) {
+ $execute_error .= "<br>Please also check that the web server has been restarted.";
+ }
+ $execute_error .= ".";
+ $errors[ERROR_LOADER_NOT_READABLE] = $execute_error;
+ }
+ $loader_strs = get_loader_strings($loader_location);
+ $phpv = php_version();
+ if (preg_match("/php version:\s*(.)\.(.)\.(..?)(-ts)?/i",$loader_strs,$version_matches)) {
+ if ($version_matches[1] != $phpv['major'] || $version_matches[2] != $phpv['minor']) {
+ $loader_php = $version_matches[1] . "." . $version_matches[2];
+ $server_php = $phpv['major'] . "." . $phpv['minor'];
+ $errors[ERROR_LOADER_PHP_MISMATCH] = "The installed loader is for PHP $loader_php but your server is running PHP $server_php.";
+ }
+ if (is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE'] && !is_ms_windows() && !(isset($version_matches[4]) && $version_matches[4] == '-ts')) {
+ $errors[ERROR_LOADER_NONTS_PHP_TS] = "Your server is running a thread-safe version of PHP but the loader is not a thread-safe version.";
+ } elseif (isset($version_matches[4]) && $version_matches[4] == '-ts' && !(is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE'])) {
+ $errors[ERROR_LOADER_TS_PHP_NONTS] = "Your server is running a non-thread-safe version of PHP but the loader is a thread-safe version.";
+ }
+ } elseif (preg_match("/ioncube_loader_.\.._(.)\.(.)\.(..?)(_nonts)?\.dll/i",$loader_strs,$version_matches)) {
+ if (!is_ms_windows()) {
+ $errors[ERROR_LOADER_WIN_SERVER_NONWIN] = "You have a Windows loader but your server does not appear to be running Windows.";
+ } else {
+ if (isset($version_matches[4]) && $version_matches[4] == '_nonts' && is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE']) {
+ $errors[ERROR_LOADER_WIN_NONTS_PHP_TS] = "You have the non-thread-safe version of the Windows loader but you need the thread-safe one.";
+ } elseif (!(is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE']) && !(isset($version_matches[4]) && $version_matches[4] == '_nonts')) {
+ $errors[ERROR_LOADER_WIN_TS_PHP_NONTS] = "You have the thread-safe version of the Windows loader but you need the non-thread-safe one.";
+ }
+ if ($version_matches[1] != $phpv['major'] || $version_matches[2] != $phpv['minor']) {
+ $loader_php = $version_matches[1] . "." . $version_matches[2];
+ $server_php = $phpv['major'] . "." . $phpv['minor'];
+ $errors[ERROR_LOADER_WIN_PHP_MISMATCH] = "The installed loader is for PHP $loader_php but your server is running PHP $server_php.";
+ }
+ if (preg_match("/assemblyIdentity.*version=\"([^.]+)\./",$loader_strs,$compiler_matches)) {
+ $loader_compiler = "VC" . strtoupper($compiler_matches[1]);
+ } else {
+ $loader_compiler = 'VC6';
+ }
+ if ($loader_compiler != $sysinfo['PHP_COMPILER']) {
+ $errors[ERROR_LOADER_WIN_COMPILER_MISMATCH] = "Your loader was built using $loader_compiler but you need the loader built using ${sysinfo['PHP_COMPILER']}.";
+ }
+ }
+ } else {
+ $errors[ERROR_LOADER_PHP_VERSION_UNKNOWN] = "The PHP version for the loader cannot be determined - please check that you have a valid ionCube Loader.";
+ }
+ $errors = array_merge($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,$is_old) = ioncube_loader_version_information();
+ echo "<p>The ionCube Loader $lv has been successfully installed.</p>";
+ 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 "The function you have tried to access has been disabled as the Loader is successfully installed.";
+}
+
+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("This script should only be run by a web server.\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']);
+ }
+ 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 <<<EOT
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN "http://www.w3.org/TR/html4/loose.dtd">
+ <html>
+ <head>
+ <title>ionCube Loader Wizard</title>
+ <link rel="stylesheet" type="text/css" href="$self?page=css">
+ <style type="text/css">
+ body {
+ height: 100%;
+ width: 100%;
+ }
+ </style>
+ <script type="text/javascript">
+ var timingOut = 0;
+ var xmlHttpTimeout;
+ var ajax;
+ var statusPar;
+ var stage_timeout = $stage_timeout;
+ var step_lag = $step_lag;
+
+ function checkNextStep(ajax,expected,continuation) {
+ if (ajax.readyState==4 && ajax.status==200)
+ {
+ clearTimeout(xmlHttpTimeout);
+ if (ajax.responseText == expected) {
+ setTimeout('',step_lag);
+ continuation();
+ } else {
+ statusPar.innerHTML = 'Unable to check for update<br>script continuing';
+ setTimeout("window.location.href = '$start_page&timeout=1'",1000);
+ }
+ }
+ }
+
+ function getXmlHttp() {
+ if (window.XMLHttpRequest) {
+ xmlhttp=new XMLHttpRequest();
+ } else {
+ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
+ }
+ return xmlhttp;
+ }
+ var startMainLoaderWizard = function() {
+ window.location.href = '$start_page';
+ }
+ var loaderVersionCheck = function() {
+ statusPar.innerHTML = 'Stage 4/4: Getting latest loader versions';
+ var xmlHttp = getXmlHttp();
+ xmlHttp.onreadystatechange=function() {
+ checkNextStep(xmlHttp,"1",startMainLoaderWizard);
+ }
+ xmlHttp.open("GET","$self?page=loaderversion",true);
+ xmlHttp.send("");
+ ajax = xmlHttp;
+ xmlHttpTimeout=setTimeout('ajaxTimeout()',stage_timeout);
+ }
+ var platformCheck = function() {
+ statusPar.innerHTML = 'Stage 3/4: Getting platform information';
+ var xmlHttp = getXmlHttp();
+ xmlHttp.onreadystatechange=function() {
+ checkNextStep(xmlHttp,"1",loaderVersionCheck);
+ }
+ xmlHttp.open("GET","$self?page=platforminfo",true);
+ xmlHttp.send("");
+ ajax = xmlHttp;
+ xmlHttpTimeout=setTimeout('ajaxTimeout()',stage_timeout);
+ }
+ var compilerVersionCheck = function() {
+ statusPar.innerHTML = 'Stage 2/4: Getting compiler versions';
+ var xmlHttp = getXmlHttp();
+ xmlHttp.onreadystatechange=function() {
+ checkNextStep(xmlHttp,"1",platformCheck);
+ }
+ xmlHttp.open("GET","$self?page=compilerversion",true);
+ xmlHttp.send("");
+ ajax = xmlHttp;
+ xmlHttpTimeout=setTimeout('ajaxTimeout()',stage_timeout);
+ }
+ var startChecks = function() {
+ statusPar = document.getElementById('status');
+ statusPar.innerHTML = 'Stage 1/4: Getting Loader Wizard version';
+ var xmlHttp = getXmlHttp();
+ xmlHttp.onreadystatechange=function() {
+ checkNextStep(xmlHttp,"1",compilerVersionCheck);
+ }
+ xmlHttp.open("GET","$self?page=wizardversion",true);
+ xmlHttp.send("");
+ ajax = xmlHttp;
+ xmlHttpTimeout=setTimeout('ajaxTimeout()',stage_timeout);
+ }
+ function ajaxTimeout(){
+ ajax.abort();
+ statusPar.innerHTML = 'Cannot reach server<br>script continuing';
+ setTimeout("window.location.href = '$start_page&timeout=1'",1000);
+ }
+ </script>
+ </head>
+ <body>
+
+ <div id="loading"><script type="text/javascript">document.write('<p>Initialising<br>ionCube Loader Wizard<br><span id="status"></span></p>');</script><p id="noscript">Your browser does not support JavaScript so the ionCube Loader Wizard initialisation cannot be made now. This script can get the latest loader version information from the ionCube server when you go to the next page.<br>Please choose one of the following. <br>If the script appears to hang please restart the script and choose the "NO" option.<br><br><br><a href="$start_page">YES - my server DOES have internet access</a><br><br><a href="$start_page&timeout=1">NO - my server does NOT have internet access</a></p></div>
+ <script type="text/javascript">
+ document.getElementById('noscript').style.display = 'none';
+ window.onload = startChecks;
+ </script>
+ </body>
+ </html>
+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();
+
+ if (extension_loaded($loader_extension)) {
+ loader_already_installed($rtl);
+ } else {
+ loader_not_installed();
+ }
+
+ footer($wizard_update);
+}
+
+function uninstall_wizard_instructions()
+{
+ echo '<p><strong>For security reasons we advise that you remove this Wizard script from your server now that the ionCube Loader is installed.</strong></p>';
+}
+
+function contact_script_provider_instructions()
+{
+ echo '<p>Please contact the script provider if you do experience any problems running encoded files.</p>';
+}
+
+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 "<p>Please note that if encoded files in a different $dirphrase from the Wizard fail then you should attempt to copy the $ini file to each $dirphrase in which you have encoded files.</p>";
+ }
+}
+
+function successful_install_end_instructions($rtl_path = null)
+{
+ if (empty($rtl_path)) {
+ may_need_to_copy_ini();
+ } elseif (is_string($rtl_path)) {
+ echo "<p>The runtime loading method of installation was used with path <code>$rtl_path</code></p>";
+ }
+ contact_script_provider_instructions();
+ uninstall_wizard_instructions();
+}
+
+function loader_already_installed($rtl = null)
+{
+ list($lv,$old_version) = ioncube_loader_version_information();
+ echo "<p>";
+ if ($old_version) {
+ echo 'The ionCube Loader ' . $lv . ' is already installed but it is an old version.';
+ echo ' It is recommended that the Loader be updated to the latest version';
+ if (is_string($old_version)) {
+ echo ", $old_version,";
+ }
+ echo ' from the <a href="' . LOADERS_PAGE . '">ionCube Loaders page</a>';
+ if (!is_string($old_version)) {
+ echo ' if one is available for your platform';
+ }
+ echo '.';
+ } else {
+ echo 'The ionCube Loader version ' . $lv . ' is already installed and encoded files should run without problems.';
+ }
+ echo "</p>";
+
+ successful_install_end_instructions($rtl);
+}
+
+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)) {
+ if (count($errors) > 1) {
+ $problem_str = "Please note that the following problems currently exist";
+ } else {
+ $problem_str = "Please note that the following problem currently exists";
+ }
+ echo '<div class="alert">' .$problem_str . ' with the ionCube Loader installation:';
+ echo make_list($errors,"ul");
+ echo '</div>';
+ }
+ if (!empty($warnings)) {
+ $addword = empty($errors)?'':'also';
+ $plural = (count($warnings)>1)?'s':'';
+ echo '<div class="warning">';
+ echo "Please note $addword the following issue$plural:";
+ echo make_list($warnings,"ul");
+ echo '</div>';
+ }
+ }
+ if (!isset($stype)) {
+ echo '<p>To use files that have been protected by the <a href="' . ENCODER_URL . '" target=encoder>ionCube PHP Encoder</a>, a component called the ionCube Loader must be installed.</p>';
+ }
+
+ if (!is_supported_php_version()) {
+ echo '<p>Your server is running PHP version ' . PHP_VERSION . ' and is
+ unsupported by ionCube Loaders. Recommended PHP 4 versions are PHP 4.2 or higher,
+ and PHP 5.1 or higher for PHP 5.</p>';
+ } elseif ($sysinfo['DEBUG_BUILD']) {
+ echo '<p>Your server is currently running a debug build of PHP. The Loader cannot be installed with a debug build of PHP. Please ensure that PHP is reconfigured with debug disabled. Note that debug builds of PHP cannot help in debugging PHP scripts.</p>';
+ } elseif (!is_array($loader)) {
+ if ($loader == ERROR_WINDOWS_64_BIT) {
+ echo '<p>Loaders for 64-bit PHP on Windows are not currently available. However, if you <b>install and run 32-bit PHP</b> the corresponding 32-bit loader for Windows should work.</p>';
+ if ($sysinfo['THREAD_SAFE']) {
+ echo '<li>Download one of the following archives of 32-bit Windows x86 loaders:';
+ } else {
+ echo '<li>Download one of the following archives of 32-bit Windows non-TS x86 loaders:';
+ }
+ echo make_archive_list(windows_package_name());
+ } else {
+ echo '<p>There may not be an ionCube Loader available for your type of system at the moment. However, if you create a <a href="' . SUPPORT_SITE . '">support ticket</a> more advice and information may be available to assist. Please include the URL for this Wizard in your ticket.</p>';
+ }
+ } elseif (!$sysinfo['SUPPORTED_COMPILER']) {
+ $supported_compilers = supported_win_compilers();
+ $supported_compiler_string = join('/',$supported_compilers);
+ echo '<p>At the current time the ionCube Loader requires PHP to be built with ' . $supported_compiler_string . '. Your PHP software has been built using ' . $sysinfo['PHP_COMPILER'] . '. Supported builds of PHP are available from <a href="http://windows.php.net/download/">PHP.net</a>.';
+ } 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;
+ $form = <<<EOT
+ <p>This Wizard will give you information on how to install the ionCube Loader.</p>
+ <p>Please select the type of web server that you have and then click Next.</p>
+ <form method=GET action=$self>
+ <input type="hidden" name="page" value="default">
+ <input type="hidden" name="timeout" value="$timeout">
+ <input type=radio id=shared name=stype value=s><label for=shared>Shared <small>(for example, server with FTP access only and no access to php.ini)</small></label><br>
+ <input type=radio id=dedi name=stype value=d><label for=dedi>Dedicated or VPS <small>(server with full root ssh access)</small></label><br>
+ <input type=radio id=local name=stype value=l><label for=local>Local install</label>
+ <p><input type=submit value=Next></p>
+ </form>
+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,$is_old) = ioncube_loader_version_information();
+ echo '<p>The ionCube Loader version ' . $lv . ' is installed and encoded files should run successfully.</p>';
+ if ($is_old) {
+ echo '<p>Please note though that you have an old version of the ionCube Loader.';
+ if (is_string($is_old)) {
+ echo " The latest version is $is_old.";
+ }
+ echo '</p>';
+ }
+ successful_install_end_instructions($rtl_path);
+ } else {
+ echo '<p>The ionCube Loader is <b>not</b> currently installed successfully.</p>';
+ if (!is_null($rtl_path)) {
+ echo '<p>Runtime loading was attempted but has failed.</p>';
+ $rt_errors = runtime_loading_errors();
+ if (!empty($rt_errors)) {
+ list_loader_errors($rt_errors);
+ }
+ link_to_php_ini_instructions();
+ } else {
+ list_loader_errors();
+ }
+ }
+
+ footer(true);
+}
+
+function ini_loader_errors()
+{
+ $errors = array();
+ $loader_loc = find_loader();
+ if (is_string($loader_loc)) {
+ if (!shared_and_runtime_loading()) {
+ $sys = get_sysinfo();
+ if (empty($sys['PHP_INI'])) {
+ $errors[ERROR_INI_NO_PATH] = 'No file path found for the PHP configuration file (php.ini).';
+ } elseif (!@file_exists($sys['PHP_INI'])) {
+ $errors[ERROR_INI_NOT_FOUND] = 'The PHP configuration file (' . $sys['PHP_INI'] .') cannot be found.';
+ }
+ }
+ $errors = array_merge($errors,loader_compatibility_test($loader_loc));
+ } else {
+ $errors = $loader_loc;
+ }
+ 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 file does not exist.");
+ }
+ 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)
+ {
+ $sys = get_sysinfo();
+ $ini_name = ini_file_name();
+ $rootpath = realpath($_SERVER['DOCUMENT_ROOT']);
+ $here = unix_path_dir();
+ $ini_files = unrecognised_inis_webspace($here);
+ foreach ($ini_files as $full_ini_loc) {
+ $advice = "The file $full_ini_loc is not being recognised by PHP.";
+ $advice .= " Please check that the name and location of the file are correct.";
+ if (!ini_same_dir_as_wizard()) {
+ $shared_ini_loc = shared_ini_location();
+ $ini_dir = dirname($sys['PHP_INI']);
+ $ini_loc_dir = dirname($full_ini_loc);
+ $shared_ini_file = $shared_ini_loc . DIRECTORY_SEPARATOR . $ini_name;
+ if (!@file_exists($shared_ini_file) && $ini_loc_dir != $shared_ini_loc && $ini_dir != $shared_ini_loc) {
+ $advice .= " Please try copying the <code>$full_ini_loc</code> file to <code>" . $shared_ini_loc . "</code>.";
+ } else {
+ $root_ini_file = $rootpath . DIRECTORY_SEPARATOR . $ini_name;
+ if (!@file_exists($root_ini_file) && $rootpath != $shared_ini_loc && $full_ini_loc != $rootpath) {
+ $advice .= " Please try copying the <code>$full_ini_loc</code> file to <code>" . $rootpath . "</code>.";
+ }
+ $herepath = realpath($here);
+ $here_ini_file = $herepath . DIRECTORY_SEPARATOR . $ini_name;
+ if (!@file_exists($here_ini_file) && $herepath != $rootpath) {
+ $advice .= " It may be necessary to copy the <code>$full_ini_loc</code> file to <code>$herepath</code> and to all " . (is_ms_windows()?'folders':'directories') . ' in which you have encoded files';
+ }
+ }
+ }
+ $warnings[] = $advice;
+ }
+ } else {
+ $loader_dir_pair = correct_loader_wrong_location();
+ if (!empty($loader_dir_pair)) {
+ $advice = "The correct loader for your system has been found at <code>${loader_dir_pair['loader']}</code>.";
+ $advice .= " You may wish to copy the loader from <code>${loader_dir_pair['loader']}</code> to <code>${loader_dir_pair['newloc']}</code>.";
+ $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 = '<a href="#" onClick="window.location.href=window.location.href">try again</a>';
+ echo '<div class="alert">';
+ if (count($errors) > 1) {
+ echo 'The following problems have been found with the ionCube Loader installation:';
+ $retry_message = "Please correct those errors and $try_again.";
+ } else {
+ echo 'The following problem has been found with the ionCube Loader installation:';
+ $retry_message = "Please correct that error and $try_again.";
+ }
+ echo make_list($errors,"ul");
+ echo '</div>';
+ if (!empty($warnings)) {
+ echo '<div class="warning">';
+ echo 'Please also note the following:';
+ echo make_list($warnings,"ul");
+ echo '</div>';
+ }
+ } elseif (!empty($warnings)) {
+ echo '<div class="warning">';
+ echo 'There are the following potential problems:';
+ echo make_list($warnings,"ul");
+ echo '</div>';
+ } elseif ($suggest_restart) {
+ if (SERVER_SHARED == find_server_type()) {
+ echo "<p>Please contact your server administrator about installing the ionCube Loader.</p>";
+ } else {
+ if (selinux_is_enabled()) {
+ echo "<p>It appears that SELinux is enabled on your server. Please follow the instructions at <a target=\"_blank\" href=\"http://www.cuteshift.com/57/install-ioncube-loader-while-selinux-enabled/\">http://www.cuteshift.com/57/install-ioncube-loader-while-selinux-enabled/</a> for installing the ionCube Loader when SELinux is enabled.</p>";
+ } else {
+ $sysinfo = get_sysinfo();
+ $ss = $sysinfo['SS'];
+ if (!$sysinfo['CGI_CLI'] || is_ms_windows()) {
+ echo "<p>Please check that the $ss web server software has been restarted.</p>";
+ }
+ }
+ }
+ }
+ echo '<div>';
+ echo $retry_message;
+ echo " You may wish to view the following for further help:";
+ echo make_list(help_resources($errors),"ul");
+ echo '<a href="' . $default . '">Click here to go back to the start of the Loader Wizard</a>.</div>';
+}
+
+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 "<h4>Additional Information</h4>";
+ echo "<table>";
+ $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'] = "<a href=\"$self?page=loaderbin\">Download loader file</a>";
+ } 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":"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');
+ foreach ($lines as $h => $i) {
+ $v = (empty($i))?'<em>EMPTY</em>':$i;
+ echo '<tr><th>'. $h . ':</th>' . '<td>' . $v . '</td></tr>';
+ }
+ echo "</table>";
+ 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'] = '';
+ }
+ return $_SESSION['godaddy_root'];
+}
+
+function GoDaddy_windows_instructions()
+{
+ $instr = "It appears that you are hosted on a Windows server at GoDaddy.<br/>";
+ $instr .= "Please change to a Linux hosting plan at GoDaddy.<br />";
+ $instr .= "If you <a href=\"http://help.godaddy.com/\">contact their support team</a> 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="<code>zend_extension = $html_dir/ioncube/$loader_name</code>";
+ $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 <b>ioncube</b>.';
+ if (@file_exists($ini_path)) {
+ $instr[] = "Edit the $php_ini_name in your $html_dir and add the following line to the <b>top</b> of the file:<br>" . $zend_extension_line ;
+ } else {
+ $instr[] = "<a href=\"$base&page=phpconfig&ininame=$php_ini_name&stype=s&download=1&prepend=1\">Save this $php_ini_name file</a> and upload it to your html directory, $html_dir";
+ }
+ $instr[] = 'Download the <a target="_blank" href="http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.zip">Linux ionCube Loaders</a>.';
+ $instr[] = 'Unzip the loaders and upload them into the ioncube directory you created previously.';
+ $instr[] = 'The encoded files should now be working.';
+
+ echo '<div class=panel>';
+ echo (make_list($instr));
+ echo '</div>';
+}
+
+function GoDaddy_page()
+{
+ $base = get_base_address();
+
+ heading();
+
+ $inst_str = '<h4>GoDaddy Installation Instructions</h4>';
+ $inst_str .= '<p>It appears that you are hosted with GoDaddy (<a target="_blank" href="http://www.godaddy.com/">www.godaddy.com</a>). ';
+ $inst_str .= "If that is <b>not</b> the case then please <a href=\"$base&page=default&host=ngd\">click here to go to the main page of this installation wizard</a>.</p>";
+ $inst_str .= "<p>If you have already installed the loader then please <a href=\"$base&page=loader_check\">click here to test the loader</a>.</p>";
+
+ echo $inst_str;
+
+ if (is_ms_windows()) {
+ GoDaddy_windows_instructions();
+ } else {
+ GoDaddy_linux_instructions($_SESSION['godaddy_root']);
+ }
+
+ 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 $request_array[$param_name];
+ } else {
+ return null;
+ }
+}
+
+function make_list($list_items,$list_type='ol')
+{
+ $html = '';
+ if (!empty($list_items)) {
+ $html .= "<$list_type>";
+ $html .= '<li>';
+ $html .= join('</li><li>',$list_items);
+ $html .= '</li>';
+ $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[] = "<a href=\"$download_server/$basename$ext_sep$a\">$link_text</a>";
+ }
+
+ return make_list($archive_list,"ul");
+}
+
+function error($m)
+{
+ die("<b>ERROR:</b> <span class=\"error\">$m</span><p>Please help us improve this script by <a href=\"". SUPPORT_SITE . "\">reporting this error</a> and including the URL to the script so that we can test it.");
+}
+
+function get_self()
+{
+ if (empty($_SERVER['PHP_SELF'])) {
+ 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 <<<EOT
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>ionCube Loader Wizard</title>
+ <link rel="stylesheet" type="text/css" href="$self?page=css">
+</head>
+<body>
+<div id=header>
+ <img src="?page=logo" alt="ionCube logo">
+</div>
+<div id=main>
+ <h2>ionCube Loader Wizard</h2>
+EOT;
+}
+
+function footer($update_info = null)
+{
+ $self = get_self();
+ $base = get_base_address();
+ $default = get_default_address(false);
+ $year = date("Y");
+
+ echo "</div>";
+ echo "<div id=\"footer\">" .
+ "Copyright ionCube Ltd. 2002-$year | " .
+ "Loader Wizard version " . script_version() . " ";
+
+ if ($update_info === true) {
+ $update_info = check_for_wizard_update(false);
+ }
+ $loader_wizard_loc = LOADER_WIZARD_URL;
+ $wizard_version_string =<<<EOT
+ <script type="text/javascript">
+ var xmlhttp;
+ function version_check()
+ {
+ var body = document.getElementsByTagName('body')[0];
+ var ldel = document.getElementById('loading');
+ if (!ldel) {
+ body.innerHTML += '<div id="loading"></div>';
+ ldel = document.getElementById('loading');
+ }
+ ldel.innerHTML = '<p>Retrieving Wizard version information<br>Please wait</p>';
+ ldel.style.display = 'block';
+ ldel.style.height = '300px';
+ ldel.style.left = '200px';
+ ldel.style.border = '4px #660000 solid';
+ if (window.XMLHttpRequest) {
+ xmlhttp=new XMLHttpRequest();
+ } else {
+ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
+ }
+ xmlhttp.onreadystatechange=function()
+ {
+ var loadedOkay = 0;
+ if (xmlhttp.readyState==4 && xmlhttp.status==200)
+ {
+ var wizardversion = xmlhttp.responseText;
+ var msg;
+ clearTimeout(xmlHttpTimeout);
+ buttons = '';
+ if (wizardversion == '1') {
+ msg = 'You have the current version of the<br>ionCube Loader Wizard';
+ } else if (wizardversion != '0') {
+ msg = 'A new version, ' + wizardversion + ', of the loader wizard is available';
+ buttons = '<button onclick="document.getElementById(\'loading\').style.display=\'none\'; window.open(\'$loader_wizard_loc\'); return false">Get new version</button> ';
+ } else {
+ msg = 'Wizard version information cannot be obtained from the<br>ionCube server';
+ }
+ buttons += '<button onclick="document.getElementById(\'loading\').style.display=\'none\'; return false">Close this box</button>';
+ ldel.innerHTML = '<p>' + msg + '<br>' + buttons + '</p>';
+ }
+ }
+ xmlhttp.open("GET",'$self?page=wizardversion&wizard_only=1&clear_info=1',true);
+ xmlhttp.send();
+ var xmlHttpTimeout=setTimeout(ajaxTimeout,7000);
+ }
+ function ajaxTimeout(){
+ xmlhttp.abort();
+ msg = 'Wizard version information cannot be obtained from the<br>ionCube server';
+ button = '<button onclick="document.getElementById(\'loading\').style.display=\'none\'; return false">Close this box</button>';
+ var ldel = document.getElementById('loading');
+ ldel.innerHTML = '<p>' + msg + '<br>' + button + '</p>';
+ }
+ </script>
+EOT;
+
+ $wizard_version_string .= '(';
+ if ($update_info === null) {
+ $wizard_version_string .= '<a target="_blank" href="' . $loader_wizard_loc . '" onclick="version_check();return false;">check for new version</a>';
+ } else if ($update_info !== false) {
+ $wizard_version_string .= '<a href="' . LOADERS_PAGE .'" target="_blank">download version ' . $update_info . '</a>';
+ } else {
+ $wizard_version_string .= "current";
+ }
+ $wizard_version_string .= ')';
+ echo $wizard_version_string;
+
+ $server_type_code = server_type_code();
+
+ if (!info_should_be_disabled()) {
+ echo " | <a href=\"$base&page=phpinfo\" target=\"phpinfo\">phpinfo</a>";
+ echo " | <a href=\"$base&page=phpconfig\" target=\"phpconfig\">config</a>";
+ echo " | <a href=\"$base&page=extra&stype=$server_type_code\" target=\"extra\">additional</a>";
+ echo " | <a href=\"$base&page=system_info_archive&stype=$server_type_code\">info archive</a>";
+ }
+ echo " | <a href=\"$default\">wizard start</a>";
+ echo " | <a href=\"$base&page=loader_check\">loader test</a>";
+ echo ' | <a href="' . LOADERS_PAGE . '" target="loaders">loaders</a>';
+
+ echo "</div>\n";
+ echo "\n</body></html>\n";
+}
+
+function css_page()
+{
+ header('Content-Type: text/css');
+ echo <<<EOT
+ BODY {
+ font-family: verdana, helvetica, arial, sans-serif;
+ font-size: 10pt;
+ line-height: 150%;
+ margin: 0px;
+ min-height: 400px;
+ position: relative;
+ }
+
+ CODE {
+ color: #c00080;
+ }
+
+ LI {
+ margin-top: 10px;
+ }
+ #loading {
+ display: block;
+ position: absolute;
+ top: 33%;
+ left: 25%;
+ margin: auto;
+ height: 320px;
+ width: 460px;
+ padding: 4px;
+ color: #660000;
+ background-color: white;
+ z-index: 100;
+ }
+
+ #loading p {
+ position: absolute;
+ margin-top: 10px;
+ text-align: center;
+ vertical-align: middle;
+ padding-left: 40px;
+ padding-right: 30px;
+ font-size: 200%;
+ line-height: 200%;
+ }
+
+ #loading p span#status{
+ font-size: 60%;
+ line-height: 120%;
+ }
+ #loading p#noscript {
+ font-size: 120%;
+ line-height: 120%;
+ position: absolute;
+ text-align: left;
+ padding-top: 10px;
+ bottom: 0;
+ }
+ #loading p#noscript a {
+ text-align: center;
+ }
+
+ #loading button {
+ margin-top: 20px;
+ line-height: 100%;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ }
+
+
+ h4 {
+ margin-bottom: 0;
+ padding-bottom: 4px;
+ }
+
+ p,#main div {
+ max-width: 1000px;
+ width: 75%;
+ }
+
+ th {
+ text-align: left;
+ }
+
+ .alert {
+ margin: 2ex 0;
+ border: 1px solid #660000;
+ padding: 1ex 1em;
+ background-color: #ffeeee;
+ color: #660000;
+ width: 75%;
+ }
+
+
+ .warning {
+ margin: 2ex 0;
+ border: 1px solid #FFBF00;
+ padding: 1ex 1em;
+ background-color: #FDF5E6;
+ color: #000000;
+ width: 75%;
+ }
+
+ .error {
+ color: #FF0000;
+ }
+
+ .panel {
+ border: 1px solid #c0c0c0;
+ background-color: #f0f0f0;
+ width: 75%;
+ padding: 1ex 1em;
+ }
+
+ #header {
+ background: #3f0f0f;
+ }
+
+ #footer {
+ border-top: 1px solid #404040;
+ margin-top: 20px;
+ padding-top: 10px;
+ padding-left: 20px;
+ font-size: 75%;
+ text-align: left;
+ }
+
+ #main {
+ margin: 20px;
+ }
+EOT;
+}
+
+function logo_page()
+{
+$img_encoded = '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';
+
+header('Content-Type: image/png');
+header('Cache-Control: public');
+echo base64_decode($img_encoded);
+}
|
[-]
[+]
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/LICENSE.txt
^
|
@@ -235,4 +235,4 @@
interpreted in accordance with the laws of England and subject to the
exclusive jurisdiction of the English courts.
-Copyright (c) 2002-2009 ionCube Ltd. Last revised 11-Jul-2009
+Copyright (c) 2002-2010 ionCube Ltd. Last revised 11-Jul-2009
|
[-]
[+]
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/README.txt
^
|
@@ -1,114 +1,64 @@
- The ionCube Loader - Version 3.3
- --------------------------------
+ The ionCube Loader
+ ------------------
-This package contains the latest available Loaders for the PHP versions and
-operating systems that you selected.
+This package contains:
-In the package you should also have:
+* the latest available Loaders for the platform(s) selected
-* Loaders, including beta support for PHP 5.3 (not available on all platforms)
+* a Loader Wizard script to assist with Loader installation (loader-wizard.php)
-* The Loader installation helper script (ioncube-loader-helper.php)
+* the License document for use of the Loader and encoded files (LICENSE)
-* A file encoded with the ionCube PHP Encoder. This is needed by the helper
- script (ioncube-encoded-file.php).
-* The License for use of the Loader and encoded files (LICENSE)
-
-
-PHP 5.3 Support
----------------
-
-This package also includes a Loader for the latest generation of the PHP
-language, PHP 5.3. Our Loader for PHP 5.3 allows files encoded for previous
-versions of PHP to be run on PHP 5.3, including in most cases, files encoded
-for the PHP 4 language. The support for PHP 5.3 is well tested both with our
-own test suite and also major web applications, however it is a beta release,
-and we welcome reports of any unexpected behaviour, which if accompanied by a
-a test case to reproduce, we will investigate.
-
-
-Installation
+INSTALLATION
------------
-* INSTALLING FOR RUN-TIME LOADING
-
-The run-time loading feature is the easiest way to run encoded files, and
-lets encoded files locate and install the correct Loader when needed.
-
-Provided that run-time loading is supported on the target system, encoded
-scripts and Loaders can be bundled together without the user having to install
-any Loader or update their system configuration, and without having to
-know about the PHP version or operating system used.
-
-For run-time loading to work, a directory called 'ioncube' containing the
-Loaders (e.g. this directory) should be placed in or above the top
-directory of encoded files. For example, if you have encoded files in
-or below '/var/www/htdocs/', you might place the 'ioncube' directory
-in '/var/www/htdocs' or '/var/www'. If you have an application or library
-to distribute, you could place the ioncube directory within the top directory
-of your project or library.
+** Installing to a remote SHARED server
+1. Upload the contents of this package to a directory/folder called ioncube
+ within your main web scripts area.
-Runtime install with PHP 5.2.5 and above
-----------------------------------------
+2. Launch the Loader Wizard script in your browser. For example:
+ http://yourdomain/ioncube/loader-wizard.php
-The PHP 5.2.5 release of PHP addressed a potential security weakness with the
-dl() function, used by the runtime install method. This improvement requires
-that module libraries such as the Loader must be located in the module
-extensions directory if installed with dl(). If the Loader is installed in
-the extensions directory, and files are encoded by Encoder 6.5.16 and later,
-the online Encoder, or on older Encoder releases with a modified
-PHP preamble (http://www.ioncube.com/newpreamble.zip and tar.gz), then
-runtime install will usually be possible if dl() is available. If the
-runtime method is unavailable, installing in a php.ini file may be used.
+If the wizard is not found, carefully check the location where you uploaded
+the Loaders and the wizard script to on your server.
-It's not working - why?
------------------------
+** Installing to a remote UNIX/LINUX DEDICATED or VPS server
-If encoded files fail to run with run-time loading, you can test this by
-using the helper PHP script 'ioncube-loader-helper.php' that's included in
-this package.
+1. Upload the contents of this package to /usr/local/ioncube
-1. Copy the 'ioncube-loader-helper.php' and 'ioncube-encoded-file.php' PHP scripts
- to a directory where you expect encoded files to be working.
+2. Copy the loader-wizard.php script to the root web directory of a
+ configured domain on the server
-2. Access the 'ioncube-loader-helper.php' script from a web server or with a
- PHP cli or cgi executable.
+2. Launch the Loader Wizard script in your browser. For example:
+ http://yourdomain/loader-wizard.php
-3. Choose the 'Run-time loading installation instructions' option.
-4. The script will try to locate and install the required Loader, and will
- produce output as it runs.
+** Installing to a remote WINDOWS DEDICATED or VPS server
-5. Once complete the script will either report that run-time loading is working,
- will provide instructions for how to correct any issue with the server
- configuration, or will report that Loaders must be installed in the php.ini
- file.
+1. Upload the contents of this package to C:\windows\system32
+2. Copy the loader-wizard.php script to the root web folder of a
+ configured domain on the server
-* INSTALLING IN PHP.INI
+2. Launch the Loader Wizard script in your browser. For example:
+ http://yourdomain/loader-wizard.php
-Installing in the php.ini file is also simple, and offers the best
-performance for encoded scripts. It is also required for systems that use
-safe mode, or if PHP has been built with thread support, e.g. on Windows.
-The 'php.ini installation instructions' option on the installation helper PHP
-script is provided to assist with this. Access the script from a web server
-or a PHP cli or cgi executable and it should tell you which Loader to install,
-which file to edit and what you need to add (it's just a one line change).
+XCACHE and XDEBUG
+-----------------
+If you wish to enable *both* XCache and Xdebug whilst running the Loader, please
+use XCache as an ordinary extension rather than a Zend engine extension. That
+is, install XCache using the following line in the ini file and with xcache.so
+in the extensions directory:
-* NON-THREADED WINDOWS
+extension = xcache.so
-Until recent PHP releases, PHP has always been built with thread-safety
-enabled. Our standard Windows Loaders are built for threaded releases, and
-would be installed in the php.ini file using zend_extension_ts.
-As of PHP 5.2, PHP installations on Windows are sometimes made with
-thread safety disabled, and in this case our Windows non-TS Loaders should
-be used, and zend_extension used in the php.ini file instead of
-zend_extension_ts.
+If you are only running XCache then it can be installed as a Zend engine
+extension when the Loader is also installed.
-Copyright (c) 2002-2009 ionCube Ltd. Last revised 09-Oct-2009
+Copyright (c) 2002-2011 ionCube Ltd. Last revised 21-Jan-2011
|
[-]
[+]
|
Deleted |
ioncube_loaders_lin_x86.tar.bz2/ioncube-encoded-file.php
^
|
@@ -1,11 +0,0 @@
-<?php //00337
-if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='/ioncube/ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if((@$__id[1])==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}@dl($__ln);}else{echo('The file '.__FILE__." is corrupted.\n");return 0;}if(function_exists('_il_exec')){return _il_exec();}echo('This encoded file cannot be run. Please run the file ioncube-loader-helper.php for more information.');return 0;
-
-?>
-4+oV5E3tizCOGmZayKycyFdfdNEYKcDQ2UctWQgi5wUMAYDSmMVeoLZpTJYlsb2ZS87vmUDNyJXy
-u6mBqXBOY8uBDM8S9FpfYpOU8H2UybP4eoySb3gsXR3LRDVhZQOE547VladmAtDtg672Z0axEinz
-4Q0KK4ySJmQf/y74+9n0mQxv89e/3ORP/KEy9C7qQ57ANCp167ft8uwqnxmMG2B0FghtwVsgbjWW
-TRM9HpX9RfSRUpbRfJyiWM77aOjzW9XB2eAJyxqd/T5a5+EXVl7auGnQ2ZiQhbeeajCwKRwWP0X9
-N8VmcedG2VriSa6TMSY++2C4zLx5FcRziK7DMb2vYBQA0IhN8SOiVv4t5JIzumywsmq9bHtAZLdU
-62oKLWPotyYaB7R/+nSDX4s7Vwifp0nXJe8NQ5zI36p4UMmoZnHHKC/+oFab7U7rI4uC707fwrhr
-b95eZu1QsG+TWFhNjn3Ao9UClGrvoye+fIL7xrq=
\ No newline at end of file
|
[-]
[+]
|
Deleted |
ioncube_loaders_lin_x86.tar.bz2/ioncube-loader-helper.php
^
|
@@ -1,921 +0,0 @@
-<?php
-
-//globals used by rtl tester
-$working = "";
-$status = "";
-$instructions = "";
-$already_loaded = extension_loaded('ionCube Loader');
-
-if (!isset($HTTP_SERVER_VARS))
- $HTTP_SERVER_VARS = &$_SERVER;
-
-if (!isset($HTTP_GET_VARS))
- $HTTP_GET_VARS = &$_GET;
-
-//install assistant globals
-
-ini_set('error_reporting', E_ALL & ~E_NOTICE);
-ini_set('display_errors', 'On');
-ini_set('log_errors','Off');
-
-//
-// Determine PHP flavour
-//
-
-$php_version = phpversion();
-$php_flavour = substr($php_version,0,3);
-
-
-//
-// Get the full name and short name for the OS
-//
-
-$os_name = substr(php_uname(),0,strpos(php_uname(),' '));
-$os_code = strtolower(substr($os_name,0,3));
-
-$dll_sfix = (($os_code == 'win') ? '.dll' : '.so');
-
-
-//
-// Analyse the PHP build
-//
-
-ob_start();
-phpinfo(INFO_GENERAL);
-$php_info = ob_get_contents();
-ob_end_clean();
-
-$thread_safe = false;
-$debug_build = false;
-$php_ini_path = '';
-
-
-//
-// Text or HTML output?
-//
-
-$cli = (php_sapi_name() == 'cli');
-$nl = ($cli ? "\n" : '<br>');
-
-
-function check_safe_mode()
-{
- $sm = ini_get('safe_mode');
- return ($sm=='1');
-}
-
-function getCSS()
-{
- $css = "
- body, td
- {
- font-size:70%;
- font-family:verdana, helvetica, arial;
- line-height:200%;
- }
-
- div.main
- {
- width:80%;
- text-align:left;
- top:20px;
- position:relative;
- border:2px solid #F0F0F0;
- padding:20px;
- }
-
- code
- {
- font-family:courier, helvetica, arial;
- }
- table.ini_line
- {
- border:2px solid #c8e8c8;
- background-color:white;
- }
-
- table.ini_line tr td
- {
- background-color:#c8e8c8;
- }
-
- table.analysis
- {
- border:2px solid #e0e0ff;
- background-color:white;
- }
-
- table.analysis tr td
- {
- background-color: #e0e0ff;
- }
- ";
- return $css;
-}
-
-function displayLogo()
-{
-
- $img_encoded="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";
-
- header("Content-type: image/gif");
- header("Cache-control: public");
- echo base64_decode($img_encoded);
-
-}
-
-function weblink($url, $display, $new_window=false)
-{
- if (use_html()) {
- $extra = "";
- if ($new_window)
- $extra = 'target="_blank"';
-
- return "<a href=\"$url\" $extra>$display</a>";
- } else {
- return $url;
- }
-}
-
-//
-// Where are we?
-//
-$here = dirname(__FILE__);
-
-
-
-
-//rtl tester specific functions
-function echo_working($msg)
-{
- global $working;
- $working.=$msg;
-}
-
-function echo_status($msg)
-{
- global $status;
- $status.=$msg;
-}
-
-function echo_instructions($msg)
-{
- global $instructions;
- $instructions.=$msg;
-}
-
-
-
-//
-// Detect some system parameters
-//
-function ic_system_info()
-{
- $thread_safe = false;
- $debug_build = false;
- $cgi_cli = false;
- $php_ini_path = '';
-
- ob_start();
- phpinfo(INFO_GENERAL);
- $php_info = ob_get_contents();
- ob_end_clean();
-
- foreach (split("\n",$php_info) as $line) {
- if (eregi('command',$line)) {
- continue;
- }
-
- if (preg_match('/thread safety.*(enabled|yes)/Ui',$line)) {
- $thread_safe = true;
- }
-
- if (preg_match('/debug.*(enabled|yes)/Ui',$line)) {
- $debug_build = true;
- }
-
- if (eregi("configuration file.*(</B></td><TD ALIGN=\"left\">| => |v\">)([^ <]*)(.*</td.*)?",$line,$match)) {
- $php_ini_path = $match[2];
-
- //
- // If we can't access the php.ini file then we probably lost on the match
- //
- if (!@file_exists($php_ini_path)) {
- $php_ini_path = '';
- }
- }
-
- $cgi_cli = ((strpos(php_sapi_name(),'cgi') !== false) ||
- (strpos(php_sapi_name(),'cli') !== false));
- }
-
- return array('THREAD_SAFE' => $thread_safe,
- 'DEBUG_BUILD' => $debug_build,
- 'PHP_INI' => $php_ini_path,
- 'CGI_CLI' => $cgi_cli);
-}
-
-function rtl_tester()
-{
-
- global $cli;
- global $nl;
- global $working;
- global $instructions;
- global $status;
- global $already_loaded;
-
- $working = "";
- $status = "";
- $instructions = "";
-
- $ok = true;
- $already_installed = false;
-
-
- echo_working("\n");
-
- //
- // Is the loader already installed?
- //
- if ($already_loaded) {
- echo_status("An ionCube Loader is already installed and run-time loading is unnecessary.\n"
-. "Encoded files should load without problems.$nl");
-
- echo_instructions("If you have problems running encoded files, make sure that you select binary\n"
-. "mode if using FTP. If unpacking files with WinZIP you must also disable the\n"
-. "'TAR Smart CR/LF conversion' feature.$nl$nl");
- $already_installed = true;
- } else {
- //
- // Intro
- //
- echo_working("Testing whether your system supports run-time loading...$nl$nl");
- }
-
-
-
- //
- // Test some system info
- //
- $sys_info = ic_system_info();
-
- if (!$already_installed) {
- if ($sys_info['THREAD_SAFE'] && !$sys_info['CGI_CLI']) {
- echo_status("Your PHP install appears to have threading support and run-time Loading\n"
- ."is only possible on threaded web servers if using the CGI, FastCGI or\n"
- ."CLI interface.$nl");
- echo_instructions("To run encoded files please install the Loader in the php.ini file.");
- $ok = false;
- }
-
- if ($sys_info['DEBUG_BUILD']) {
- echo_status("Your PHP installation appears to be built with debugging support\n"
-. "enabled and this is incompatible with ionCube Loaders.$nl${nl}Debugging support in PHP produces slower execution, is\n"
-. "not recommended for production builds and was probably a mistake.$nl");
-
- echo_instructions("You should rebuild PHP without the --enable-debug option.$nl");
- $ok = false;
- }
-
- //
- // Check safe mode and for a valid extensions directory
- //
- if (check_safe_mode()) {
- echo_status("PHP safe mode is enabled and run time loading will not be possible.");
- echo_instructions( "To run encoded files please install the Loader in the php.ini file.\n"
- . "Alternatively contact your hosting provider or system administrator,\n"
- . "and ask them to disable safe mode for your account.");
- $ok = false;
- }
- /*
- elseif (!is_dir(realpath(ini_get('extension_dir')))) {
- echo "The setting of extension_dir in the php.ini file is not a directory
- or may not exist and run time loading will not be possible. You do not need
- write permissions on the extension_dir but for run-time loading to work
- a path from the extensions directory to wherever the Loader is installed
- must exist.$nl";
- $ok = false;
- }
- */
-
- // If ok to try and find a Loader
- if ($ok) {
- //
- // Look for a Loader
- //
-
- // Old style naming should be long gone now
- $test_old_name = false;
-
- $_u = php_uname();
- $_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' : '.so');
-
- $_ln_old="ioncube_loader.$_loader_sfix";
- $_ln_old_loc="/ioncube/$_ln_old";
-
- $_ln_new="ioncube_loader_${_os_key}_${_php_family}${_loader_sfix}";
- $_ln_new_loc="/ioncube/$_ln_new";
-
- echo_working("${nl}Looking for Loader '$_ln_new'");
- if ($test_old_name) {
- echo_working(" or '$_ln_old'");
- }
- echo_working($nl.$nl);
-
- $_extdir = ini_get('extension_dir');
- if ($_extdir == './') {
- $_extdir = '.';
- }
-
- $_oid = $_id = realpath($_extdir);
-
- $_here = dirname(__FILE__);
- if ((@$_id[1]) == ':') {
- $_id = str_replace('\\','/',substr($_id,2));
- $_here = str_replace('\\','/',substr($_here,2));
- }
- $_rd=str_repeat('/..',substr_count($_id,'/')).$_here.'/';
-
- if ($_oid !== false) {
- echo_working("Extensions Dir: $_extdir ($_id)$nl");
- echo_working("Relative Path: $_rd$nl");
- } else {
- echo_working("Extensions Dir: $_extdir (NOT FOUND)$nl$nl");
-
- echo_status("The directory set for the extension_dir entry in the\n"
-. "php.ini file may not exist, and run time loading will not be possible.$nl");
- echo_instructions( "Please ask your hosting provider or system administrator to create the\n"
- . "directory$nl$nl"
- . "$_extdir$nl$nl"
- . "ensuring that it is accessible by the web server software. They do not\n"
- . "need to restart the server. Then rerun this script. As an alternative,\n"
- . "your host could install the Loader in the php.ini file.$nl");
- $ok = false;
- }
-
- if ($ok) {
- $_ln = '';
- $_i=strlen($_rd);
- while($_i--) {
- if($_rd[$_i]=='/') {
- if ($test_old_name) {
- // Try the old style Loader name
- $_lp=substr($_rd,0,$_i).$_ln_old_loc;
- $_fqlp=$_oid.$_lp;
- if(@file_exists($_fqlp)) {
- echo_working("Found Loader: $_fqlp$nl");
- $_ln=$_lp;
- break;
- }
- }
- // Try the new style Loader name
- $_lp=substr($_rd,0,$_i).$_ln_new_loc;
- $_fqlp=$_oid.$_lp;
- if(@file_exists($_fqlp)) {
- echo_working("Found Loader: $_fqlp$nl");
- $_ln=$_lp;
- break;
- }
- }
- }
-
- //
- // If Loader not found, try the fallback of in the extensions directory
- //
- if (!$_ln) {
- if ($test_old_name) {
- if (@file_exists($_id.$_ln_old_loc)) {
- $_ln = $_ln_old_loc;
- }
- }
- if (@file_exists($_id.$_ln_new_loc)) {
- $_ln = $_ln_new_loc;
- }
-
- if ($_ln) {
- echo_working("Found Loader $_ln in extensions directory.$nl");
- }
- }
-
- echo_working($nl);
-
- if ($_ln) {
- echo_working("Trying to install Loader - this may produce an error...$nl$nl");
- dl($_ln);
-
- if(extension_loaded('ionCube Loader')) {
- echo_status( "The Loader was successfully installed and encoded files should be able to\n"
-. "automatically install the Loader when needed.$nl");
- echo_instructions( "No changes to your php.ini file\n"
-. "are required to use encoded files on this system.${nl}");
- } else {
- echo_status("The Loader was not installed.$nl");
- }
- } else {
- echo_status( "Run-time loading should be possible on your system but no suitable Loader\n"
-. "was found.$nl$nl");
- echo_instructions( "The $_os Loader for PHP $_php_family releases is required.$nl"
-. "Loaders can be downloaded from " . weblink("http://www.ioncube.com/loaders.php","www.ioncube.com"));
- }
- }
- }
- }
-
- //$instructions should never be empty.
- //if it is, then put default:
- if (empty($instructions))
- {
- $instructions = "Run-time loading is not currently possible.$nl"
- . "If you require further assistance, please contact ionCube support providing${nl}a link to this script.";
- }
-
- if ($cli)
- {
- return "$working$status$instructions\n";
- }
- else
- {
-
- //echo "${nl}Please send the output of this script to $email if you have questions or require further assistance.$nl$nl";
-
- $body = "<center><h2>Run-Time Loading Installation Instructions</h2></center>"
- . "<h3>Testing Server</h3>"
- . "$working"
- . "<h3>Results</h3>"
- . "$status"
- . "<h3>Instructions</h3>"
- . $instructions;
-
- return $body;
-
- }
-}
-//END OF RTL-TESTER FUNCTIONS
-
-//BEGIN INSTALL ASSISTANT RELATED FUNCTIONS
-
-
-function query_self($text, $query)
-{
- global $HTTP_SERVER_VARS;
-
- if (use_html()) {
- return '<a target=_blank href="'.@$HTTP_SERVER_VARS['PHP_SELF']."?page=install-assistant&q=$query\">$text</a>";
- } else {
- return $text;
- }
-}
-
-
-
-function use_html()
-{
- return (php_sapi_name() != 'cli');
-}
-
-function para($text)
-{
- return ($text . (use_html() ? '<p>' : "\n\n"));
-}
-
-function code($text)
-{
- return (use_html() ? "<code>$text</code>" : $text);
-}
-
-function table($contents)
-{
- if (use_html()) {
- $res = '<table class="analysis" cellpadding=5 cellspacing=1 border=0>';
- foreach ($contents as $row) {
- $res .= "<tr>\n";
- foreach ($row as $cell) {
- $res .= "<td>$cell</td>\n";
- }
- $res .= "</tr>\n";
- }
- $res .= "</table>\n";
- } else {
- $colwidths = array();
- foreach ($contents as $row) {
- $cv = 0;
- foreach ($row as $cell) {
- $l = @$colwidths[$cv];
- $cl = strlen($cell);
-
- if ($cl > $l) {
- $colwidths[$cv] = $cl;
- }
- $cv++;
- }
- }
- $tw = 0;
- foreach ($colwidths as $cw) { $tw += ($cw + 2); }
- $tw2 = $tw + count($colwidths) - 1 + 2;
- $res = '+' . str_repeat('-',$tw2 - 2) . "+\n";
- foreach ($contents as $row) {
- $cv = 0;
- foreach ($row as $cell) {
- $res .= '| ' . str_pad($cell, $colwidths[$cv]) . ' ';
- $cv++;
- }
- $res .= "|\n";
- }
- $res .= '+' . str_repeat('-',$tw2 - 2) . "+\n";
- }
-
- return $res;
-}
-
-function ilia_header()
-{
- if (!use_html()) {
-
- return "\n"
-. "ionCube Loader Install Assistant\n"
-. "--------------------------------\n"
-. "\n"
-. "\n";
- }
- else
- {
-
- return "<center><h2>php.ini Installation Instructions</h2></center>"
- . "<h3>Analysis</h3>";;
-
- }
-
-}
-
-function heading($text)
-{
- if (use_html()) {
- return para("<font face=\"helvetica,verdana\"><b>$text</b></font>");
- } else {
- return para($text . "\n" . str_repeat('-', strlen($text)));
- }
-}
-
-function ilia_analysis()
-{
- global $php_version, $php_flavour, $os_name, $thread_safe, $php_ini_path, $required_loader,$os_code, $cli;
-
- $res = para('Analysis of your system configuration shows:')
- . table(array(array("PHP Version",$php_version),
- array("Operating System",$os_name),
- array("Threaded PHP",($thread_safe ? 'Yes' : 'No')),
- array("php.ini file", ($php_ini_path ? $php_ini_path : query_self("Check phpinfo() output for\n" .'location','phpinfo'))),
- array("Required Loader",$required_loader)
- ))
- . para('');
-
- if (!$cli)
- $res .= "<h3>Instructions</h3>";
-
- if ($php_ini_path)
- {
- $res .= para('To install the Loader in your '.code('php.ini')." file, edit or create the file\n\n"
- . code($php_ini_path) . "\n\n"
- . "and add the following line before any other ".code('zend_extension').' lines:');
- }
- else
- {
- $res .= para( 'To install the loader in your '.code('php.ini')." file, first check the location of the\n"
- . "php.ini file from phpinfo output. Then edit or create the file, and add the\n"
- . "following line before any other ".code('zend_extension').' lines:');
- }
-
- if ($os_code == 'win') {
- if (use_html()) {
- $path = '<drive>:\\<path>\\';
- } else {
- $path = '<drive>:\\<path>\\';
- }
-
- $ini = "zend_extension_ts = $path$required_loader";
- } else {
- if (use_html()) {
- $path = '/<path>/';
- } else {
- $path = '/<path>/';
- }
-
- if ($thread_safe) {
- $ini = "zend_extension_ts = $path$required_loader";
- } else {
- $ini = "zend_extension = $path$required_loader";
- }
- }
-
- if (use_html()) {
- $res .= "<table class=\"ini_line\" cellpadding=4 cellspacing=1 border=0><tr><td><code>$ini</code></td></tr></table><p>";
- } else {
- $res .= para(" $ini");
- }
-
- if ($os_code == 'win') {
- $res .= para('where '.code($path).' is where you\'ve installed the loader.');
- } else {
- $res .= para('where '.code($path).' is where you\'ve installed the loader, e.g. '.code('/usr/local/ioncube/'));
- }
-
-
- $res .= para("If there are no zend_extension lines already, you can put the
-line at any point in the file.");
-
- $res .= para("Finally, stop and restart your web server software for the changes to\n"
- . "take effect.");
-
- if (!check_safe_mode() && ($os_code != 'win')) {
- $res .= heading('Installing the Loader for run-time loading');
-
- $res .= para( "To install for runtime loading, create a directory called ".code('ioncube') . "\n"
- . "at or above the top level of your encoded files, and ensure that the directory\n"
- . "contains the ".code($required_loader) . " loader. If run-time install of\n"
- . "the Loader is possible on your system then encoded files should automatically\n"
- . "install the loader when needed.");
- }
-
- return $res;
-}
-
-function ilia_debug_builds_unsupported()
-{
- return para( "IMPORTANT NOTE: Your PHP installation may be incorrect\n"
-. "------------------------------------------------------\n"
-. "\n"
-. "Your PHP installation appears to be built with debugging\n"
-. "support enabled, and extensions cannot be installed in this case.")
- .para( "Debugging support in PHP produces slower execution, is not recommended for\n"
-. "production builds, and was probably a mistake.")
- .para( "Debugging support may sometimes be incorrectly detected, and so please\n"
-. "continue to follow the installation instructions and try the Loader.\n"
-. "However do contact the ionCube helpdesk if the Loader fails to\n"
-. "install, and include a web link to either this script or a page that\n"
-. "calls phpinfo() so that we can help.");
-}
-
-function install_assistant()
-{
- global $php_version, $php_flavour, $os_name, $thread_safe, $php_ini_path, $required_loader,$os_code, $php_info,$dll_sfix,$debug_build,$HTTP_GET_VARS;
-
- if ($q = @$HTTP_GET_VARS['q']) {
- if ($q == 'phpinfo') {
- phpinfo(INFO_GENERAL);
- }
- exit(0);
- }
-
- foreach (split("\n",$php_info) as $line) {
- if (eregi('command',$line)) {
- continue;
- }
-
- if (preg_match('/thread safety.*(enabled|yes)/Ui',$line)) {
- $thread_safe = true;
- }
-
- if (preg_match('/debug.*(enabled|yes)/Ui',$line)) {
- $debug_build = true;
- }
-
- if (eregi("configuration file.*(</B></td><TD ALIGN=\"left\">| => |v\">)([^ <]*)(.*</td.*)?",$line,$match)) {
- $php_ini_path = $match[2];
-
- //
- // If we can't access the php.ini file then we probably lost on the match
- //
- if (@!file_exists($php_ini_path)) {
- $php_ini_path = '';
- }
- }
- }
-
- //
- // We now know enough to give guidance
- //
- $ts = ((($os_code != 'win') && $thread_safe) ? '_ts' : '');
-
- $required_loader = "ioncube_loader_${os_code}_${php_flavour}${ts}${dll_sfix}";
-
- //
- // Create the output
- //
-
-
- $out = "";
- $out.=ilia_header();
- $out.=ilia_analysis();
- if ($debug_build) {
- $out.=ilia_debug_builds_unsupported();
- }
-
- return $out;
-}
-
-function getInstructions()
-{
- global $nl;
- global $cli;
-
- if ($cli)
- {
- return "\nAn ionCube Loader file is required by PHP to read files encoded with the\n"
- . "ionCube Encoder. This page will determine how you can install Loaders\n"
- . "on this particular server.$nl$nl";
-
- }
- else
- {
-
- return "Please read the ".weblink("http://www.ioncube.com/loader_installation.php", "online documentation", true).", or review the file readme.txt enclosed with the Loader bundle, for more help with Loader installation.$nl$nl";
- }
-}
-
-
-//main page
-
-function index()
-{
- global $HTTP_SERVER_VARS;
- global $nl;
- global $already_loaded;
-
- $self = @$HTTP_SERVER_VARS['PHP_SELF'];
- $host = @$HTTP_SERVER_VARS['HTTP_HOST'];
-
- ob_start();
- $success = include dirname(__FILE__).'/ioncube-encoded-file.php';
- $php_info = ob_get_contents();
- ob_end_clean();
-
- $body = "";
-
- $body.="An ionCube Loader file is required by PHP to read files encoded with the ionCube Encoder. This page will determine how you can install Loaders on this particular server.$nl$nl";
-
-
- $dir = dirname($self);
-
- $rtl = "<a href=\"$self?page=rtl-tester\">run-time loading installation instructions</a>";
- $sys = "<a href=\"$self?page=sysinfo\">Server System Information</a>";
- $ass = "<a href=\"$self?page=install-assistant\">php.ini installation instructions</a>";
-
-
- if ($success)
- {
- $body.= "An ionCube encoded file has been loaded <b><font color=green>successfully</font></b>.<br>"
- . "Encoded files should now function correctly.<br><br>";
-
-
- if (!$already_loaded)
- {
- $body.="If you have permission to edit the php.ini configuration file for this server you can increase performance by following the $ass.<br><br>";
- }
-
- $body.="If you have a problem with your PHP application, please contact the application provider.";
- }
- else
- {
- $body.= "The loading of ionCube encoded files is not currently working correctly on this server.<br><br>\n";
-
- $body.= "If you have permission to edit the php.ini configuration file for this server, please follow the "
- . "$ass.<br><br>";
-
- $body.= "If you do not access to the php.ini file, please follow the "
- . "$rtl.<br><br>";
-
- $body.=getInstructions();
- }
-
- return $body;
-}
-
-
-
-function read($fp) {
- $input = rtrim(fgets($fp, 1024));
- return $input;
-}
-
-function doMenu($fp)
-{
-
- echo("\n>> Please choose an option followed by Return, or 0 to exit this script.\n\n");
- echo("0. Exit this script\n");
- echo("1. php.ini installation instructions\n");
- echo("2. Run-time loading installation instructions\n");
- echo("\n");
- echo(">> ");
-
- do
- {
- $command = read($fp);
- }
- while(strlen($command)==0);
- return $command;
-}
-
-
-
-if ($cli)
-{
- $fp=fopen('php://stdin', 'r');
- echo(getInstructions());
-
- ob_start();
- $success = include dirname(__FILE__).'/ioncube-encoded-file.php';
- ob_end_clean();
-
- if ($success)
- {
- echo "An ionCube encoded file has been loaded successfully.\n"
- . "Encoded files should now function correctly.\n\n";
-
-
- if (!$already_loaded)
- {
- echo "If you have permission to edit the php.ini configuration file for this server you can increase performance by choosing option 1 below.\n\n";
- }
-
- echo "If you have a problem with your PHP application, please contact the application provider.";
- }
- else
- {
- echo "The loading of ionCube encoded files is not currently working correctly\n"
- . "on this server.\n\n";
-
- echo "If you have permission to edit the php.ini configuration file for this server,\n"
- . "please choose option 1 below.\n\n";
-
- echo "If you do not access to the php.ini file, please choose option 2 below.\n\n";
-
- $body.=getInstructions();
- }
-
-
- while(true)
- {
- $command = doMenu($fp);
- if ($command==0)
- exit(0);
- elseif ($command==2)
- echo(rtl_tester());
- elseif ($command==10)
- phpinfo();
- elseif ($command==1)
- echo(install_assistant());
- }
- fclose($fp);
-}
-else
-{
- global $HTTP_SERVER_VARS,$HTTP_GET_VARS;
- $us = @$HTTP_SERVER_VARS['PHP_SELF'];
- $page = @$HTTP_GET_VARS['page'];
-
- $css = getCSS();
- $out = "<html>\n"
- . "<head>\n"
- . "<style>$css</style>\n"
- . "<title>ionCube Loader Installation Tool</title>"
- . "</head>\n"
- . "<body>\n"
-
- ;
-
- $body = "";
- $body.="<div align=center><div class=\"main\">\n";
- $body.="<img src=\"$us?page=logo\"><br><br>\n";
-
-
-
- if ($page=="rtl-tester")
- $body.= rtl_tester();
- else if($page=="sysinfo")
- return phpinfo();
- else if($page=="install-assistant")
- {
- $body.= install_assistant();
- }
- else if($page=="logo")
- {
- displayLogo();
- exit(1);
- }
- else
- $body.= index();
-
- $body.="</div></div>\n";
- $out.=$body;
- $out.= "</body></html>\n";
- echo($out);
-}
-
-?>
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_4.1.so
^
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_4.2.so
^
|
|
Deleted |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_4.2_ts.so
^
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_4.3.so
^
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_4.3_ts.so
^
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_4.4.so
^
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_4.4_ts.so
^
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_5.0.so
^
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_5.0_ts.so
^
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_5.1.so
^
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_5.1_ts.so
^
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_5.2.so
^
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_5.2_ts.so
^
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_5.3.so
^
|
|
Changed |
ioncube_loaders_lin_x86.tar.bz2/ioncube_loader_lin_5.3_ts.so
^
|
[-]
[+]
|
Added |
ioncube_loaders_lin_x86.tar.bz2/loader-wizard.php
^
|
@@ -0,0 +1,3307 @@
+<?php // -*- c++ -*-
+
+/**
+ * ionCube Loader install Wizard
+ *
+ * ionCube is a registered trademark of ionCube Ltd.
+ *
+ * Copyright (c) ionCube Ltd. 2002-2010
+ */
+
+
+
+
+define ('ERROR_UNKNOWN_OS',1);
+define ('ERROR_UNSUPPORTED_OS',2);
+define ('ERROR_UNKNOWN_ARCH',3);
+define ('ERROR_UNSUPPORTED_ARCH',4);
+define ('ERROR_UNSUPPORTED_ARCH_OS',5);
+define ('ERROR_WINDOWS_64_BIT',6);
+define ('ERROR_PHP_UNSUPPORTED',7);
+define ('ERROR_PHP_DEBUG_BUILD',8);
+define ('ERROR_RUNTIME_EXT_DIR_NOT_FOUND',101);
+define ('ERROR_RUNTIME_LOADER_FILE_NOT_FOUND',102);
+define ('ERROR_INI_NOT_FIRST_ZE',201);
+define ('ERROR_INI_WRONG_ZE_START',202);
+define ('ERROR_INI_ZE_LINE_NOT_FOUND',203);
+define ('ERROR_INI_LOADER_FILE_NOT_FOUND',204);
+define ('ERROR_INI_NOT_FULL_PATH',205);
+define ('ERROR_INI_NO_PATH',206);
+define ('ERROR_INI_NOT_FOUND',207);
+define ('ERROR_INI_NOT_READABLE',208);
+define ('ERROR_INI_MULTIPLE_IC_LOADER_LINES',209);
+define ('ERROR_LOADER_UNEXPECTED_NAME',301);
+define ('ERROR_LOADER_NOT_READABLE',302);
+define ('ERROR_LOADER_PHP_MISMATCH',303);
+define ('ERROR_LOADER_NONTS_PHP_TS',304);
+define ('ERROR_LOADER_TS_PHP_NONTS',305);
+define ('ERROR_LOADER_WRONG_OS',306);
+define ('ERROR_LOADER_WRONG_ARCH',307);
+define ('ERROR_LOADER_WIN_SERVER_NONWIN',321);
+define ('ERROR_LOADER_WIN_NONTS_PHP_TS',322);
+define ('ERROR_LOADER_WIN_TS_PHP_NONTS',323);
+define ('ERROR_LOADER_WIN_PHP_MISMATCH',324);
+define ('ERROR_LOADER_WIN_COMPILER_MISMATCH',325);
+define ('ERROR_LOADER_NOT_FOUND',380);
+define ('ERROR_LOADER_PHP_VERSION_UNKNOWN',390);
+
+
+define ('SERVER_UNKNOWN',0);
+define ('HAS_PHP_INI',1);
+define ('SERVER_SHARED',2);
+define ('SERVER_VPS',5);
+define ('SERVER_DEDICATED',7);
+define ('SERVER_LOCAL',9);
+
+define ('LOADERS_PAGE',
+ 'http://loaders.ioncube.com/');
+define ('SUPPORT_SITE',
+ 'http://support.ioncube.com/');
+define ('LOADER_FORUM_URL',
+ 'http://forum.ioncube.com/viewforum.php?f=4');
+define ('LOADERS_FAQ_URL',
+ 'http://www.ioncube.com/faqs/loaders.php');
+define ('UNIX_ERRORS_URL',
+ 'http://www.ioncube.com/loaders/unix_startup_errors.php');
+define ('LOADER_WIZARD_URL',
+ LOADERS_PAGE);
+define ('ENCODER_URL',
+ 'http://www.ioncube.com/sa_encoder.php');
+define ('LOADER_VERSION_URL',
+ 'http://www.ioncube.com/feeds/product_info/versions.php');
+define ('WIZARD_LATEST_VERSION_URL',
+ LOADER_VERSION_URL . '?item=loader-wizard');
+define ('PHP_COMPILERS_URL',
+ LOADER_VERSION_URL . '?item=php-compilers');
+define ('LOADER_PLATFORM_URL',
+ LOADER_VERSION_URL . '?item=loader-platforms');
+define ('LOADER_LATEST_VERSIONS_URL',
+ LOADER_VERSION_URL . '?item=loader-versions');
+define ('IONCUBE_DOWNLOADS_SERVER',
+ 'http://downloads2.ioncube.com/loader_downloads');
+define ('IONCUBE_CONNECT_TIMEOUT',4);
+
+define ('LOADER_NAME_CHECK',true);
+define ('LOADER_EXTENSION_NAME','ionCube Loader');
+define ('LOADER_SUBDIR','ioncube');
+define ('WINDOWS_IIS_LOADER_DIR', 'system32');
+define ('ADDITIONAL_INI_FILE_NAME','aa_ioncube.ini');
+define ('UNIX_SYSTEM_LOADER_DIR','/usr/local/ioncube');
+define ('RECENT_LOADER_VERSION','3.1.24');
+define ('LOADERS_PACKAGE_PREFIX','ioncube_loaders_');
+define ('SESSION_LIFETIME_MINUTES',360);
+define ('WIZARD_EXPIRY_MINUTES',10080);
+define ('MIN_INITIALISE_TIME',4);
+
+ run();
+
+
+function script_version()
+{
+ return "2.18";
+}
+
+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 '<p class="alert">An updated version of this Wizard script is available <a href="' . LOADER_WIZARD_URL . '">here</a>.</p>';
+ }
+ 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 is_supported_php_version()
+{
+ $v = php_version();
+
+ return ((($v['major'] == 4) && ($v['minor'] >= 1)) ||
+ (($v['major'] == 5) && (($v['minor'] >= 1) || ($v['release'] >= 5))));
+}
+
+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.1', 'us1-dir'=>'FreeBSD/v6/AMD64');
+
+
+ $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 7', 'os_mod'=>'_7', 'arch'=>'x86', 'dirname'=>'freebsd_i386-7.1', 'us1-dir'=>'FreeBSD/v7/x86');
+ $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 7', 'os_mod'=>'_7', 'arch'=>'x86-64', 'dirname'=>'freebsd_amd64-7.2', '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.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 required_loader($unamestr = '')
+{
+ $un = empty($unamestr)?php_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 = ((-1^0xffffffff) ? 64 : 32);
+
+ $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.]+)/',php_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':'</tr>';
+ $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.*(</B></td><TD ALIGN="left">| => |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.*(</B></td><TD ALIGN="left">| => |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.*(</B></td><TD ALIGN="left">| => |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 threaded_and_not_cgi()
+{
+ $sys = get_sysinfo();
+ return($sys['THREAD_SAFE'] && !$sys['IS_CGI']);
+}
+
+function is_restricted_server()
+{
+ $disable_functions = ini_get('disable_functions');
+ $open_basedir = ini_get('open_basedir');
+ return (ini_get('safe_mode') || !empty($disable_functions) || !empty($open_basedir) || selinux_is_enabled());
+}
+
+function server_restriction_warnings()
+{
+ $warnings = array();
+
+ if (find_server_type() == SERVER_SHARED) {
+ if (is_restricted_server()) {
+ $warnings[] = "Server restrictions are in place which might affect the operation of this Loader Wizard or prevent the installation of the Loader.";
+ }
+ } else {
+ $warning_suffix = "This may affect the operation of this Loader Wizard.";
+ if (ini_get('safe_mode')) {
+ $warnings[] = "Safe mode is in effect on the server. " . $warning_suffix;
+ }
+ $disabled_functions = ini_get('disable_functions');
+ if (!empty($disabled_functions)) {
+ $warnings[] = "Some functions are disabled through disable_functions. " . $warning_suffix;
+ }
+ $open_basedir = ini_get('open_basedir');
+ if (!empty($open_basedir)) {
+ $warnings[] = "Open basedir restrictions are in effect. " . $warning_suffix;
+ }
+ }
+ return $warnings;
+}
+
+function own_php_ini_possible()
+{
+ $sysinfo = get_sysinfo();
+ return ($sysinfo['CGI_CLI'] && !is_ms_windows() && !is_restricted_server());
+}
+
+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()
+{
+ return realpath(extension_dir());
+}
+
+function get_loader_name()
+{
+ $u = php_uname();
+ $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' : '.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] = "The configuration file could not be found.";
+ } else {
+ $errors[ERROR_INI_NOT_FOUND] = "The $php_ini file could not be found.";
+ }
+ } elseif (!is_readable($php_ini)) {
+ $errors[ERROR_INI_NOT_READABLE] = "The $php_ini file could not be read.";
+ }
+ 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] = "It appears that multiple $ext_start lines for the ionCube Loader have been included in the configuration file, $php_ini.";
+ }
+ $loader_path = $corr_matches[1];
+ } else {
+ if (empty($loader_path)) {
+ $errors[ERROR_INI_NOT_FIRST_ZE] = "The ionCube Loader must be the first Zend extension listed in the configuration file, $php_ini.";
+ }
+ }
+ }
+ 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 = "The line for the ionCube Loader in the configuration file, $php_ini, should start with $ext_start and <b>not</b> $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] = "The necessary zend_extension line could not be found in the configuration file, $php_ini.";
+ } elseif (!@file_exists($loader_path)) {
+ $errors[ERROR_INI_LOADER_FILE_NOT_FOUND] = "The loader file $loader_path, listed in the configuration file, $php_ini, does not exist or is not accessible.";
+ } elseif (basename($loader_path) == $loader_path) {
+ $errors[ERROR_INI_NOT_FULL_PATH] = "A full path must be specified for the loader file in the configuration file, $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();
+ $ini_file_list = array_merge(array($sysinfo['PHP_INI']),get_additional_ini_files());
+ $errors = array();
+ 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]);
+ }
+ $errors = array_merge($errors,$ldloc['errors']);
+ if (!empty($ldloc['location'])) {
+ break;
+ }
+ }
+ if (empty($ldloc['location'])) {
+ $ldloc['errors'][ERROR_INI_ZE_LINE_NOT_FOUND] = "The necessary zend_extension line could not be found in the configuration.";
+ }
+ 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] = 'The loader file could not be found in standard locations.';
+ }
+ }
+ 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 = "";
+ 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;
+ }
+ }
+ return array($lv,$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 (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 '<h4>Runtime Loading Instructions</h4>';
+ echo '<div class=panel>';
+ echo '<p>On your shared server the Loader can be installed using the runtime loading method.';
+ echo " (<a href=\"{$default}&manual=1\">Please click here if you are <strong>not</strong> on a shared server</a>.)</p>";
+
+ if ('.' == extension_dir()) {
+ $dirphrase = is_ms_windows()?'folder':'directory';
+ echo "Please note that on your system the Loader <em>must</em> be present in the same " . $dirphrase . " as the first encoded file accessed.";
+ }
+ echo '<ol>';
+ loader_download_instructions();
+ $loader_dir = loader_install_instructions(SERVER_SHARED,dirname(__FILE__));
+ shared_test_instructions();
+ echo '</ol>';
+ echo '</div>';
+}
+
+function runtime_loading_errors()
+{
+ $errors = array();
+ $ext_path = extension_dir_path();
+ if (false === $ext_path) {
+ $errors[ERROR_RUNTIME_EXT_DIR_NOT_FOUND] = "Extensions directory cannot be found.";
+ } else {
+ $expected_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . get_loader_name();
+ if (!@file_exists($expected_file)) {
+ $errors[ERROR_RUNTIME_LOADER_FILE_NOT_FOUND] = "The Loader file was expected to be at $expected_file but could not be found.";
+ } 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 loader_download_instructions()
+{
+ $sysinfo = get_sysinfo();
+ $loader = get_loaderinfo();
+ $multiple_os_versions = false;
+
+ if (is_ms_windows()) {
+ if (is_bool($sysinfo['THREAD_SAFE'])) {
+ if ($sysinfo['THREAD_SAFE']) {
+ echo '<li>Download one of the following archives of Windows x86 Loaders:';
+ } else {
+ echo '<li>Download one of the following archives of Windows non-TS x86 Loaders:';
+ }
+ $basename = windows_package_name();
+ echo make_archive_list($basename,array('zip','ipf.zip'));
+ echo "<p>Please note that the MS Windows installer version is suitable either for direct installation on a Windows machine or for
+uploading from a local PC to your server.<br>";
+ echo 'A Loaders archive can also be downloaded from <a href="' . LOADERS_PAGE . '" target="loaders">' . LOADERS_PAGE . '</a>.';
+ } else {
+ echo '<li>Download a Windows Loaders archive from <a href="' . LOADERS_PAGE . '" target=loaders>here</a>. If PHP is built with thread safety disabled, use the Windows non-TS Loaders.';
+ }
+ } else {
+ $multiple_os_versions = false;
+ if (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'];
+ }
+ if ($basename == "") {
+ echo '<li>Download a ' . $loader['osname'] . ' ' . $loader['arch'] . ' Loaders archive from <a href="' . LOADERS_PAGE . '" target="loaders">here</a>.';
+ echo "<br>Your system appears to be ${loader['osnamequal']} for ${loader['wordsize']} bit. If Loaders are not available for that exact release of ${loader['osname']}, Loaders built for an earlier release should work. Note that you may need to install back compatibility libraries for the operating system.";
+ echo '<br>If you cannot find a suitable loader then please raise a ticket at <a href="'. SUPPORT_SITE . '">our support helpdesk</a>.';
+ } else {
+ echo '<li>Download one of the following archives of Loaders for ' . $loader['osnamequal'] . ' ' . $loader['arch'] . ':';
+ 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 "<p>Please note that the MS Windows installer version is suitable for uploading from a Windows PC to your ${loader['osname']} server.<br>";
+ echo "</p>";
+ if ($multiple_os_versions && !$exact_match) {
+ echo "<p>Note that you may need to install back compatibility libraries for ${loader['osname']}.</p>";
+ }
+ }
+ }
+
+ echo '</li>';
+}
+
+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 loader_install_dir($server_type)
+{
+ if (SERVER_SHARED == $server_type && own_php_ini_possible()) {
+ $loader_dir = get_default_loader_dir_webspace();
+ } else {
+ if (is_ms_windows()) {
+ $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';
+ }
+ } else {
+ $loader_dir = UNIX_SYSTEM_LOADER_DIR;
+ }
+ }
+ return $loader_dir;
+}
+
+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 "<li>Put the Loader files in <code>$loader_dir</code></li>";
+ } else {
+ echo "<li>Transfer the Loaders to your web server and install in <code>$loader_dir</code></li>";
+ }
+ 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 shared_ini_location()
+{
+ $phprc = getenv('PHPRC');
+ $doc_root_path = realpath($_SERVER['DOCUMENT_ROOT']);
+ if (!empty($phprc)) {
+ $phprc_path = realpath($phprc);
+ if (0 === strpos($phprc_path,$doc_root_path)) {
+ return $phprc_path;
+ } else {
+ return $doc_root_path;
+ }
+ } else {
+ return $doc_root_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()) {
+ $html_dir = shared_ini_location();
+ $php_ini_path = $html_dir . DIRECTORY_SEPARATOR . $php_ini_name;
+ if (@file_exists($php_ini_path)) {
+ $edit_line = "<li>Edit the <code>$php_ini_name</code> in the <code>$html_dir</code> directory";
+ if (zend_extension_line_missing($php_ini_path) && is_writeable($php_ini_path) && is_writeable($html_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 "<li>Your php.ini file at $php_ini_path has been modified to include the necessary line for the ionCube Loader.";
+ } else {
+ echo $edit_line;
+ }
+ } else {
+ echo $edit_line;
+ }
+ } else {
+ $download_ini_file = "<li><a href=\"$base&page=phpconfig&ininame=$php_ini_name&stype=$server_type_code&download=1&prepend=1\">Save this <code>$php_ini_name</code> file</a> and upload it to <code>$html_dir</code> (full path on your server).";
+ if (is_writeable($html_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 "<li>A <code>$php_ini_name</code> file has been created for you in <code>$html_dir</code>.";
+ } 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 "<li>Edit the file <code>${sysinfo['PHP_INI']}</code>";
+ } else {
+ $php_ini_path = find_additional_ioncube_ini();
+ if (empty($php_ini_path)) {
+ $php_ini_name = ADDITIONAL_INI_FILE_NAME;
+ echo "<li><a href=\"$base&page=phpconfig&download=1&newlinesonly=1&ininame=$php_ini_name&stype=$server_type_code\">Save this $php_ini_name file</a> and put it in your ini files directory, <code>${sysinfo['PHP_INI_DIR']}</code>";
+ $editing_ini = false;
+ } else {
+ $php_ini_name = basename($php_ini_path);
+ echo "<li>Edit the file <code>$php_ini_path</code>";
+ }
+ }
+ } else {
+ echo "<li>Edit the system <code>$php_ini_name</code> file";
+ }
+ if ($editing_ini) {
+ echo " and <b>before</b> any other $kwd lines ensure that the following is included:<br>";
+ foreach ($zend_extension_lines as $zl) {
+ echo "<code>$zl</code><br>";
+ }
+ if (!empty($php_ini_path)) {
+ if (zend_extension_line_missing($php_ini_path)) {
+ echo "<a>Alternatively, replace your current <code>$php_ini_path</code> file with <a href=\"$base&page=phpconfig&ininame=$php_ini_name&stype=$server_type_code&download=1&prepend=1\">this new $php_ini_name file</a>.";
+ }
+ }
+ }
+ echo '</li>';
+}
+
+function server_restart_instructions()
+{
+ $sysinfo = get_sysinfo();
+ $base = get_base_address();
+
+ if ($sysinfo['SS']) {
+ echo "<li>Restart the ${sysinfo['SS']} server software.</li>";
+ } else {
+ echo "<li>Restart the server software.</li>";
+ }
+
+ echo "<li>When the server software has restarted, <a href=\"$base&page=loader_check\">click here to test the Loader</a>.</li>";
+
+ if ($sysinfo['SS'] == 'Apache' && !is_ms_windows()) {
+ echo '<li>If the Loader installation failed, check the Apache error log file for errors and see our guide to <a target="unix_errors" href="'. UNIX_ERRORS_URL . '">Unix related errors</a>.</li>';
+ }
+}
+
+function shared_test_instructions()
+{
+ $base = get_base_address();
+ echo "<li><a href=\"$base&page=loader_check\">Click here to test the Loader</a>.</li>";
+}
+
+function link_to_php_ini_instructions()
+{
+ $default = get_default_address();
+ echo "<p><a href=\"{$default}&stype=s&ini=1\">Please click here for instructions on using the php.ini method instead</a>.</p>";
+}
+
+function php_ini_instruction_list($server_type)
+{
+ echo '<h4>Installation Instructions</h4>';
+ echo '<div class=panel>';
+ echo '<ol>';
+
+ 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 '</ol>';
+ echo '</div>';
+}
+
+function php_ini_install_shared($give_preamble = true)
+{
+ $php_ini_name = ini_file_name();
+ $default = get_default_address();
+ if ($give_preamble) {
+ echo "<p>On your <strong>shared</strong> server, the Loader should be installed using a <code>$php_ini_name</code> configuration file.";
+ echo " (<a href=\"{$default}&manual=1\">Please click here if you are <strong>not</strong> on a shared server</a>.)</p>";
+ }
+
+ if (own_php_ini_possible()) {
+ echo '<p>With your hosting account, you may be able to use your own PHP configuration file.</p>';
+ } else {
+ echo "<p>It appears that you cannot install the ionCube Loader using the <code>$php_ini_name</code> file. Your server provider or system administrator should be able to perform the installation for you. Please refer them to the following instructions.</p>";
+ }
+
+ 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 '<p>';
+ if ($server_type_desc) {
+ echo "For a <strong>$server_type_desc</strong> server ";
+ } else {
+ echo "For this server ";
+ }
+
+ if ($required) {
+ echo "you should install the ionCube Loader using the <code>$php_ini_name</code> configuration file.";
+ } else {
+ echo "installing the ionCube Loader using the <code>$php_ini_name</code> file is recommended.";
+ }
+ if ($server_type_desc) {
+ echo " (<a href=\"{$default}&manual=1\">Please click here if you are <strong>not</strong> on a $server_type_desc server</a>.)";
+ }
+ echo '</p>';
+
+ php_ini_instruction_list($server_type);
+}
+
+function help_resources($error_list = array())
+{
+ $base = get_base_address();
+ $server_type_code = server_type_code();
+ $resources = array(
+ '<a target="_blank" href="' . LOADERS_FAQ_URL . '">ionCube Loaders FAQ</a>',
+ '<a target="_blank" href="' . LOADER_FORUM_URL . '">ionCube Loader Forum</a>',
+ '<a target="_blank" href="' . SUPPORT_SITE . 'index.php?department=3&subject=ionCube+Loader+installation+problem&message='. support_ticket_information($error_list) . '">Raise a support ticket through our helpdesk</a>');
+ if (SERVER_LOCAL == find_server_type()) {
+ $resources[2] .= "<br><span id=\"download-archive\">Once the support ticket has been created, please";
+ $resources[2] .= " <a href=\"$base&page=system_info_archive&stype=$server_type_code\">click here to get an archive of system information</a>.<br>";
+ $resources[2] .= "Please attach that archive of system information to the ticket that you have created.</span>";
+ }
+ 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 "<p>A downloadable archive of system information could not be created.<br>
+ <strong>Please save each of the following and then attach those files to the support ticket:</strong></p>";
+ echo "<ul>";
+ echo "<li><a href=\"$base&page=phpinfo\" target=\"phpinfo\">phpinfo()</a></li>";
+ echo "<li><a href=\"$base&page=phpconfig\" target=\"phpconfig\">config</a></li>";
+ echo "<li><a href=\"$base&page=extra&stype=$server_type_code\" target=\"extra\">additional information</a></li>";
+ echo "<li><a href=\"$self?page=loaderbin\">loader file</a></li>";
+ echo "</ul>";
+ 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";
+ } 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();
+ $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 rawurlencode($support_ticket_str);
+}
+
+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] = "You have the wrong loader for your operating system, ". $loader_info['osname'] . ".";
+ } 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 = "You have the wrong loader for your machine architecture.";
+ $err_str .= " Your system is " . $loader_info['arch'];
+ $err_str .= " but the loader you are using is for " . $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] = "The installed loader (<code>$installed_loader_name</code>) does not have the name expected (<code>$expected_loader_name</code>) for your system. Please check that you have the correct loader for your system.";
+ }
+ }
+ if (empty($errors) && !is_readable($loader_location)) {
+ $execute_error = "The loader at $loader_location does not appear to be readable.";
+ $execute_error .= "<br>Please check that it exists and is readable.";
+ $execute_error .= "<br>Please also check the permissions of the containing ";
+ $execute_error .= (is_ms_windows()?'folder':'directory') . '.';
+ if (($sysinfo['SS'] == 'IIS') || !($sysinfo['IS_CGI'] || $sysinfo['IS_CLI'])) {
+ $execute_error .= "<br>Please also check that the web server has been restarted.";
+ }
+ $execute_error .= ".";
+ $errors[ERROR_LOADER_NOT_READABLE] = $execute_error;
+ }
+ $loader_strs = get_loader_strings($loader_location);
+ $phpv = php_version();
+ if (preg_match("/php version:\s*(.)\.(.)\.(..?)(-ts)?/i",$loader_strs,$version_matches)) {
+ if ($version_matches[1] != $phpv['major'] || $version_matches[2] != $phpv['minor']) {
+ $loader_php = $version_matches[1] . "." . $version_matches[2];
+ $server_php = $phpv['major'] . "." . $phpv['minor'];
+ $errors[ERROR_LOADER_PHP_MISMATCH] = "The installed loader is for PHP $loader_php but your server is running PHP $server_php.";
+ }
+ if (is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE'] && !is_ms_windows() && !(isset($version_matches[4]) && $version_matches[4] == '-ts')) {
+ $errors[ERROR_LOADER_NONTS_PHP_TS] = "Your server is running a thread-safe version of PHP but the loader is not a thread-safe version.";
+ } elseif (isset($version_matches[4]) && $version_matches[4] == '-ts' && !(is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE'])) {
+ $errors[ERROR_LOADER_TS_PHP_NONTS] = "Your server is running a non-thread-safe version of PHP but the loader is a thread-safe version.";
+ }
+ } elseif (preg_match("/ioncube_loader_.\.._(.)\.(.)\.(..?)(_nonts)?\.dll/i",$loader_strs,$version_matches)) {
+ if (!is_ms_windows()) {
+ $errors[ERROR_LOADER_WIN_SERVER_NONWIN] = "You have a Windows loader but your server does not appear to be running Windows.";
+ } else {
+ if (isset($version_matches[4]) && $version_matches[4] == '_nonts' && is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE']) {
+ $errors[ERROR_LOADER_WIN_NONTS_PHP_TS] = "You have the non-thread-safe version of the Windows loader but you need the thread-safe one.";
+ } elseif (!(is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE']) && !(isset($version_matches[4]) && $version_matches[4] == '_nonts')) {
+ $errors[ERROR_LOADER_WIN_TS_PHP_NONTS] = "You have the thread-safe version of the Windows loader but you need the non-thread-safe one.";
+ }
+ if ($version_matches[1] != $phpv['major'] || $version_matches[2] != $phpv['minor']) {
+ $loader_php = $version_matches[1] . "." . $version_matches[2];
+ $server_php = $phpv['major'] . "." . $phpv['minor'];
+ $errors[ERROR_LOADER_WIN_PHP_MISMATCH] = "The installed loader is for PHP $loader_php but your server is running PHP $server_php.";
+ }
+ if (preg_match("/assemblyIdentity.*version=\"([^.]+)\./",$loader_strs,$compiler_matches)) {
+ $loader_compiler = "VC" . strtoupper($compiler_matches[1]);
+ } else {
+ $loader_compiler = 'VC6';
+ }
+ if ($loader_compiler != $sysinfo['PHP_COMPILER']) {
+ $errors[ERROR_LOADER_WIN_COMPILER_MISMATCH] = "Your loader was built using $loader_compiler but you need the loader built using ${sysinfo['PHP_COMPILER']}.";
+ }
+ }
+ } else {
+ $errors[ERROR_LOADER_PHP_VERSION_UNKNOWN] = "The PHP version for the loader cannot be determined - please check that you have a valid ionCube Loader.";
+ }
+ $errors = array_merge($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,$is_old) = ioncube_loader_version_information();
+ echo "<p>The ionCube Loader $lv has been successfully installed.</p>";
+ 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 "The function you have tried to access has been disabled as the Loader is successfully installed.";
+}
+
+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("This script should only be run by a web server.\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']);
+ }
+ 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 <<<EOT
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN "http://www.w3.org/TR/html4/loose.dtd">
+ <html>
+ <head>
+ <title>ionCube Loader Wizard</title>
+ <link rel="stylesheet" type="text/css" href="$self?page=css">
+ <style type="text/css">
+ body {
+ height: 100%;
+ width: 100%;
+ }
+ </style>
+ <script type="text/javascript">
+ var timingOut = 0;
+ var xmlHttpTimeout;
+ var ajax;
+ var statusPar;
+ var stage_timeout = $stage_timeout;
+ var step_lag = $step_lag;
+
+ function checkNextStep(ajax,expected,continuation) {
+ if (ajax.readyState==4 && ajax.status==200)
+ {
+ clearTimeout(xmlHttpTimeout);
+ if (ajax.responseText == expected) {
+ setTimeout('',step_lag);
+ continuation();
+ } else {
+ statusPar.innerHTML = 'Unable to check for update<br>script continuing';
+ setTimeout("window.location.href = '$start_page&timeout=1'",1000);
+ }
+ }
+ }
+
+ function getXmlHttp() {
+ if (window.XMLHttpRequest) {
+ xmlhttp=new XMLHttpRequest();
+ } else {
+ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
+ }
+ return xmlhttp;
+ }
+ var startMainLoaderWizard = function() {
+ window.location.href = '$start_page';
+ }
+ var loaderVersionCheck = function() {
+ statusPar.innerHTML = 'Stage 4/4: Getting latest loader versions';
+ var xmlHttp = getXmlHttp();
+ xmlHttp.onreadystatechange=function() {
+ checkNextStep(xmlHttp,"1",startMainLoaderWizard);
+ }
+ xmlHttp.open("GET","$self?page=loaderversion",true);
+ xmlHttp.send("");
+ ajax = xmlHttp;
+ xmlHttpTimeout=setTimeout('ajaxTimeout()',stage_timeout);
+ }
+ var platformCheck = function() {
+ statusPar.innerHTML = 'Stage 3/4: Getting platform information';
+ var xmlHttp = getXmlHttp();
+ xmlHttp.onreadystatechange=function() {
+ checkNextStep(xmlHttp,"1",loaderVersionCheck);
+ }
+ xmlHttp.open("GET","$self?page=platforminfo",true);
+ xmlHttp.send("");
+ ajax = xmlHttp;
+ xmlHttpTimeout=setTimeout('ajaxTimeout()',stage_timeout);
+ }
+ var compilerVersionCheck = function() {
+ statusPar.innerHTML = 'Stage 2/4: Getting compiler versions';
+ var xmlHttp = getXmlHttp();
+ xmlHttp.onreadystatechange=function() {
+ checkNextStep(xmlHttp,"1",platformCheck);
+ }
+ xmlHttp.open("GET","$self?page=compilerversion",true);
+ xmlHttp.send("");
+ ajax = xmlHttp;
+ xmlHttpTimeout=setTimeout('ajaxTimeout()',stage_timeout);
+ }
+ var startChecks = function() {
+ statusPar = document.getElementById('status');
+ statusPar.innerHTML = 'Stage 1/4: Getting Loader Wizard version';
+ var xmlHttp = getXmlHttp();
+ xmlHttp.onreadystatechange=function() {
+ checkNextStep(xmlHttp,"1",compilerVersionCheck);
+ }
+ xmlHttp.open("GET","$self?page=wizardversion",true);
+ xmlHttp.send("");
+ ajax = xmlHttp;
+ xmlHttpTimeout=setTimeout('ajaxTimeout()',stage_timeout);
+ }
+ function ajaxTimeout(){
+ ajax.abort();
+ statusPar.innerHTML = 'Cannot reach server<br>script continuing';
+ setTimeout("window.location.href = '$start_page&timeout=1'",1000);
+ }
+ </script>
+ </head>
+ <body>
+
+ <div id="loading"><script type="text/javascript">document.write('<p>Initialising<br>ionCube Loader Wizard<br><span id="status"></span></p>');</script><p id="noscript">Your browser does not support JavaScript so the ionCube Loader Wizard initialisation cannot be made now. This script can get the latest loader version information from the ionCube server when you go to the next page.<br>Please choose one of the following. <br>If the script appears to hang please restart the script and choose the "NO" option.<br><br><br><a href="$start_page">YES - my server DOES have internet access</a><br><br><a href="$start_page&timeout=1">NO - my server does NOT have internet access</a></p></div>
+ <script type="text/javascript">
+ document.getElementById('noscript').style.display = 'none';
+ window.onload = startChecks;
+ </script>
+ </body>
+ </html>
+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();
+
+ if (extension_loaded($loader_extension)) {
+ loader_already_installed($rtl);
+ } else {
+ loader_not_installed();
+ }
+
+ footer($wizard_update);
+}
+
+function uninstall_wizard_instructions()
+{
+ echo '<p><strong>For security reasons we advise that you remove this Wizard script from your server now that the ionCube Loader is installed.</strong></p>';
+}
+
+function contact_script_provider_instructions()
+{
+ echo '<p>Please contact the script provider if you do experience any problems running encoded files.</p>';
+}
+
+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 "<p>Please note that if encoded files in a different $dirphrase from the Wizard fail then you should attempt to copy the $ini file to each $dirphrase in which you have encoded files.</p>";
+ }
+}
+
+function successful_install_end_instructions($rtl_path = null)
+{
+ if (empty($rtl_path)) {
+ may_need_to_copy_ini();
+ } elseif (is_string($rtl_path)) {
+ echo "<p>The runtime loading method of installation was used with path <code>$rtl_path</code></p>";
+ }
+ contact_script_provider_instructions();
+ uninstall_wizard_instructions();
+}
+
+function loader_already_installed($rtl = null)
+{
+ list($lv,$old_version) = ioncube_loader_version_information();
+ echo "<p>";
+ if ($old_version) {
+ echo 'The ionCube Loader ' . $lv . ' is already installed but it is an old version.';
+ echo ' It is recommended that the Loader be updated to the latest version';
+ if (is_string($old_version)) {
+ echo ", $old_version,";
+ }
+ echo ' from the <a href="' . LOADERS_PAGE . '">ionCube Loaders page</a>';
+ if (!is_string($old_version)) {
+ echo ' if one is available for your platform';
+ }
+ echo '.';
+ } else {
+ echo 'The ionCube Loader version ' . $lv . ' is already installed and encoded files should run without problems.';
+ }
+ echo "</p>";
+
+ successful_install_end_instructions($rtl);
+}
+
+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)) {
+ if (count($errors) > 1) {
+ $problem_str = "Please note that the following problems currently exist";
+ } else {
+ $problem_str = "Please note that the following problem currently exists";
+ }
+ echo '<div class="alert">' .$problem_str . ' with the ionCube Loader installation:';
+ echo make_list($errors,"ul");
+ echo '</div>';
+ }
+ if (!empty($warnings)) {
+ $addword = empty($errors)?'':'also';
+ $plural = (count($warnings)>1)?'s':'';
+ echo '<div class="warning">';
+ echo "Please note $addword the following issue$plural:";
+ echo make_list($warnings,"ul");
+ echo '</div>';
+ }
+ }
+ if (!isset($stype)) {
+ echo '<p>To use files that have been protected by the <a href="' . ENCODER_URL . '" target=encoder>ionCube PHP Encoder</a>, a component called the ionCube Loader must be installed.</p>';
+ }
+
+ if (!is_supported_php_version()) {
+ echo '<p>Your server is running PHP version ' . PHP_VERSION . ' and is
+ unsupported by ionCube Loaders. Recommended PHP 4 versions are PHP 4.2 or higher,
+ and PHP 5.1 or higher for PHP 5.</p>';
+ } elseif ($sysinfo['DEBUG_BUILD']) {
+ echo '<p>Your server is currently running a debug build of PHP. The Loader cannot be installed with a debug build of PHP. Please ensure that PHP is reconfigured with debug disabled. Note that debug builds of PHP cannot help in debugging PHP scripts.</p>';
+ } elseif (!is_array($loader)) {
+ if ($loader == ERROR_WINDOWS_64_BIT) {
+ echo '<p>Loaders for 64-bit PHP on Windows are not currently available. However, if you <b>install and run 32-bit PHP</b> the corresponding 32-bit loader for Windows should work.</p>';
+ if ($sysinfo['THREAD_SAFE']) {
+ echo '<li>Download one of the following archives of 32-bit Windows x86 loaders:';
+ } else {
+ echo '<li>Download one of the following archives of 32-bit Windows non-TS x86 loaders:';
+ }
+ echo make_archive_list(windows_package_name());
+ } else {
+ echo '<p>There may not be an ionCube Loader available for your type of system at the moment. However, if you create a <a href="' . SUPPORT_SITE . '">support ticket</a> more advice and information may be available to assist. Please include the URL for this Wizard in your ticket.</p>';
+ }
+ } elseif (!$sysinfo['SUPPORTED_COMPILER']) {
+ $supported_compilers = supported_win_compilers();
+ $supported_compiler_string = join('/',$supported_compilers);
+ echo '<p>At the current time the ionCube Loader requires PHP to be built with ' . $supported_compiler_string . '. Your PHP software has been built using ' . $sysinfo['PHP_COMPILER'] . '. Supported builds of PHP are available from <a href="http://windows.php.net/download/">PHP.net</a>.';
+ } 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;
+ $form = <<<EOT
+ <p>This Wizard will give you information on how to install the ionCube Loader.</p>
+ <p>Please select the type of web server that you have and then click Next.</p>
+ <form method=GET action=$self>
+ <input type="hidden" name="page" value="default">
+ <input type="hidden" name="timeout" value="$timeout">
+ <input type=radio id=shared name=stype value=s><label for=shared>Shared <small>(for example, server with FTP access only and no access to php.ini)</small></label><br>
+ <input type=radio id=dedi name=stype value=d><label for=dedi>Dedicated or VPS <small>(server with full root ssh access)</small></label><br>
+ <input type=radio id=local name=stype value=l><label for=local>Local install</label>
+ <p><input type=submit value=Next></p>
+ </form>
+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,$is_old) = ioncube_loader_version_information();
+ echo '<p>The ionCube Loader version ' . $lv . ' is installed and encoded files should run successfully.</p>';
+ if ($is_old) {
+ echo '<p>Please note though that you have an old version of the ionCube Loader.';
+ if (is_string($is_old)) {
+ echo " The latest version is $is_old.";
+ }
+ echo '</p>';
+ }
+ successful_install_end_instructions($rtl_path);
+ } else {
+ echo '<p>The ionCube Loader is <b>not</b> currently installed successfully.</p>';
+ if (!is_null($rtl_path)) {
+ echo '<p>Runtime loading was attempted but has failed.</p>';
+ $rt_errors = runtime_loading_errors();
+ if (!empty($rt_errors)) {
+ list_loader_errors($rt_errors);
+ }
+ link_to_php_ini_instructions();
+ } else {
+ list_loader_errors();
+ }
+ }
+
+ footer(true);
+}
+
+function ini_loader_errors()
+{
+ $errors = array();
+ $loader_loc = find_loader();
+ if (is_string($loader_loc)) {
+ if (!shared_and_runtime_loading()) {
+ $sys = get_sysinfo();
+ if (empty($sys['PHP_INI'])) {
+ $errors[ERROR_INI_NO_PATH] = 'No file path found for the PHP configuration file (php.ini).';
+ } elseif (!@file_exists($sys['PHP_INI'])) {
+ $errors[ERROR_INI_NOT_FOUND] = 'The PHP configuration file (' . $sys['PHP_INI'] .') cannot be found.';
+ }
+ }
+ $errors = array_merge($errors,loader_compatibility_test($loader_loc));
+ } else {
+ $errors = $loader_loc;
+ }
+ 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 file does not exist.");
+ }
+ 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)
+ {
+ $sys = get_sysinfo();
+ $ini_name = ini_file_name();
+ $rootpath = realpath($_SERVER['DOCUMENT_ROOT']);
+ $here = unix_path_dir();
+ $ini_files = unrecognised_inis_webspace($here);
+ foreach ($ini_files as $full_ini_loc) {
+ $advice = "The file $full_ini_loc is not being recognised by PHP.";
+ $advice .= " Please check that the name and location of the file are correct.";
+ if (!ini_same_dir_as_wizard()) {
+ $shared_ini_loc = shared_ini_location();
+ $ini_dir = dirname($sys['PHP_INI']);
+ $ini_loc_dir = dirname($full_ini_loc);
+ $shared_ini_file = $shared_ini_loc . DIRECTORY_SEPARATOR . $ini_name;
+ if (!@file_exists($shared_ini_file) && $ini_loc_dir != $shared_ini_loc && $ini_dir != $shared_ini_loc) {
+ $advice .= " Please try copying the <code>$full_ini_loc</code> file to <code>" . $shared_ini_loc . "</code>.";
+ } else {
+ $root_ini_file = $rootpath . DIRECTORY_SEPARATOR . $ini_name;
+ if (!@file_exists($root_ini_file) && $rootpath != $shared_ini_loc && $full_ini_loc != $rootpath) {
+ $advice .= " Please try copying the <code>$full_ini_loc</code> file to <code>" . $rootpath . "</code>.";
+ }
+ $herepath = realpath($here);
+ $here_ini_file = $herepath . DIRECTORY_SEPARATOR . $ini_name;
+ if (!@file_exists($here_ini_file) && $herepath != $rootpath) {
+ $advice .= " It may be necessary to copy the <code>$full_ini_loc</code> file to <code>$herepath</code> and to all " . (is_ms_windows()?'folders':'directories') . ' in which you have encoded files';
+ }
+ }
+ }
+ $warnings[] = $advice;
+ }
+ } else {
+ $loader_dir_pair = correct_loader_wrong_location();
+ if (!empty($loader_dir_pair)) {
+ $advice = "The correct loader for your system has been found at <code>${loader_dir_pair['loader']}</code>.";
+ $advice .= " You may wish to copy the loader from <code>${loader_dir_pair['loader']}</code> to <code>${loader_dir_pair['newloc']}</code>.";
+ $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 = '<a href="#" onClick="window.location.href=window.location.href">try again</a>';
+ echo '<div class="alert">';
+ if (count($errors) > 1) {
+ echo 'The following problems have been found with the ionCube Loader installation:';
+ $retry_message = "Please correct those errors and $try_again.";
+ } else {
+ echo 'The following problem has been found with the ionCube Loader installation:';
+ $retry_message = "Please correct that error and $try_again.";
+ }
+ echo make_list($errors,"ul");
+ echo '</div>';
+ if (!empty($warnings)) {
+ echo '<div class="warning">';
+ echo 'Please also note the following:';
+ echo make_list($warnings,"ul");
+ echo '</div>';
+ }
+ } elseif (!empty($warnings)) {
+ echo '<div class="warning">';
+ echo 'There are the following potential problems:';
+ echo make_list($warnings,"ul");
+ echo '</div>';
+ } elseif ($suggest_restart) {
+ if (SERVER_SHARED == find_server_type()) {
+ echo "<p>Please contact your server administrator about installing the ionCube Loader.</p>";
+ } else {
+ if (selinux_is_enabled()) {
+ echo "<p>It appears that SELinux is enabled on your server. Please follow the instructions at <a target=\"_blank\" href=\"http://www.cuteshift.com/57/install-ioncube-loader-while-selinux-enabled/\">http://www.cuteshift.com/57/install-ioncube-loader-while-selinux-enabled/</a> for installing the ionCube Loader when SELinux is enabled.</p>";
+ } else {
+ $sysinfo = get_sysinfo();
+ $ss = $sysinfo['SS'];
+ if (!$sysinfo['CGI_CLI'] || is_ms_windows()) {
+ echo "<p>Please check that the $ss web server software has been restarted.</p>";
+ }
+ }
+ }
+ }
+ echo '<div>';
+ echo $retry_message;
+ echo " You may wish to view the following for further help:";
+ echo make_list(help_resources($errors),"ul");
+ echo '<a href="' . $default . '">Click here to go back to the start of the Loader Wizard</a>.</div>';
+}
+
+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 "<h4>Additional Information</h4>";
+ echo "<table>";
+ $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'] = "<a href=\"$self?page=loaderbin\">Download loader file</a>";
+ } 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":"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');
+ foreach ($lines as $h => $i) {
+ $v = (empty($i))?'<em>EMPTY</em>':$i;
+ echo '<tr><th>'. $h . ':</th>' . '<td>' . $v . '</td></tr>';
+ }
+ echo "</table>";
+ 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'] = '';
+ }
+ return $_SESSION['godaddy_root'];
+}
+
+function GoDaddy_windows_instructions()
+{
+ $instr = "It appears that you are hosted on a Windows server at GoDaddy.<br/>";
+ $instr .= "Please change to a Linux hosting plan at GoDaddy.<br />";
+ $instr .= "If you <a href=\"http://help.godaddy.com/\">contact their support team</a> 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="<code>zend_extension = $html_dir/ioncube/$loader_name</code>";
+ $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 <b>ioncube</b>.';
+ if (@file_exists($ini_path)) {
+ $instr[] = "Edit the $php_ini_name in your $html_dir and add the following line to the <b>top</b> of the file:<br>" . $zend_extension_line ;
+ } else {
+ $instr[] = "<a href=\"$base&page=phpconfig&ininame=$php_ini_name&stype=s&download=1&prepend=1\">Save this $php_ini_name file</a> and upload it to your html directory, $html_dir";
+ }
+ $instr[] = 'Download the <a target="_blank" href="http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.zip">Linux ionCube Loaders</a>.';
+ $instr[] = 'Unzip the loaders and upload them into the ioncube directory you created previously.';
+ $instr[] = 'The encoded files should now be working.';
+
+ echo '<div class=panel>';
+ echo (make_list($instr));
+ echo '</div>';
+}
+
+function GoDaddy_page()
+{
+ $base = get_base_address();
+
+ heading();
+
+ $inst_str = '<h4>GoDaddy Installation Instructions</h4>';
+ $inst_str .= '<p>It appears that you are hosted with GoDaddy (<a target="_blank" href="http://www.godaddy.com/">www.godaddy.com</a>). ';
+ $inst_str .= "If that is <b>not</b> the case then please <a href=\"$base&page=default&host=ngd\">click here to go to the main page of this installation wizard</a>.</p>";
+ $inst_str .= "<p>If you have already installed the loader then please <a href=\"$base&page=loader_check\">click here to test the loader</a>.</p>";
+
+ echo $inst_str;
+
+ if (is_ms_windows()) {
+ GoDaddy_windows_instructions();
+ } else {
+ GoDaddy_linux_instructions($_SESSION['godaddy_root']);
+ }
+
+ 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 $request_array[$param_name];
+ } else {
+ return null;
+ }
+}
+
+function make_list($list_items,$list_type='ol')
+{
+ $html = '';
+ if (!empty($list_items)) {
+ $html .= "<$list_type>";
+ $html .= '<li>';
+ $html .= join('</li><li>',$list_items);
+ $html .= '</li>';
+ $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[] = "<a href=\"$download_server/$basename$ext_sep$a\">$link_text</a>";
+ }
+
+ return make_list($archive_list,"ul");
+}
+
+function error($m)
+{
+ die("<b>ERROR:</b> <span class=\"error\">$m</span><p>Please help us improve this script by <a href=\"". SUPPORT_SITE . "\">reporting this error</a> and including the URL to the script so that we can test it.");
+}
+
+function get_self()
+{
+ if (empty($_SERVER['PHP_SELF'])) {
+ 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 <<<EOT
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>ionCube Loader Wizard</title>
+ <link rel="stylesheet" type="text/css" href="$self?page=css">
+</head>
+<body>
+<div id=header>
+ <img src="?page=logo" alt="ionCube logo">
+</div>
+<div id=main>
+ <h2>ionCube Loader Wizard</h2>
+EOT;
+}
+
+function footer($update_info = null)
+{
+ $self = get_self();
+ $base = get_base_address();
+ $default = get_default_address(false);
+ $year = date("Y");
+
+ echo "</div>";
+ echo "<div id=\"footer\">" .
+ "Copyright ionCube Ltd. 2002-$year | " .
+ "Loader Wizard version " . script_version() . " ";
+
+ if ($update_info === true) {
+ $update_info = check_for_wizard_update(false);
+ }
+ $loader_wizard_loc = LOADER_WIZARD_URL;
+ $wizard_version_string =<<<EOT
+ <script type="text/javascript">
+ var xmlhttp;
+ function version_check()
+ {
+ var body = document.getElementsByTagName('body')[0];
+ var ldel = document.getElementById('loading');
+ if (!ldel) {
+ body.innerHTML += '<div id="loading"></div>';
+ ldel = document.getElementById('loading');
+ }
+ ldel.innerHTML = '<p>Retrieving Wizard version information<br>Please wait</p>';
+ ldel.style.display = 'block';
+ ldel.style.height = '300px';
+ ldel.style.left = '200px';
+ ldel.style.border = '4px #660000 solid';
+ if (window.XMLHttpRequest) {
+ xmlhttp=new XMLHttpRequest();
+ } else {
+ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
+ }
+ xmlhttp.onreadystatechange=function()
+ {
+ var loadedOkay = 0;
+ if (xmlhttp.readyState==4 && xmlhttp.status==200)
+ {
+ var wizardversion = xmlhttp.responseText;
+ var msg;
+ clearTimeout(xmlHttpTimeout);
+ buttons = '';
+ if (wizardversion == '1') {
+ msg = 'You have the current version of the<br>ionCube Loader Wizard';
+ } else if (wizardversion != '0') {
+ msg = 'A new version, ' + wizardversion + ', of the loader wizard is available';
+ buttons = '<button onclick="document.getElementById(\'loading\').style.display=\'none\'; window.open(\'$loader_wizard_loc\'); return false">Get new version</button> ';
+ } else {
+ msg = 'Wizard version information cannot be obtained from the<br>ionCube server';
+ }
+ buttons += '<button onclick="document.getElementById(\'loading\').style.display=\'none\'; return false">Close this box</button>';
+ ldel.innerHTML = '<p>' + msg + '<br>' + buttons + '</p>';
+ }
+ }
+ xmlhttp.open("GET",'$self?page=wizardversion&wizard_only=1&clear_info=1',true);
+ xmlhttp.send();
+ var xmlHttpTimeout=setTimeout(ajaxTimeout,7000);
+ }
+ function ajaxTimeout(){
+ xmlhttp.abort();
+ msg = 'Wizard version information cannot be obtained from the<br>ionCube server';
+ button = '<button onclick="document.getElementById(\'loading\').style.display=\'none\'; return false">Close this box</button>';
+ var ldel = document.getElementById('loading');
+ ldel.innerHTML = '<p>' + msg + '<br>' + button + '</p>';
+ }
+ </script>
+EOT;
+
+ $wizard_version_string .= '(';
+ if ($update_info === null) {
+ $wizard_version_string .= '<a target="_blank" href="' . $loader_wizard_loc . '" onclick="version_check();return false;">check for new version</a>';
+ } else if ($update_info !== false) {
+ $wizard_version_string .= '<a href="' . LOADERS_PAGE .'" target="_blank">download version ' . $update_info . '</a>';
+ } else {
+ $wizard_version_string .= "current";
+ }
+ $wizard_version_string .= ')';
+ echo $wizard_version_string;
+
+ $server_type_code = server_type_code();
+
+ if (!info_should_be_disabled()) {
+ echo " | <a href=\"$base&page=phpinfo\" target=\"phpinfo\">phpinfo</a>";
+ echo " | <a href=\"$base&page=phpconfig\" target=\"phpconfig\">config</a>";
+ echo " | <a href=\"$base&page=extra&stype=$server_type_code\" target=\"extra\">additional</a>";
+ echo " | <a href=\"$base&page=system_info_archive&stype=$server_type_code\">info archive</a>";
+ }
+ echo " | <a href=\"$default\">wizard start</a>";
+ echo " | <a href=\"$base&page=loader_check\">loader test</a>";
+ echo ' | <a href="' . LOADERS_PAGE . '" target="loaders">loaders</a>';
+
+ echo "</div>\n";
+ echo "\n</body></html>\n";
+}
+
+function css_page()
+{
+ header('Content-Type: text/css');
+ echo <<<EOT
+ BODY {
+ font-family: verdana, helvetica, arial, sans-serif;
+ font-size: 10pt;
+ line-height: 150%;
+ margin: 0px;
+ min-height: 400px;
+ position: relative;
+ }
+
+ CODE {
+ color: #c00080;
+ }
+
+ LI {
+ margin-top: 10px;
+ }
+ #loading {
+ display: block;
+ position: absolute;
+ top: 33%;
+ left: 25%;
+ margin: auto;
+ height: 320px;
+ width: 460px;
+ padding: 4px;
+ color: #660000;
+ background-color: white;
+ z-index: 100;
+ }
+
+ #loading p {
+ position: absolute;
+ margin-top: 10px;
+ text-align: center;
+ vertical-align: middle;
+ padding-left: 40px;
+ padding-right: 30px;
+ font-size: 200%;
+ line-height: 200%;
+ }
+
+ #loading p span#status{
+ font-size: 60%;
+ line-height: 120%;
+ }
+ #loading p#noscript {
+ font-size: 120%;
+ line-height: 120%;
+ position: absolute;
+ text-align: left;
+ padding-top: 10px;
+ bottom: 0;
+ }
+ #loading p#noscript a {
+ text-align: center;
+ }
+
+ #loading button {
+ margin-top: 20px;
+ line-height: 100%;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ }
+
+
+ h4 {
+ margin-bottom: 0;
+ padding-bottom: 4px;
+ }
+
+ p,#main div {
+ max-width: 1000px;
+ width: 75%;
+ }
+
+ th {
+ text-align: left;
+ }
+
+ .alert {
+ margin: 2ex 0;
+ border: 1px solid #660000;
+ padding: 1ex 1em;
+ background-color: #ffeeee;
+ color: #660000;
+ width: 75%;
+ }
+
+
+ .warning {
+ margin: 2ex 0;
+ border: 1px solid #FFBF00;
+ padding: 1ex 1em;
+ background-color: #FDF5E6;
+ color: #000000;
+ width: 75%;
+ }
+
+ .error {
+ color: #FF0000;
+ }
+
+ .panel {
+ border: 1px solid #c0c0c0;
+ background-color: #f0f0f0;
+ width: 75%;
+ padding: 1ex 1em;
+ }
+
+ #header {
+ background: #3f0f0f;
+ }
+
+ #footer {
+ border-top: 1px solid #404040;
+ margin-top: 20px;
+ padding-top: 10px;
+ padding-left: 20px;
+ font-size: 75%;
+ text-align: left;
+ }
+
+ #main {
+ margin: 20px;
+ }
+EOT;
+}
+
+function logo_page()
+{
+$img_encoded = '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';
+
+header('Content-Type: image/png');
+header('Cache-Control: public');
+echo base64_decode($img_encoded);
+}
|