AMF PHP session_start et chargement des définitions de classe

Petit nouveau ! | 6 Messages

22 avr. 2009, 08:53

Bonjour, j'utilise AMFPHP pour mes echanges flash->php, dans mes variables de session je stock mes instance de classe par exemple mysql et user.
Le probleme est que ej pense que AMFPHP fait un session_start avant d'éxécuter mes script, donc je ne peux pas lui charger les définitions de classe avant le session_start,j'ai essayé avec les fonction serialize et unserialize mais sans succes.


Ma classe Main

Code : Tout sélectionner

<?php function __autoload($class) { $CLASS=strtolower($class); require_once "/".$CLASS."/".$class.".php"; session_start(); class Main { function Main() { } function getContact() { $mysql=$_SESSION["mysql"]; settype($mysql,"object"); $res=$mysql->GetContact($_SESSION["myUser"]->Id); echo "mysql ".$mysql; } } ?>
ma classe mysql

Code : Tout sélectionner

<?php require_once("/variable/Variable.php"); class Mysql { function Mysql() { } function Connexion() { $server = "localhost"; $basededonnees = "111" ; $utilisateur = "111" ; $mdp = "" ; $connection = mysql_pconnect($server,$utilisateur, $mdp)or die ("erreur de connexion"); mysql_select_db($basededonnees, $connection) ; return $connection ; } function GetUser($Id) { $ID=new Variable($Id); $Id=$ID->getVar(); $requete = "SELECT id_utilisateur as Id, nom_utilisateur as nom, prenom_utilisateur as prenom, email_utilisateur as email, telephone_utilisateur as telephone, gsm_utilisateur as gsm FROM utilisateur WHERE id_utilisateur = '$Id' "; $res= mysql_query($requete,$this->Connexion() )OR die(mysql_error()); return $res; }
Le résult de AMFPHP

Code : Tout sélectionner

(Object)#0 message = "faultCode:INVALID_AMF_MESSAGE faultString:'Invalid AMF message' faultDetail:' Fatal error: Main::getContact(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Mysql" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in C:\vnd\php\services\vnd\web\Main.php on line 14 '" name = "Error" rootCause = (null)
Quand j'execute mes script sans AMFPHP j'ai aucun probleme au niveau des chargement de mes définition de classe et mes methodes sont accéssiblent

ViPHP
ViPHP | 4674 Messages

23 avr. 2009, 10:36

Hey :),

Je pense qu'il faudrait déjà commencer par revoir ta fonction d'auto-chargement. Déclarer une classe dans une fonction, ce n'est pas correct. Preuve :

Code : Tout sélectionner

$ php -a Interactive mode enabled <?php function f ( ) { class C ( ) { Parse error: syntax error, unexpected '(', expecting '{' in /Phpfrance/Hywan/- on line 5
De plus, tu codes en PHP 4. Sache que c'est dépassé. Il faut maintenant utiliser PHP 5. Le constructeur de la classe est donc la méthode magique __construct et non plus une méthode qui porte le même nom que la classe (à l'instar de Java).

Au passage, pas sûr que de transtyper un objet sérialisé en objet le désérialise. Je verrais plutôt :
$mysql = unserialize($_SESSION['mysql']);
plutôt que l'utilisation de settype().

Bref, ça me paraît un peu brouillon tout ça. Essaye de poser clairement ton problème, de nettoyer un peu ton code, en bref : de prendre un peu de recul, et tu y verras plus clair :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).