[Sysadmins] использовать php5 вместо php7
Alexander Yereschenko
ave4600 на yandex.ru
Ср Авг 21 22:46:55 MSK 2019
21.08.2019 12:21, Гусев Владислав Юрьевич пишет:
> День добрый!
>
> После установки php7 как версии по умолчанию (через /etc/alternatives) отвалился старый сайт, который не работает с php старше пятёрки.
> Подскажите, пожалуйста, есть ли возможность в апаче2 для отдельного сайта указать использование php5 (он тоже установлен)?
>
> Спасибо.
>
Был аналогичный случай, когда на хосте у заказчика только php7, и надо
было запустить старый сайт на php5. Проблема была в использовании старых
функций mysql_* для работы базой (эти функции из 7-ки выпилены в пользу
mysqli_*
Для совместимости использовался костыль - переопределение отсутствующих
функций mysql через mysqli
(можно доработать под свои нужды)
==================================================
define('DB_SERVER', 'localhost');
define('DB_SERVER_USERNAME', 'root');
define('DB_SERVER_PASSWORD', 'pass');
define('DB_DATABASE', 'test_db');
if (function_exists("mysql_query")) {
// до версии 5.6 включительно - работаем по-старому - mysql
$link = mysql_connect(DB_SERVER, DB_SERVER_USERNAME,
DB_SERVER_PASSWORD) or die('No connect');
$base = mysql_select_db(DB_DATABASE);
mysql_query("SET NAMES utf8");
} else {
// иначе - используем mysqli
class DB
{
static $link;
static $count = 0;
public static function connect()
{ // Синглтончик-с в целях экономии
if (empty(self::$link)) {
self::$link = @mysqli_connect(DB_SERVER,
DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE)
or die('No connect');
mysqli_set_charset(self::$link, 'utf8');
}
}
}
// Запускаем не отходя от кассы
DB::connect();
// ------------- переопределяем функции mysql_
-------------------------------------
function mysql_query($sql)
{
$result = mysqli_query(db::$link, $sql)
or die(mysqli_error(db::$link));
return $result;
}
function mysql_real_escape_string($escapestr)
{
return mysqli_real_escape_string(db::$link, $escapestr);
}
function mysql_insert_id()
{
return mysqli_insert_id(db::$link);
}
function mysql_num_rows($result)
{
return mysqli_num_rows($result);
}
function mysql_error()
{
return mysqli_error(db::$link);
}
function mysql_fetch_array($result, $resulttype = MYSQLI_BOTH)
{
return mysqli_fetch_array($result, $resulttype);
}
function mysql_result($result, $number, $field = 0)
{
mysqli_data_seek($result, $number);
$row = mysqli_fetch_array($result);
return $row[$field];
}
function mysql_free_result($result)
{
return mysqli_free_result($result);
}
function mysql_data_seek($result, $offset)
{
return mysqli_data_seek($result, $offset);
}
}
==================================================
--
С уважением, Александр Ерещенко.
Подробная информация о списке рассылки Sysadmins