2009-08-02 8 views
1

J'ai recherché cette erreur, et il semble que le problème commun est causé par ne pas mettre include() ou require() de AVANT session_start().php "script a essayé d'exécuter une méthode ou accéder à une propriété d'un objet incomplet" erreur

Cependant, ce n'est pas le cas pour moi.

Je reçois l'erreur suivante:

Erreur fatale: la demande de Zend_Http_Client() [zend-http-client.request]: Le script a essayé d'exécuter une méthode ou accéder à une propriété d'un objet incomplet. S'il vous plaît veiller à ce que la définition de classe " Zend_Http_Client_Adapter_Socket " de l'objet que vous essayez d'opérer a été chargé avant unserialize() est appelée ou fournir une fonction __autoload() pour charger la définition de classe dans/home/content///*/*****/html/ZendGdata-1.8.4PL1/bibliothèque/Zend/Http/Client.php sur la ligne 865

Une idée pourquoi?

Voici les trois dossiers pertinents: login.php, members.php et functions.php ...

login.php:

$newIncludePath = array(); 
$newIncludePath[] = '../ZendGdata-1.8.4PL1/library'; 
$newIncludePath = implode($newIncludePath); 
set_include_path($newIncludePath); 

// load classes 
require_once 'Zend/Loader.php'; 
Zend_Loader::loadClass('Zend_Gdata'); 
Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); 
Zend_Loader::loadClass('Zend_Gdata_Calendar'); 
Zend_Loader::loadClass('Zend_Http_Client'); 
Zend_Loader::loadClass('Zend_Gdata_AuthSub'); 

session_start(); 


$serviceName = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; // predefined service name ('cl') for calendar 
$applicationName = 'yourCompany-yourAppName-v1'; 

// Create an authenticated HTTP client 
$httpClient = Zend_Gdata_ClientLogin::getHttpClient('*****@gmail.com', '*****', $serviceName, null, $applicationName); 
$client = new Zend_Gdata_Calendar($httpClient, $applicationName); // Create an instance of the Calendar service 

$_SESSION['gdataCal'] = $client; 

members.php:

$newIncludePath = array(); 
$newIncludePath[] = '../ZendGdata-1.8.4PL1/library'; 
$newIncludePath = implode($newIncludePath); 
set_include_path($newIncludePath); 

// load classes 
require_once 'Zend/Loader.php'; 
Zend_Loader::loadClass('Zend_Gdata'); 
Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); 
Zend_Loader::loadClass('Zend_Gdata_Calendar'); 
Zend_Loader::loadClass('Zend_Http_Client'); 
Zend_Loader::loadClass('Zend_Gdata_AuthSub'); 

session_start(); 

$g_url = add_gcal($_SESSION['gdataCal'], $_SESSION['title'].....etc.); 

functions.php:

<?php 

$newIncludePath = array(); 
$newIncludePath[] = '../ZendGdata-1.8.4PL1/library'; 
$newIncludePath = implode($newIncludePath); 
set_include_path($newIncludePath); 

// load classes 
require_once 'Zend/Loader.php'; 
Zend_Loader::loadClass('Zend_Gdata'); 
Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); 
Zend_Loader::loadClass('Zend_Gdata_Calendar'); 
Zend_Loader::loadClass('Zend_Http_Client'); 

session_start(); 

function add_gcal($gdataCal, $title....etc.){ 

try { 

    $newEvent = $gdataCal->newEventEntry(); 

    $newEvent->title = $gdataCal->newTitle($title); 
    $newEvent->where = array($gdataCal->newWhere($where)); 
    $newEvent->content = $gdataCal->newContent("$desc"); 

    $when = $gdataCal->newWhen(); 
    $when->startTime = $date; 
    $when->endTime = $date; 
    $newEvent->when = array($when); 

    $createdEvent = $gdataCal->insertEvent($newEvent); 
    return $createdEvent->id->text; 

    } catch (Zend_Gdata_App_Exception $e) { 
     return NULL; 
    } 

} 

Répondre

3

Vous obtenez ce message:

Please ensure that the class definition " Zend_Http_Client_Adapter_Socket " of the object you are trying to operate on was loaded before unserialize() gets called

Donc, je suppose que vous avez quelque chose en séance (ce qui signifie stocker sous une forme sérialisée) qui est une instance de Zend_Http_Client_Adapter_Socket

Ainsi, avant la session_start, vous devez charger cette classe, en utilisant, par exemple, quelque chose comme ceci:

Zend_Loader::loadClass('Zend_Http_Client_Adapter_Socket'); 

cela devrait résoudre ce problème ... Mais, comme Zend Framework a beaucoup de classes qui comptent sur chaque o utres, vous croiserez peut-être un autre ...


Une façon de se débarrasser de ces erreurs pour toujours serait d'utiliser le chargeur automatique de Zend Framework: au lieu des classes locading vous avec Zend_Loader::loadClass, vous pouvez simplement vous inscrire/activer la chargeur automatique, et il chargera automatiquement des classes pour vous, quand ils sont nécessaires.

de couse, qui aussi être fait avant l'appel à session_start:-)

Pour plus d'informations sur le chargeur automatique de ZF, vous pouvez jeter un oeil à this page of the manual.

+1

qui l'a réparé, merci! – littleK

+0

J'ai découvert que même changer '$ _SESSION' (sans appeler explicitement' session_start() ') avant de charger la classe provoquera ce comportement. – jray

Questions connexes