Совместимость Joomla 1.0 и PHP 5.3

Устаревшая линейка Joomla! 1.0.x имеет определенную несовместимость с версией PHP 5.3.x
Появляются ошибки типа:
Deprecated: Assigning the return value of new by reference is deprecated in /includes/joomla.php on line 836 Deprecated: Function split() is deprecated in /offlinebar.php on line 32
Если у вас имеется сайт на Joomla! 1.0 и хостер внезапно сменил на сервере версию PHP на 5.3 то вам может помочь набор фиксов:
Находим и открываем файл /includes/Cache/Lite/Function.php
В этом файле находим следующие строки:

$arguments = func_get_args();
Заменяем ее на:
$arguments = func_get_args();
$numargs = func_num_args();
for($i=1; $i < $numargs; $i++){
$arguments[$i] = &$arguments[$i];
}

Либо вносим изменения в следующие строки:

$result = call_user_func_array(array($class, $method), $arguments);
Меняем на:
$result = call_user_func_array(array($class, $method), &$arguments);
Строку:
$result = call_user_func_array(array($object_123456789, $method), $arguments);
Меняем на:
$result = call_user_func_array(array($object_123456789, $method), &$arguments);
Строку:
$result = call_user_func_array($target, $arguments);
Меняем на:
$result = call_user_func_array($target, &$arguments);

Также перестает работать стандартный компонент контактов (белый экран):
com_contacts использует includes/vcard.class.php который также нужно поправить, дабы избежать ошибки:

 

Fatal error: Cannot redeclare quoted_printable_encode() in includes/vcard.class.php on line 74

Найдите часть кода:

function quoted_printable_encode($input, $line_max=76) {
/* ... */
}

И замените его на:

if(!function_exists('quoted_printable_encode')) {
 function quoted_printable_encode($input, $line_max=76) {
/* ... */
}
}

Также у вас могут возникнуть проблеммы с часовыми поясами. Если вы используете стандартный SEF и используется файл .htaccess - проще всего будет добавить в него дополнительные установки:

# set the server timezone
SetEnv TZ Europe/Kiev

или 

# set the server timezone
SetEnv TZ Europe/Moscow

для часовых поясов Киева и Москвы соответственно.

Также может появится следующее сообщение:

Deprecated: Function ereg() is deprecated in includes/sef.php on line 533

Данная ошибка устраняется путем правки файла includes/sef.php
Находим и открываем данный файл. В нем находим примерно 370 строку:

if ($juri != '' && $juri != '/' && !eregi( "index\.php", $_SERVER['REQUEST_URI'] )
&& !eregi( "index2\.php", $_SERVER['REQUEST_URI'] ) && !eregi( "/\?", $_SERVER['REQUEST_URI'] )
&& $_SERVER['QUERY_STRING'] == '' ) {

Заменяем ее на :

if ($juri != '' && $juri != '/' && !preg_match( "index\.php/i", $_SERVER['REQUEST_URI'] )
&& !preg_match( "index2\.php/i", $_SERVER['REQUEST_URI'] ) && !preg_match( "/\?/i", $_SERVER['REQUEST_URI'] )
&& $_SERVER['QUERY_STRING'] == '' ) {

Находим примерно 388 строку:

if( $mosConfig_sef && $mosConfig_multilingual_support && $string!='index.php'
&& !eregi("^(([^:/?#]+):)",$string) && !strcasecmp(substr($string,0,9),'index.php')
&& !eregi('lang=', $string) ) {

Заменяем на:

if( $mosConfig_sef && $mosConfig_multilingual_support && $string!='index.php'
&& !preg_match("^(([^:/?#]+):)/i",$string) && !strcasecmp(substr($string,0,9),'index.php')
&& !preg_match('lang=/i', $string) ) {

Примерно 393 строка:

if ($mosConfig_sef && !eregi("^(([^:/?#]+):)",$string) && !strcasecmp(substr($string,0,9),'index.php')) {

Заменяем на:

if ($mosConfig_sef && !preg_match("/^(([^\/:?#]+):)/i",$string) && !strcasecmp(substr($string,0,9),'index.php')) {

409 строка:

if (preg_match('@^[A-Za-z][A-Za-z0-9:_.-]*$@', $url['fragment'])) {

Заменяем на:

if (preg_match('@^[A-Za-z][A-Za-z0-9:_.-]*$@/i', $url['fragment'])) {

И примерно 533 строку:

eregi("^(https?:[\/]+[^\/]+)(.*$)", $mosConfig_live_site, $live_site_parts);


Заменяем на:

preg_match("/^(https?:[\/]+[^\/]+)(.*$)/i", $mosConfig_live_site, $live_site_parts);
 

Пофиксенный sef.php для Joomla! 1.0 вы можете скачать в файловом архиве и заменить оригинальный файл у себя на сервере.