Non funziona __autoload con le sessioni ...

Lapo

Nuovo Utente
21 Feb 2012
11
0
0
[RISOLTO] Non funziona __autoload con le sessioni ...

Salve a tutti!

Ho un problema con __autoload ...

Dentro l'admin [nell'header] ho inserito questo:

Codice:
//Autoload delle classi 
function __autoload($class_name)
 { 
 require_once ('classes/'.$class_name.'.php'); 
 }   

// Controllo l'utente loggato - questo deve essere presente in tutte le pagine dell'admin 
include("../login/check.php"); ......

$utenti=Utenti::getUtenti();

Non funziona!

Se sostituisco la funzione __autoload con:

require_once ('../classes/Utenti.php');

funziona! (quindi direi che non è un problema di percorsi).

Mi sono accorto che se elimino

include("../login/check.php");

funziona! [il problema è che non lo posso eliminare è il controllo sul login]

Per completezza riporto il file check.php:


Codice:
<?php 
session_start();   
if (!$_SESSION["nome"])  
 { 
 $msg= 6; 
 $destinazione = "../index.php?msg=".$msg; 
 echo '<script language=javascript>document.location.href="'.$destinazione.'"</script>'; 
 } 

//controllo sul tempo di inattività dell'utente 
 if ($_SESSION['secondi_inattivo']) 
 { 
 $secondi_inattivo=$_SESSION['secondi_inattivo']; 
 $start_session=$_SESSION['start_session']; 
 $adesso= time(); 
 $differenza=$adesso-$start_session;
 if ($differenza >$secondi_inattivo) 
  { 
  $msg= 5; 
  $destinazione = "../index.php?msg=".$msg; 
  echo '<script language=javascript>document.location.href="'.$destinazione.'"</script>'; 
  } 
 else 
  { 
  //si azzera il tempo di inattività a partire dalla richiesta appena eseguita 
  $_SESSION["start_session"] = $adesso; 
  } 
 } 
?>

Qualcuno sa aiutarmi? Credo sia un problema tra __autoload e sessioni ......

Grazie!
 
Ultima modifica:
PHP:
<?
php session_start();
dovrebbe essere
PHP:
<?php 
session_start();
è solo un errore di copia e incolla?
 
Grazie per la risposta!

Ho già guardato le guide ed è tutto corretto.
Il problema è relativo al conflitto che si viene a creare con le sessioni.
Senza l'include del login la funzione è corretta e funziona .... il problema è che non posso eliminare l'include con relativi controlli ...
 
Non trova la classe:
Fatal error: Class 'Utenti' not found in /Applications/MAMP/htdocs/filarete/utenti.php on line 5

la linea 5 è dove dichiaro la classe Utenti.

utenti.php:
Codice:
<?php
include("header/header.php");  
//require_once ('../classes/Utenti.php');
	
	$utenti=Utenti::getUtenti();

	$smarty = new Smarty_Ob;
	$smarty->assign('utenti', $utenti);
	$smarty->display('utenti.tpl');
?>

nell'header è incluso il login oltre alla grafica dell'header.

Ho già provato e l'unica cosa che gli da noia dentro l'header è:
Codice:
// Controllo l'utente loggato - questo deve essere presente in tutte le pagine dell'admin
include("../login/check.php");

...
 
ciao
visto cosi sembrerebbe che non trovi la classe nel file utenti.php, sei sicuro dei percorsi? e di avercela messa? non hai fatto un errore nei nomi (es.) uteti?
poi (non sono molto esperto di classi), ma una classe non dovrebbe essere istanziata prima di usarla? i nomi delle classi sono casesensitive o no?

$pinco = new Utenti(); o
$pinco = new utenti();

poi, l'unica cosa che vedo (almeno io) che ha a che fare con i percorsi o simile è la variabile
$destinazione
non è che la usi anche dopo quindi ti entra in conflitto?
 
come puoi veder alla riga 3 del file utenti.php c'è un commento:

Codice:
//require_once ('../classes/Utenti.php');

se lo decommento funziona tutto, il che dimostra che i percorsi sono corretti e la classe viene istanziata correttamente.

Il problema è sicuramente nella funzione autoload che funziona se non includo

Codice:
include("../login/check.php");

Anche questo dimostra che autoload funziona correttamente .. entra in conflitto con i controlli di sessione.
Non riesco a trovare nemmeno alcun commento via web sul problema

ci sto perdendo la testa ... :-)
 
[risolto]

Sembra che il problema sia un baco nelle versioni precedenti alla versione PHP 5.3.4 dove è stato risolto!

Per maggiori informazioni:
https://bugs.php.net/bug.php?id=53141

Per quanto mi riguarda ho sostituito la funzione __autoload con spl_autoload_register come consiglia anche il manuale

function __autoload_libraries($class){
include_once ('../classes/'.$class.'.php');
}

spl_autoload_register('__autoload_libraries');


Grazie comunque dell'aiuto!!!
A presto
Lapo
 
ciao
scusate la mia gnuranza, ma aveo visto sul manuale php qello che ha scritto alex, ma non manca una parentesi chiusa? era così anche sul manuale
 

Discussioni simili