CruellaDeVille Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 Jeg holder på å lage et system hvor loginmodulen legger hele user-objektet mitt i en sessionvariabel. Jeg tror det går bra. Derimot - når jeg skal hente ut igjen data fra dette objektet skjærer det seg og jeg får feilmelding. Objekt User er blitt en incomplete_class, type slik: object(__PHP_Incomplete_Class)#1 (8) { ["__PHP_Incomplete_Class_Name"]=> string(4) "User" ["userid:private"]=> string(1) "7" ["username:private"]=> string(4) "sivh" ["password:private"]=> string(15) "skiftet_passord" ["firstname:private"]=> string(6) "elling" ["lastname:private"]=> string(6) "elling" ["email:private"]=> string(4) "elli" ["userlevel:private"]=> string(1) "1" } Jeg har forsøkt å google, men de kunne likegjerne ha skrevet på hebraisk. Jeg forstod ikke hva de forsøkte å fortelle meg. $user er serialized i sessionvariabelen $_SESSION['author']. Burde den ikke vært det? Lenke til kommentar
Runar0 Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 (endret) Vil tro at problemet oppstår når php laster inn session variablenen og unserializer dataene. Ettersom at bruker klassen din ikkje er lasta inn da så vil den lage ein incomplete class (på samme måte som det blir stdClass i php4). Prøv og serialize klassen en gang før du legger den inn i session variablene og så unserialize den før du bruker den seinare. Vist dette ikkje er mulig så går det kanskje å lage ein rask session handler som baserer seg på den som ligger der fra før og la den hente user klassen før du henter variabelene. Edit: Har ikkje brukt php5 så mykje men vil ikkje __autoload kunne laste inn user klassen når php internt laster inn session variablene? Endret 22. oktober 2007 av Runar0 Lenke til kommentar
Peter Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 (endret) http://www.php.net/serialize http://www.php.net/unserialize La inn et eks. her: http://pastie.textmate.org/private/hgirubnrgjk7g09gawx3q Resultat: MyClass Object ( [myVar:private] => hepp ) Endret 22. oktober 2007 av Nazgul Lenke til kommentar
CruellaDeVille Skrevet 22. oktober 2007 Forfatter Del Skrevet 22. oktober 2007 Jeg har forsåvidt løst problemet med __autoload, men da oppstår et nytt problem... jeg må ha en include_path... og siden jeg jobber mot et subdomene aner jeg ikke hva min document_root er (public_html for min bruker). Ikke vet jeg hvordan jeg skal finne det ut heller. Noen gode ideer? Lenke til kommentar
Peter Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 (endret) sjekk phpinfo() ? document_root endrer seg ikke med subdomene, men med php.ini (tror jeg) Antakelig er subdomenet ditt bare en mappe under document_root ett eller annet sted. dersom document_root er /www, så kan subdomenet ditt godt være /www/sub Endret 22. oktober 2007 av Nazgul Lenke til kommentar
CruellaDeVille Skrevet 22. oktober 2007 Forfatter Del Skrevet 22. oktober 2007 der står det ikke det jeg vil ha. Jeg vil ha noe slikt som Home/Stud4/sha015/public_html osv Jeg er litt usikker på om min autoload fungerer, for jeg må eksplisitt innhente User_class.php. Møkk! Lenke til kommentar
Peter Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 (endret) der står det ikke det jeg vil ha.Jeg vil ha noe slikt som Home/Stud4/sha015/public_html osv Jeg er litt usikker på om min autoload fungerer, for jeg må eksplisitt innhente User_class.php. Møkk! Hva med dirname( $_SERVER["SCRIPT_FILENAME"] ) ? Endret 22. oktober 2007 av Nazgul Lenke til kommentar
Runar0 Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 (endret) eventuelt bare <?php $i = '' echo $i ?> og se på feilmeldingen (forutsetter at feilmeldinger er aktivert selfølgling) Endret 22. oktober 2007 av Runar0 Lenke til kommentar
shaker Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 (endret) Dette burde vel funke? dirname( __FILE__ ); Edit: Det er vel forsåvidt det samme som Nazgul postet Endret 22. oktober 2007 av shaker Lenke til kommentar
CruellaDeVille Skrevet 22. oktober 2007 Forfatter Del Skrevet 22. oktober 2007 (endret) Her er min index.php. hvis noen kan se hvorfor __autoload ikke fungerer så blir jeg superhappy! for det ser ikke jeg <?php session_start(); $root =dirname(__FILE__); $delimiter = ":"; ini_set("include_path", ini_get("include_path") ."$delimiter$root/model/." ."$delimiter$root/controller/." ."$delimiter$root/dao/." ."$delimiter$root/smarty/core/libs/" // Her kan det settes inn flere mapper hvis det trengs ); // hvis __autoload hadde fungert hadde jeg vel ikke trengt disse? // Men det gjør jeg. require_once('Smarty.class.php'); require_once('abstract_controller.php'); require_once('config.php'); require_once('user_class.php'); # Opprette smarty-objekt $smarty = new Smarty(); $smarty->template_dir = 'view'; $smarty->compile_dir = 'smarty/compiled'; $smarty->cache_dir = 'smarty/cached'; $smarty->config_dir = 'smarty/configs'; # Slå sammen post og get $request_params = array_merge($_GET, $_POST, $_SESSION); # Finne kontroller eller default $page = isset($request_params["page"])? $request_params["page"] : "default"; $controller_class = "${page}_controller"; $controller_file = "controller/$controller_class.php"; if (file_exists($controller_file)) { require_once($controller_file); $controller = new $controller_class; $controller->prepare_model_and_view($request_params, $smarty); } else { $smarty->assign("page_title", "Template Error"); $smarty->assign("content_tpl", "error.tpl"); } $smarty->display("layout.tpl"); function __autoload($class_name) { require_once $class_name . '_class.php'; } ?> Endret 22. oktober 2007 av CruellaDeVille Lenke til kommentar
Peter Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 Uten å være sikker er det mulig du må definere __autoload i toppen av filen, og jeg tror den anbefalte versjoen å bruke egentlig er (selv om jeg synes hele autoload-opplegget muligens er litt sært): http://no2.php.net/manual/en/function.spl-autoload.php Lenke til kommentar
itsmebth Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 Du trenger ikke __autoload hvis du har session_start etter klassedefinisjonene. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå