कोडइग्निटर घातक त्रुटि: अपरिभाषित फ़ंक्शन पर कॉल करें

मैं CodeIgniter का उपयोग कर रहा हूँ। मैं Google ड्राइव पर अपलोड फ़ाइल के लिए लाइब्रेरी का पुन: उपयोग कर रहा हूं। अब मुझे त्रुटि का सामना करना पड़ रहा है।

घातक त्रुटि: अपरिभाषित फ़ंक्शन को कॉल करेंलोड GoogleDriveFile() में   डी: \ XAMPP \ htdocs \ butfix \ ब्रेन-टीज़र-उत्सव \ आवेदन \ नियंत्रकों \ blabla.php   लाइन 21

पर

कॉल स्टैक

Time    Memory  Function    Location

1   0.0499  146680     {main}( )    ..\index.php:0
2   0.0916  183128     require_once( 'D:\xampp\htdocs\butfix\Brain-Teaser-Fest\system\core\CodeIgniter.php' )   ..\index.php:202
3   1.2976  3225664    call_user_func_array ( ) ..\CodeIgniter.php:359
4   1.2976  3225712    Blabla->index( ) ..\CodeIgniter.php:359

अब मेरा नियंत्रक वर्ग है: blabla.php

<?php

if (!defined('BASEPATH')) {
    exit('No direct script access allowed');
}

class Blabla extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->library('MY_DriveServiceHelper');
        $this->load->helper('file');
    }

    public function index() {

        echo "Welcome to Bulls' warmed leavings";

        $path = "butfix" . DIRECTORY_SEPARATOR . "bookstore" . DIRECTORY_SEPARATOR . "filesystem" . DIRECTORY_SEPARATOR . "source" . DIRECTORY_SEPARATOR . "original.jpg";

        upLoadGoogleDriveFile($path);
    }

}

?>

और मेरी लाइब्रेरी कक्षा है: MY_DriveServiceHelper.php

<?php

if (!defined('BASEPATH')) {
    exit('No direct script access allowed');
}

require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';

class MY_DriveServiceHelper {

    const BACKUP_FOLDER = 'PHPBackups';
    const SHARE_WITH_GOOGLE_EMAIL = '[email protected]';
    const CLIENT_ID = '111111.apps.googleusercontent.com';
    const SERVICE_ACCOUNT_NAME = '[email protected]';
    const KEY_PATH = "asdf-privatekey.p12";

    protected $scope = array('https://www.googleapis.com/auth/drive');
    private $_service;

    public function __construct() {

        $client = new Google_Client();
        $client->setClientId(self::CLIENT_ID);

        $inFile = NULL;
        if (file_exists(self::KEY_PATH)) {
            $inFile = read_file(self::KEY_PATH);
        }
        $client->setAssertionCredentials(new Google_AssertionCredentials(
                self::SERVICE_ACCOUNT_NAME, $this->scope, $inFile)
        );

        $this->_service = new Google_DriveService($client);
    }

    public function __get($name) {
        return $this->_service[$name];
    }

    public function createFile($name, $mime, $description, $content,
            Google_ParentReference $fileParent = null) {
        $file = new Google_DriveFile();
        $file->setTitle($name);
        $file->setDescription($description);
        $file->setMimeType($mime);

        if ($fileParent) {
            $file->setParents(array($fileParent));
        }

        $createdFile = $this->_service->files->insert($file,
                array(
            'data' => $content,
            'mimeType' => $mime,
        ));

        return $createdFile['id'];
    }

    public function createFileFromPath($path, $description,
            Google_ParentReference $fileParent = null) {
        $fi = new finfo(FILEINFO_MIME);
        $mimeType = explode(';', $fi->buffer(read_file($path)));
        $fileName = preg_replace('/.*\//', '', $path);

        return $this->createFile($fileName, $mimeType[0], $description,
                        read_file($path), $fileParent);
    }

    public function createFolder($name) {
        return $this->createFile($name, 'application/vnd.google-apps.folder',
                        null, null);
    }

    public function setPermissions($fileId, $value, $role = 'writer',
            $type = 'user') {
        $perm = new Google_Permission();
        $perm->setValue($value);
        $perm->setType($type);
        $perm->setRole($role);

        $this->_service->permissions->insert($fileId, $perm);
    }

    public function getFileIdByName($name) {
        $files = $this->_service->files->listFiles();
        foreach ($files['items'] as $item) {
            if ($item['title'] == $name) {
                return $item['id'];
            }
        }

        return false;
    }

    public function upLoadGoogleDriveFile($path) {

        printf("Uploading %s to Google Drive\n", $path);

        $folderId = $this->getFileIdByName(BACKUP_FOLDER);

        if (!$folderId) {
            echo "Creating folder...\n";
            $folderId = $this->createFolder(BACKUP_FOLDER);
            $this->setPermissions($folderId, SHARE_WITH_GOOGLE_EMAIL);
        }

        $fileParent = new Google_ParentReference();
        $fileParent->setId($folderId);

        $fileId = $this->createFileFromPath($path, $path, $fileParent);

        printf("File: %s created\n", $fileId);

        $this->setPermissions($fileId, SHARE_WITH_GOOGLE_EMAIL);
    }

}
0

3 उत्तर

Your MY_DriveServiceHelper is actually a library. Which means CodeIgniter will call new MY_DriveServiceHelper() when you do $this->load->library('MY_DriveServiceHelper');. The object is then stored at $this->DriveServiceHelper.

So, you need to do $this->DriveServiceHelper->upLoadGoogleDriveFile().

DOCS: http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html

0
जोड़ा

आपको MY_DriveServiceHelper का एक उदाहरण बनाना चाहिए जिस पर आप विधि को कॉल करते हैं:

$helper = new MY_DriveServiceHelper();
$helper->upLoadGoogleDriveFile($path);
0
जोड़ा
मैं सहायक लोड करने के लिए सीआई के लोडर का उपयोग करने की सलाह दूंगा। $ this-> load-> सहायक ( 'your_helper');
जोड़ा लेखक xbonez, स्रोत

upLoadGoogleDriveFile() MY_DriveServiceHelper का क्लास फ़ंक्शन है। आपको MY_DriveServiceHelper को तुरंत चालू करने की आवश्यकता होगी और फिर इसे इस तरह कॉल करें:

$MY_DriveServiceHelper->upLoadGoogleDriveFile();

कुछ ओओपी मूल बातें पर नज़र डालें।

0
जोड़ा