#
#------------------------------------------------------------------------------
# run a command on failure exit with message
# doPrintHelp: doRunCmdOrExit "$cmd"
# call by:
# set -e ; doRunCmdOrExit "$cmd" ; set +e
#------------------------------------------------------------------------------
doRunCmdOrExit(){
cmd="$@" ;
doLog "DEBUG running cmd or exit: \"$cmd\""
msg=$($cmd 2>&1)
export exit_code=$?
# if occured during the execution exit with error
error_msg="Failed to run the command:
\"$cmd\" with the output:
\"$msg\" !!!"
if [ $exit_code -ne 0 ] ; then
doLog "ERROR $msg"
doLog "FATAL $msg"
doExit "$exit_code" "$error_msg"
else
#if no errors occured just log the message
doLog "DEBUG : cmdoutput : \"$msg\""
doLog "INFO $msg"
fi
}
#eof func doRunCmdOrExit
Отсутствует сериализация / десериализация вашего класса шаблона.
Взгляните на рабочий пример , который я дал по другому вашему вопросу.
Для Например, вы, вероятно, захотите это:
<?php
$_SESSION['template'] = serialize($template);
?>
и
<?php
$template = unserialize($_SESSION['template']);
?>
чтение вашего комментария о перемещении его наверх дает одну подсказку.
Автоматическая сериализация / десериализация происходит, когда вы вызываете session_start ()
.
Это означает, что порядок, в котором вы включаете файлы и вызываете session_start ()
, очень важен.
Например:
Это было бы неправильно:
<?php
session_start();
include 'inc/template.class.php';
?>
Хотя это было бы правильно:
<?php
include 'inc/template.class.php';
session_start();
?>
Теперь я вижу в вашем примере, что он находится в ПРАВИЛЬНОМ порядке, но я также заметил, что вы делаете много других включений, прежде чем включать template.class.php
Возможно ли, что один из них включает (возможно, Prep.php или header.class.php) тоже вызывает start_session ()
?
Если да, то это была ваша проблема ( session_start ()
вызывается перед вашим template.class.php).
Насколько велики объекты, которые вы помещаете в сеанс? Однажды я получил аналогичную ошибку, когда мои объекты были больше, чем пространство, выделенное для сеанса в файле php.ini. Если бы объект был слишком большим, он вернулся бы как пустой, хотя этого быть не должно.
После этого я просто начал сохранять PK объекта в сеансе и искать его, если он мне нужен, вместо того, чтобы носить с собой сам объект.
Вы также можете увеличить размер сеанса в INI-файле и посмотреть, имеет ли это значение.
Убедитесь, что определение класса « Template » объекта, с которым вы пытаетесь работать, было загружено до ...I Предполагается, что
include 'inc/template.class.php';
должен загрузить определение класса Template? <?php
require 'inc/prep.php';
require 'inc/header.class.php';
require 'inc/item.class.php';
require 'inc/template.class.php';
require 'inc/formhelper.class.php';
require 'inc/formvalidator.class.php';
require_once( 'inc/config/config.php' ) ;
require_once( 'inc/DBE.class.php' ) ;
require_once( 'inc/GenFuncs.php' ) ;
require_once( 'inc/Search.class.php' ) ;
if ( !class_exists('Template') ) {
die('No. Those include/requires did not define the class "Template"');
}
session_start();
Я тоже пытался хранить объекты в переменной сеанса. и да, я испытал ту же проблему, что и MackDaddy. и это решается перемещением включения класса в первое.
так ..
require_once("class.someclass.php");
require_once("display.php");
сработало
но не ...
require_once("display.php");
require_once("class.someclass.php");
хмм ... интересно, что рационального? а что, если у нас есть 2 или более разных объекта? какой из них идет первым?