Добрый день.
Столкнулись с проблемой после обновления с PHP 5.2 до PHP 5.3.28.
Сейчас имеем: apache22, php5.3.
В логах:
PHP Fatal error: Class 'DB_Result' not found in /www/site/class/class.DB.php on line 224
Содержимое /www/site/class/class.DB.php:
<?php
final class DB_Result {
private $_result;
public function __construct($result) {
$this->_result = $result;
}
........
}
final class DB {
private $_mysqli;
private $_cache;
private $_prefix;
private function __clone() {
}
........
public function Store_Result() {
if ($result = $this->_mysqli->store_result()) {
[b]return new DB_Result($result);[/b]
}
return false;
}
........
}
Насколько я понял, в файле class.DB.php объявляются два класса: DB_Result и DB, ошибка возникает при попытке вызова (я не программист. могу неверно выразиться ))) класса DB_Result из DB.
Прочел в сети, что в PHP 5.3 перешли к схеме "один файл-один класс", отсюда вопрос: как правильно модифицировать код?
К сожалению откатится на PHP 5.2 нет возможности, а в программировании я не достаточно компетентен, чтобы решить самостоятельно данную проблему.
Требуется помощь специалистов!
SlavaFr
12.08.2014 - 14:17
Если DB_Result находится в файле /www/site/class/class.DB.php, то я не знаю как могла появится такая ошибка.
_____________
↓↓↓↓↓↓↓↓↓↓ответ может быть здесьили в mysql_error();
Игорь_Vasinsky
12.08.2014 - 14:38
include() или __autoload() ?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
разделил классы по разным файлам class.DB.php, class.DB_Result.php, в class.DB.php добавил в начало include ('class.DB_Result.php'); ошибок в логе нет, но и скрипт не работает.
так же поменял private $_result; на public $_result;
P.S. Прочел что по namespace-ам можно разделить в одном файле. не не уверен в последствиях, т.к. не до конца понимаю механизм в масштабах всего сайта.
Игорь_Vasinsky
12.08.2014 - 22:25
ну подключи все классы в нужном файле
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Сделано все по предыдущему сообщению, заметил такую закономерность: после перегрузки апача скрипт отрабатывает, запускает в админку. но следующий клик по любой ссылке выкидывает на страницу ввода пароля и больше не пускает, насколько понимаю проблема в недоступности какой-то переменной, но какой именно не пойму ...
Нашел в коде функцию _autoload($class), получается классы инклудятся автоматически, удалил мою строку подключения, действительно работает так же (только после перезагрузки апача).
Игорь_Vasinsky
13.08.2014 - 07:29
Цитата |
только после перезагрузки апача |
да не))) рестарт не нужен был для этого))
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Я в смысле, что без рестарта не пускает в админку, ошибок в логах нет.
Если рестартану апача, то входит, но при первом же переходе на любую страницу вываливается на ввод пароля и уже не пусткает, пока не перегружу апач.
По всему понятно, что проблема с сессиями, но в чем именно не пойму ...
Обратил внимание на присутствие в форме ввода пароля галки "Сохранить сессию", если её поставить то не выкидывает, похоже какие-то костыли на уровне разработки ставили )))
P.S. Как оказалось все очень банально, просто раскидать нужно было классы по файлам, ну и кому-то инклуд может понадобится, у меня так автоинклудер сам все подключил!
Тема закрыта, спасибо Игорь_Vasinsky!
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.