Сессия PHP с неполным объектом

#
#------------------------------------------------------------------------------
# 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
36
задан MackDaddy 28 June 2009 в 20:48
поделиться

4 ответа

Отсутствует сериализация / десериализация вашего класса шаблона.

Взгляните на рабочий пример , который я дал по другому вашему вопросу.

Для Например, вы, вероятно, захотите это:

<?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).

68
ответ дан 27 November 2019 в 05:31
поделиться

Насколько велики объекты, которые вы помещаете в сеанс? Однажды я получил аналогичную ошибку, когда мои объекты были больше, чем пространство, выделенное для сеанса в файле php.ini. Если бы объект был слишком большим, он вернулся бы как пустой, хотя этого быть не должно.

После этого я просто начал сохранять PK объекта в сеансе и искать его, если он мне нужен, вместо того, чтобы носить с собой сам объект.

Вы также можете увеличить размер сеанса в INI-файле и посмотреть, имеет ли это значение.

2
ответ дан 27 November 2019 в 05:31
поделиться

Убедитесь, что определение класса « 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();

2
ответ дан 27 November 2019 в 05:31
поделиться

Я тоже пытался хранить объекты в переменной сеанса. и да, я испытал ту же проблему, что и MackDaddy. и это решается перемещением включения класса в первое.

так ..

require_once("class.someclass.php");
require_once("display.php");

сработало

но не ...

require_once("display.php");
require_once("class.someclass.php");

хмм ... интересно, что рационального? а что, если у нас есть 2 или более разных объекта? какой из них идет первым?

1
ответ дан 27 November 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: