Индусский код в phpBB3 – ошибка при установке и её устранение

Автор: manager Воскресенье, Апрель 1st, 2012 Нет комментариев

Рубрика: Модификация, Поддержка, Разработка

PhpBB3 очень популярный движок для форума. Его команда, видимо состоит из разработчиков. Бывает и они ошибаются. Например у меня, при установке вывалилось следующее:

Fatal error: Cannot redeclare phpbb_realpath()

Проблема решается быстро но удивляет причина появления такой ошибки.Если честно, описанный ниже прием я вижу впервые. В файле functions.php (строка 1057) мы находим такой код:

if (!function_exists('realpath'))
{
/**
* A wrapper for realpath
* @ignore
*/
function phpbb_realpath($path)
{
return phpbb_own_realpath($path);
}
}
else
{
/**
* A wrapper for realpath
*/
function phpbb_realpath($path)
{
Тут код функции
}
}


Вот не идиотизм это? Я не гуру программирования, но такой прием, как функция в if-else с одинаковым именем, вижу впервые. Это кстати и есть причина ошибки. Заменяем эту «чудную» конструкцию на следующее:

function phpbb_realpath($path)
{
if (!function_exists('realpath'))
{
return phpbb_own_realpath($path);
}
$realpath = realpath($path);

// Strangely there are provider not disabling realpath but returning strange values.
// We at least try to cope with them.
if ($realpath === $path || $realpath === false)
{
return phpbb_own_realpath($path);
}

// Check for DIRECTORY_SEPARATOR at the end (and remove it!)
if (substr($realpath, -1) == DIRECTORY_SEPARATOR)
{
$realpath = substr($realpath, 0, -1);
}

return $realpath;
}

Неужели этот код менее читаемый чем в исходниках форума?

Если бы такие ошибки отлавливались как-нибудь устройством, вроде как жироуловитель, который решает свою задачу, то несомненно прибор пользовался бы успехом.

Автор: Александр
Источник: js-php.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты