Приветствую форумчан. Использую 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. Видел даже темы в интернете, где обсуждали, что должно работать, только мелкие иногда косяки вылазят.
Переход с PHP 5.3 на 5.5 или 7.0
- Elfer
- Сообщения: 132
- Зарегистрирован: 2012.06.07, 16:09
- Откуда: Беларусь, Лида
- Контактная информация:
Переход с PHP 5.3 на 5.5 или 7.0
Приколы: юмор, анекдоты - Zasmeshi.Ru сайт на Yii, великие возможности фреймворка.
- Elfer
- Сообщения: 132
- Зарегистрирован: 2012.06.07, 16:09
- Откуда: Беларусь, Лида
- Контактная информация:
Re: Переход с PHP 5.3 на 5.5 или 7.0
Хм, полез в логи - "runtime/application.log" и вижу такую ошибку:
[error] [exception.CDbException] could not find driver
Буду разбираться.
[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
Все пишут в интернете, что эта проблема в отсутствии pdo_mysql. Глянул phpinfo() - есть там PDO.
Хм, сравнил phpinfo 5.3 и 5.5 и увидел, что у 5.5 отключен драйвер sqlite. Включил и сайт заработал.
Хм, сравнил 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
Перешел на PHP 7.0. Работает супер-быстро сайт. В раз 5 быстрее, чем на PHP 5.3. Пока столкнулся с первой проблемой при переходе на PHP 7.0:
CHttpException исключение не выполняется скриптом.
CHttpException исключение не выполняется скриптом.
Приколы: юмор, анекдоты - Zasmeshi.Ru сайт на Yii, великие возможности фреймворка.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Переход с PHP 5.3 на 5.5 или 7.0
Что значит "исключение не выполняется скриптом"?CHttpException исключение не выполняется скриптом.
Нравится Yii? Давайте сделаем его лучше!.
- Elfer
- Сообщения: 132
- Зарегистрирован: 2012.06.07, 16:09
- Откуда: Беларусь, Лида
- Контактная информация:
Re: Переход с PHP 5.3 на 5.5 или 7.0
Пардон, неправильно трактовал ошибку. CHttpException нормально выполняется на PHP 7.0.
Приколы: юмор, анекдоты - Zasmeshi.Ru сайт на Yii, великие возможности фреймворка.
- Elfer
- Сообщения: 132
- Зарегистрирован: 2012.06.07, 16:09
- Откуда: Беларусь, Лида
- Контактная информация:
Re: Переход с PHP 5.3 на 5.5 или 7.0
Была проблема работы фреймворка с БД. Для некоторых страниц работало без проблем, а для некоторых выдавало ошибку:
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 строка здесь отображается третьей:
Проблема решилась, установив когда я установил параметр '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, проектов было сделано много. Но вот впервые столкнулся с такой проблемой и ее простым решением.
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);
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, великие возможности фреймворка.