[résolu]transemettre un objet par session

Eléphant du PHP | 83 Messages

02 déc. 2011, 21:05

Bonsoir,

j'ai un problème de transmission d'objet par session que je n'ai pu résoudre par une recherche. Donc je l'expose ici : je lis un fichier Excel avec phpExcel ; ça me retourne un objet que je souhaite transmettre à la page qui va l'exploiter, et c'est là que ça coince.

Mon code :
test_xls_archive.php :
 <?php 

include ('upload.html' );
include ('lire_xls.php' );
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="content-type">
  <title></title>
</head>
<body>

<a href="analyse_xls_archive.php">afficher</a>
</body>
</html> 
lire_xls.php :
  <?php  
   session_start();

   if (isset($_SESSION['nom_fichier'])) {$File_name=$_SESSION['nom_fichier'];

   $include = "PHPExcel/Classes/PHPExcel/IOFactory.php";

   if (is_file($include))   include_once ($include);
   else                     echo "Fichier <b>".$include."</b> inaccessible <br>\n";

   $objPHPExcel = PHPExcel_IOFactory::load($File_name);
   $_SESSION['obj_xls']=serialize($objPHPExcel);
   }
?>
et analyse_xls_archive.php :
  <?php 
session_start();
if (isset($_SESSION['obj_xls'])) {$objPHPExcel=unserialize($_SESSION['obj_xls']);
  foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
...
et l'erreur :
Notice: Undefined variable: objPHPExcel in /homez.309/villardd/www/xls/analyse_xls_archive.php on line 4

Fatal error: Call to a member function getWorksheetIterator() on a non-object in /homez.309/villardd/www/xls/analyse_xls_archive.php on line 4
comment corriger ça ?
Modifié en dernier par laurents le 04 déc. 2011, 00:28, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

02 déc. 2011, 22:42

Sur la page où tu deserialize il faut que tu ais inclus le fichier contenant la class.

Eléphant du PHP | 83 Messages

02 déc. 2011, 23:09

J'ai inclus ce fichier sur la page :
//session_start();
   $include = "PHPExcel/Classes/PHPExcel/IOFactory.php";

   if (is_file($include))   include_once ($include);
   else                     echo "Fichier <b>".$include."</b> inaccessible <br>\n";
if (isset($_SESSION['obj_xls'])) {$objPHPExcel=unserialize($_SESSION['obj_xls']);else echo "objet existe pas<br>";
  foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
(et commenté session_start() car c'était déjà fait avant), mais il me reste une fatal error :
Fatal error: main() [<a href='function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "PHPExcel" 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 /homez.309/villardd/www/xls/analyse_xls_archive.php on line 4
:cry: et la ligne 4 mentionnée est vide :?:

ViPHP
xTG
ViPHP | 7331 Messages

03 déc. 2011, 11:05

Si tu enlèves le session_start() comment veux-tu accéder à $_SESSION...
Et ton problème provient du fait que la class doit être inclue avant le session_start().

Eléphant du PHP | 83 Messages

04 déc. 2011, 00:27

Si tu enlèves le session_start() comment veux-tu accéder à $_SESSION...
Je l'avais fait par habitude avec les include (si fait ds l'un des fichiers, il ne faut pas recommencer...), mais j'avais pas réalisé que pour un lien, c'est pas du tout pareil...

Sinon, mtn, c'est nickel : merci bcp =D>