2013-12-02 3 views
0

Я использую CodeIgniter. Я повторно использую библиотеку для загрузки файла на Google диск. Теперь я столкнулся с ошибкой.CodeIgniter Fatal error: Call to undefined function

Fatal error: Call to undefined function upLoadGoogleDriveFile() in D:\xampp\htdocs\butfix\Brain-Teaser-Fest\application\controllers\blabla.php on line 21

Call Stack

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 = 'my_ema[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

Вы должны создать экземпляр MY_DriveServiceHelper, на котором вы вызываете метод:

$helper = new MY_DriveServiceHelper(); 
$helper->upLoadGoogleDriveFile($path); 
+0

Я бы рекомендовал использовать загрузчик CI, чтобы загрузить помощника. '$ This-> load-> помощник ('your_helper');' – xbonez

0

upLoadGoogleDriveFile() является функцией класса MY_DriveServiceHelper. Вам нужно будет создать экземпляр MY_DriveServiceHelper, а затем вызвать его следующим образом:

$MY_DriveServiceHelper->upLoadGoogleDriveFile(); 

Посмотрите на некоторые из OOP basics.

0

Ваш MY_DriveServiceHelper на самом деле является библиотекой. Это означает, что CodeIgniter будет звонить new MY_DriveServiceHelper(), когда вы делаете $this->load->library('MY_DriveServiceHelper');. Затем объект сохраняется в $this->DriveServiceHelper.

Итак, вы должны сделать $this->DriveServiceHelper->upLoadGoogleDriveFile().

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

Смежные вопросы