php "скрипт пытался выполнить метод или получить доступ к свойству незавершенного объекта" ошибка - PullRequest
1 голос
/ 03 августа 2009

Я посмотрел эту ошибку, и похоже, что общая проблема вызвана тем, что не помещаются include () или require () перед Session_start ().

Однако, это не так для меня.

Я получаю следующую ошибку:

Неустранимая ошибка: Zend_Http_Client :: request () [zend-http-client.request]: скрипт пытался выполнить метод или получить доступ к свойству неполного объекта. Убедитесь, что определение класса "Zend_Http_Client_Adapter_Socket" объекта, над которым вы пытаетесь работать, было загружено до вызова unserialize () или предоставьте функцию __autoload () для загрузки определения класса в / home / content / / / * / ***** / html / ZendGdata-1.8.4PL1 / library / Zend / Http / Client.php в строке 865

Есть идеи, почему?

Вот три соответствующих файла: login.php, members.php и 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;
  }

}

1 Ответ

3 голосов
/ 03 августа 2009

Вы получаете это сообщение:

Пожалуйста, убедитесь, что класс определение "Zend_Http_Client_Adapter_Socket" из объект, которым вы пытаетесь управлять был загружен до отмены сериализации () вызывается

Итак, я полагаю, у вас есть что-то в сеансе (что означает сохранение в сериализованной форме), которое является экземпляром Zend_Http_Client_Adapter_Socket

Итак, перед session_start вы должны загрузить этот класс, используя, например, что-то вроде этого:

Zend_Loader::loadClass('Zend_Http_Client_Adapter_Socket');

Это должно решить эту проблему ... Но, поскольку Zend Framework имеет множество классов, которые полагаются друг на друга, вы можете столкнуться с другим ...


Чтобы навсегда избавиться от этих ошибок, можно использовать автозагрузчик Zend Framework: вместо того, чтобы самостоятельно находить классы с помощью Zend_Loader::loadClass, вы можете просто зарегистрировать / активировать автозагрузчик, и он автоматически загрузит классы для вас, когда они понадобятся. .

Конечно, это тоже нужно сделать до звонка на session_start : -)

Для получения дополнительной информации об автозагрузчике ZF, вы можете взглянуть на эту страницу руководства .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...