Resulta que trabajando en la construccion de una web, en quise modelar entre otras cosas una clase con la cual crear un objeto que fuera llevando actualizados datos de mi interés, comencé a trabajar y como soy nuevo en PHP, descargé manuales e instalé mi servidor web, con "todo", el paquete xammp y eclipse para trabajar con PHP. En este proyecto creé un index.php con este código:
Cita:
el fichero de las clases: classes.inc:<?php
include 'classes.inc';
//$GLOBALS['system']-> begin();
$_SESSION['system']->begin();
//$_SESSION['system']->goAHead();
//$system->begin();
//echo '<a href= "fail.php">anja!</a>'
?>
include 'classes.inc';
//$GLOBALS['system']-> begin();
$_SESSION['system']->begin();
//$_SESSION['system']->goAHead();
//$system->begin();
//echo '<a href= "fail.php">anja!</a>'
?>
Cita:
y otro fihero al que se remite si tiene error: fail.php:<?php
define('_MYSQLHOST', 'localhost:3306'); //el servidor MySQL que está aquí en mi máquina
define('_MYSQLUSER', 'root');
define('_MYSQLPASSWORD', '');
define('_DATABASE', 'basedatos');
class _User
{
}
class _System
{
var $connection;
var $fail= 0;
var $fowardPage= 'index.php';
/*function storeData()
{
$store= serialize($this);
$file= fopen('system.str', 'a');
fwrite($file, $store);
fclose($file);
}
function loadData()
{
$load= implode('', @file('system.str'));
$this= unserialize($load);
}*/
function begin()
{
$this->connection= mysql_connect(_MYSQLHOST, _MYSQLUSER, _MYSQLPASSWORD);
if ($this->connection)
{
if (mysql_select_db(_DATABASE, $this->connection))
{
$temporalQuery= mysql_query('select isPageInLine from tool', $this->connection);
$temporalArray= mysql_fetch_array($temporalQuery);
if ($temporalArray[0])
{
header('Location: initial.php');
}
else
{
$this->fail= 100;//Este es el numero del error de la pagina fuera de linea
header('Location: fail.php');
}
}
else
{
$this->fail= 99;//Este es el numero del error de que no se pudo por alguna razon acceder a la base de datos
header('Location: fail.php');
}
}
else
{
$this->fail= mysql_errno($this->connection);
header('Location: fail.php');
}
}
function end()
{
}
function reasonOfFail()
{
//switch ()
return $this->fail;
}
function connect()
{
}
function disconnect()
{
}
}
//$GLOBALS['system']= new _System();
if (!isset($_SESSION['system']))
{
session_start();
$_SESSION['system']= new _System();
}
//$system= new _System;
?>
define('_MYSQLHOST', 'localhost:3306'); //el servidor MySQL que está aquí en mi máquina
define('_MYSQLUSER', 'root');
define('_MYSQLPASSWORD', '');
define('_DATABASE', 'basedatos');
class _User
{
}
class _System
{
var $connection;
var $fail= 0;
var $fowardPage= 'index.php';
/*function storeData()
{
$store= serialize($this);
$file= fopen('system.str', 'a');
fwrite($file, $store);
fclose($file);
}
function loadData()
{
$load= implode('', @file('system.str'));
$this= unserialize($load);
}*/
function begin()
{
$this->connection= mysql_connect(_MYSQLHOST, _MYSQLUSER, _MYSQLPASSWORD);
if ($this->connection)
{
if (mysql_select_db(_DATABASE, $this->connection))
{
$temporalQuery= mysql_query('select isPageInLine from tool', $this->connection);
$temporalArray= mysql_fetch_array($temporalQuery);
if ($temporalArray[0])
{
header('Location: initial.php');
}
else
{
$this->fail= 100;//Este es el numero del error de la pagina fuera de linea
header('Location: fail.php');
}
}
else
{
$this->fail= 99;//Este es el numero del error de que no se pudo por alguna razon acceder a la base de datos
header('Location: fail.php');
}
}
else
{
$this->fail= mysql_errno($this->connection);
header('Location: fail.php');
}
}
function end()
{
}
function reasonOfFail()
{
//switch ()
return $this->fail;
}
function connect()
{
}
function disconnect()
{
}
}
//$GLOBALS['system']= new _System();
if (!isset($_SESSION['system']))
{
session_start();
$_SESSION['system']= new _System();
}
//$system= new _System;
?>
Cita:
faltaría el initial.php pero no interesa porque en realidad el objeto (system instancia de la clase _System) que serialicé o sea metí en la matriz $_SESSION cuando por ejemplo quiero comprobar que el control de errores funciona bien y cambio por ejemplo el nombre de la base de datos, el objeto en la matriz ($_SESSION['system']) toma los valores debidos hasta que redirecciona con header a la pag fail.php y los pone todos (o sea los atributos de system) a su estado inicial cuando no hay redireccionamiento, porque anulo yo mismo la llamada a header pues en ma caperta c:\xampp\temp las sessiones esos ficheritos temporales, aletorios y serializados toman los valores que quiero, mi atributo $fail toma el valor 99 que debería, pero cuando redirecciono nuevamente toma cero, porque en el fichero de session correspondiente el objeto se escribe de nuevo.<?php
include 'classes.inc';
//var_dump($GLOBALS['system']);
echo $_SESSION['system']->reasonOfFail();
//echo $system->fail;
?>
include 'classes.inc';
//var_dump($GLOBALS['system']);
echo $_SESSION['system']->reasonOfFail();
//echo $system->fail;
?>
He probado muchas cosas, he probado a cambiar header por un vínculo de HTML y lo mismo; revisé mi php.ini para ver si el valor de register_globals está en en off y mirar los valores de session_save_path y todo bien, unico que funciona es serializar a la antigua y meter en un fichero, pero eso no me sirve ya que con un sistema multiusuarios no hay manera . A lo mejor es que he pasado por alto algunas cosas y no me doy cuenta, como soy novato pero creame por investigar y estudiar no ha sido, en mi codigo quedan restos de las tantas y tantas pruebas de todo lo posible. De ante manos disculpen las molestias y seguro que con Uds resuelvo, no en valde son el mejor foro de ayuda a la programación de la WEB
Saludos