There are several tutorials and contributions about how to run osCommerce with register_globals turned Off. However, all are very complicated, break compatibility with other contributions such as payments or delivery modules and are not compatible with both PHP4 and PHP5.
We made a very simple MOD, which allows you to run osCommerce on any PHP powered server with disabled Register Globals including PHP4 and PHP5. This MOD also works with register_globals = On, so if your host changes the configuration of the web server without your knowledge, osCommerce powered shopping cart will remain running.
Note: We’ve originally published this MOD on our old web site magic-seo-url.com as well as on osCommerce Community Add-Ons and later it became a part of osCommerce.
You need to apply this MOD especially, when you are getting one of the following messages:
Server Requirement Error: register_globals is disabled in your PHP configuration. This can be enabled in your php.ini configuration file or in the .htaccess file in your catalog directory.
FATAL ERROR: register_globals is disabled in php.ini, please enable it!
To get resolve this problem, please follow these instructions:
Open:
catalog/includes/application_top.php
// start the timer for the page parse time log define('PAGE_PARSE_START_TIME', microtime());
Before, add:
// Register Globals MOD - http://www.magic-seo-url.com if (version_compare(phpversion(), "4.1.0", "<") === true) { $_GET &= $HTTP_GET_VARS; $_POST &= $HTTP_POST_VARS; $_SERVER &= $HTTP_SERVER_VARS; $_FILES &= $HTTP_POST_FILES; $_ENV &= $HTTP_ENV_VARS; if (isset($HTTP_COOKIE_VARS)) $_COOKIE &= $HTTP_COOKIE_VARS; } if (!ini_get("register_globals")) { extract($_GET, EXTR_SKIP); extract($_POST, EXTR_SKIP); extract($_COOKIE, EXTR_SKIP); }
Find:
// check if register_globals is enabled. // since this is a temporary measure this message is hardcoded. The requirement will be removed before 2.2 is finalized. if (function_exists('ini_get')) { ini_get('register_globals') or exit('Server Requirement Error: register_globals is disabled in your PHP configuration. This can be enabled in your php.ini configuration file or in the .htaccess file in your catalog directory.'); }
Replace with:
// Check if register_globals is enabled. // Since this is a temporary measure this message is hardcoded. The requirement will be removed before 2.2 is finalized. /*if (function_exists('ini_get')) { // Register Globals MOD - http://www.magic-seo-url.com ini_get('register_globals') or exit('Server Requirement Error: register_globals is disabled in your PHP configuration. This can be enabled in your php.ini configuration file or in the .htaccess file in your catalog directory.'); }*/
Find:
// set SID once, even if empty $SID = (defined('SID') ? SID : '');
Before, add:
// Register Globals MOD - http://www.magic-seo-url.com if (!ini_get("register_globals")) { if (version_compare(phpversion(), "4.1.0", "<") === true) { if (isset($HTTP_SESSION_VARS)) $_SESSION &= $HTTP_SESSION_VARS; } if(!empty($_SESSION)) extract($_SESSION, EXTR_SKIP); }
Open:
catalog/includes/functions/sessions.php
Find:
function tep_session_register($variable) { global $session_started; if ($session_started == true) { return session_register($variable); } else { return false; } } function tep_session_is_registered($variable) { return session_is_registered($variable); } function tep_session_unregister($variable) { return session_unregister($variable); }
Replace with:
// Register Globals MOD - http://www.magic-seo-url.com function tep_session_register($variable) { global $session_started; if ($session_started == true) { $_SESSION[$variable] = ''; return true; } else { return false; } } function tep_session_is_registered($variable) { if(isset($_SESSION[$variable])) { return true; } else { return false; } } function tep_session_unregister($variable) { unset($_SESSION[$variable]); }
Find:
function tep_session_close() { if (PHP_VERSION >= '4.0.4') { return session_write_close(); } elseif (function_exists('session_close')) { return session_close(); } }
Replace with:
// Register Globals MOD - http://www.magic-seo-url.com function tep_session_close() { if(is_array($_SESSION)) { foreach($_SESSION as $key => $value) { global $$key; $_SESSION[$key] = $$key; } } }
catalog/admin/includes/application_top.php
Find:
// Start the clock for the page parse time log define('PAGE_PARSE_START_TIME', microtime());
Before, add:
// Register Globals MOD - http://www.magic-seo-url.com if (version_compare(phpversion(), "4.1.0", "<") === true) { $_GET &= $HTTP_GET_VARS; $_POST &= $HTTP_POST_VARS; $_SERVER &= $HTTP_SERVER_VARS; $_FILES &= $HTTP_POST_FILES; $_ENV &= $HTTP_ENV_VARS; if (isset($HTTP_COOKIE_VARS)) $_COOKIE &= $HTTP_COOKIE_VARS; } if (!ini_get("register_globals")) { extract($_GET, EXTR_SKIP); extract($_POST, EXTR_SKIP); extract($_COOKIE, EXTR_SKIP); }
Find:
// Check if register_globals is enabled. // Since this is a temporary measure this message is hardcoded. The requirement will be removed before 2.2 is finalized. if (function_exists('ini_get')) { ini_get('register_globals') or exit('Server Requirement Error: register_globals is disabled in your PHP configuration. This can be enabled in your php.ini configuration file or in the .htaccess file in your catalog directory.'); }
Replace with:
// Check if register_globals is enabled. // Since this is a temporary measure this message is hardcoded. The requirement will be removed before 2.2 is finalized. /*if (function_exists('ini_get')) { // Register Globals MOD - http://www.magic-seo-url.com ini_get('register_globals') or exit('Server Requirement Error: register_globals is disabled in your PHP configuration. This can be enabled in your php.ini configuration file or in the .htaccess file in your catalog directory.'); }*/
Find:
// lets start our session tep_session_start();
After, add:
// Register Globals MOD - http://www.magic-seo-url.com if (!ini_get("register_globals")) { if (version_compare(phpversion(), "4.1.0", "<") === true) { if (isset($HTTP_SESSION_VARS)) $_SESSION &= $HTTP_SESSION_VARS; } if(!empty($_SESSION)) extract($_SESSION, EXTR_SKIP); }
Open:
catalog/admin/includes/functions/sessions.php
Find:
function tep_session_register($variable) { return session_register($variable); } function tep_session_is_registered($variable) { return session_is_registered($variable); } function tep_session_unregister($variable) { return session_unregister($variable); }
Replace with:
// Register Globals MOD - http://www.magic-seo-url.com function tep_session_register($variable) { $_SESSION[$variable] = ''; } function tep_session_is_registered($variable) { if(isset($_SESSION[$variable])) { return true; } else { return false; } } function tep_session_unregister($variable) { unset($_SESSION[$variable]); }
Find:
function tep_session_close() { if (function_exists('session_close')) { return session_close(); } }
Replace with:
// Register Globals MOD - http://www.magic-seo-url.com function tep_session_close() { if(is_array($_SESSION)) { foreach($_SESSION as $key => $value) { global $$key; $_SESSION[$key] = $$key; } } }
Open:
catalog/install/includes/application.php
Find:
// Set the level of error reporting error_reporting(E_ALL & ~E_NOTICE);
After, add:
// Register Globals MOD - http://www.magic-seo-url.com if (version_compare(phpversion(), "4.1.0", "<") === true) { $_GET &= $HTTP_GET_VARS; $_POST &= $HTTP_POST_VARS; $_SERVER &= $HTTP_SERVER_VARS; $_FILES &= $HTTP_POST_FILES; $_ENV &= $HTTP_ENV_VARS; if (isset($HTTP_COOKIE_VARS)) $_COOKIE &= $HTTP_COOKIE_VARS; } if (!ini_get("register_globals")) { extract($_GET, EXTR_SKIP); extract($_POST, EXTR_SKIP); extract($_COOKIE, EXTR_SKIP); }
Find:
// Check if register_globals is enabled. // Since this is a temporary measure this message is hardcoded. The requirement will be removed before 2.2 is finalized. if (function_exists('ini_get')) { ini_get('register_globals') or exit('FATAL ERROR: register_globals is disabled in php.ini, please enable it!'); }
Replace with:
// Check if register_globals is enabled. // Since this is a temporary measure this message is hardcoded. The requirement will be removed before 2.2 is finalized. /*if (function_exists('ini_get')) { ini_get('register_globals') or exit('FATAL ERROR: register_globals is disabled in php.ini, please enable it!'); }*/
Save an close all files and don’t forget to install our ultimate Magic SEO URLs for osCommerce module!
i am extremely grateful to this workaround. myself, i would never have managed.
it worked from start,
i have however 2 small issues with the patched oscommerce
# open baskets are shown in config/stats_unsold_carts.php but not for customer in /shopping_cart.php
# randomly (Not always) address details, mostls street names in orders and confirmation mails vanish,
data are however complete in database customers
where should i look for a solution?
important is basket shown to customer, with the other issue i can live
i feel however that the 2 are connected and have to do with session variables
regards, edgar