Переход с PHP 5.3 на 5.5 или 7.0

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
Elfer
Сообщения: 132
Зарегистрирован: 2012.06.07, 16:09
Откуда: Беларусь, Лида
Контактная информация:

Переход с PHP 5.3 на 5.5 или 7.0

Сообщение Elfer »

Приветствую форумчан. Использую Yii 1.1.17. Сегодня решил арендовать выделенный сервер и развернуть сайт на более новой версии PHP 5.5 или 7.0. До этого стояла версия 5.3. Как только меня версию PHP на сервере, сразу сайт перестаёт работать. Причем первая сразу ошибка - это коннект к БД:
CDbException
CDbConnection failed to open the DB connection.

Причем создал обычный файлик mysql.php и стандартными способами пытаюсь подключиться к БД и подключение проходит. Сталкивался ли кто с таким? Я думал фреймворк адаптирован для работы с версиями 5.5 или с 7.0. Видел даже темы в интернете, где обсуждали, что должно работать, только мелкие иногда косяки вылазят.
Приколы: юмор, анекдоты - Zasmeshi.Ru сайт на Yii, великие возможности фреймворка.
Аватара пользователя
Elfer
Сообщения: 132
Зарегистрирован: 2012.06.07, 16:09
Откуда: Беларусь, Лида
Контактная информация:

Re: Переход с PHP 5.3 на 5.5 или 7.0

Сообщение Elfer »

Хм, полез в логи - "runtime/application.log" и вижу такую ошибку:
[error] [exception.CDbException] could not find driver

Буду разбираться.
Приколы: юмор, анекдоты - Zasmeshi.Ru сайт на Yii, великие возможности фреймворка.
Аватара пользователя
Elfer
Сообщения: 132
Зарегистрирован: 2012.06.07, 16:09
Откуда: Беларусь, Лида
Контактная информация:

Re: Переход с PHP 5.3 на 5.5 или 7.0

Сообщение Elfer »

Все пишут в интернете, что эта проблема в отсутствии pdo_mysql. Глянул phpinfo() - есть там PDO.
Хм, сравнил phpinfo 5.3 и 5.5 и увидел, что у 5.5 отключен драйвер sqlite. Включил и сайт заработал.
Приколы: юмор, анекдоты - Zasmeshi.Ru сайт на Yii, великие возможности фреймворка.
Аватара пользователя
Elfer
Сообщения: 132
Зарегистрирован: 2012.06.07, 16:09
Откуда: Беларусь, Лида
Контактная информация:

Re: Переход с PHP 5.3 на 5.5 или 7.0

Сообщение Elfer »

Перешел на PHP 7.0. Работает супер-быстро сайт. В раз 5 быстрее, чем на PHP 5.3. Пока столкнулся с первой проблемой при переходе на PHP 7.0:
CHttpException исключение не выполняется скриптом.
Приколы: юмор, анекдоты - Zasmeshi.Ru сайт на Yii, великие возможности фреймворка.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Переход с PHP 5.3 на 5.5 или 7.0

Сообщение samdark »

CHttpException исключение не выполняется скриптом.
Что значит "исключение не выполняется скриптом"?
Аватара пользователя
Elfer
Сообщения: 132
Зарегистрирован: 2012.06.07, 16:09
Откуда: Беларусь, Лида
Контактная информация:

Re: Переход с PHP 5.3 на 5.5 или 7.0

Сообщение Elfer »

Пардон, неправильно трактовал ошибку. CHttpException нормально выполняется на PHP 7.0.
Приколы: юмор, анекдоты - Zasmeshi.Ru сайт на Yii, великие возможности фреймворка.
Аватара пользователя
Elfer
Сообщения: 132
Зарегистрирован: 2012.06.07, 16:09
Откуда: Беларусь, Лида
Контактная информация:

Re: Переход с PHP 5.3 на 5.5 или 7.0

Сообщение Elfer »

Была проблема работы фреймворка с БД. Для некоторых страниц работало без проблем, а для некоторых выдавало ошибку:

PHP Fatal error: Allowed memory size of 1363148800 bytes exhausted (tried to allocate 1431064416 bytes) in .../yii_1.1.17/framework/db/CDbCommand.php on line 508

Сколько памяти я не выставлял для скрипта, всё равно заканчивалось нехваткой памяти. Но к сожалению требуемых 1.5 Гб я выставить не мог, ограничен был. Но и это был бы абсурд столько выделять памяти для простейшей процедуры.

Привел сюда строки кода из фреймворка из файла CDbCommand.php. 508 строка здесь отображается третьей:

Код: Выделить всё

$this->prepare();
if($params===array())
    $this->_statement->execute();
else
    $this->_statement->execute($params); 
Проблема решилась, установив когда я установил параметр 'emulatePrepare' => true в конфиге фреймворка для компонента 'db'. Интуция подсказала, что нужно было настраивать конфиг db, а также кеширование структуры таблиц БД. Для чего этот параметр emulatePrepare я так и не понял, но в мануале указано:

Defaults to false, meaning PDO will use the native prepare support if available. For some databases (such as MySQL), this may need to be set true so that PDO can emulate the prepare support to bypass the buggy native prepare support. Note, this property is only effective for PHP 5.1.3 or above. The default value is null, which will not change the ATTR_EMULATE_PREPARES value of PDO.

Я так понимаю, для серверов, у которых PHP 5.1.3 и выше, этот параметр нужно устанавливать в true. Странно, но во всех проектах до этого ни разу не устанавливал этот параметр. PHP версия была 5.3, проектов было сделано много. Но вот впервые столкнулся с такой проблемой и ее простым решением.
Приколы: юмор, анекдоты - Zasmeshi.Ru сайт на Yii, великие возможности фреймворка.
Ответить