2013-10-10 8 views
-1

Я использую функцию для создания zip-файлов в PHP. Затем я вызываю эту функцию внутри другой функции.Звонок на неопределенную функцию?

Я не могу понять, почему я получаю следующее сообщение об ошибке:

Fatal error: Call to undefined function create_zip() in ...

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

Вот документ, я удалил содержание всех других функций для простоты:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Judging { 

    public $return_data; 

    public function __construct() 
    { 
     $this->EE =& get_instance(); 
    } 

    public function pre_judging_items() { 
    } 

    public function pre_judging_submission_accept() { 
    } 

    public function pre_judging_submission_decline() { 
    } 

    public function round_one_items() { 
    } 

    public function round_one_submission_decline() { 
    } 

    public function round_two_items() { 
    } 

    public function submission_form() { 
    } 

    public function counts() { 
    } 

    public function judged_list_singles() { 
    } 

    public function create_zip($files = array(),$destination = '',$overwrite = false) { 

     if(file_exists($destination) && !$overwrite) { return false; } 

     $valid_files = array(); 

     if(is_array($files)) { 
      foreach($files as $file) { 
       if(file_exists($file)) { 
        $valid_files[] = $file; 
       } 
      } 
     } 

     if(count($valid_files)) { 
      $zip = new ZipArchive(); 
      if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { 
       return false; 
      } 
      foreach($valid_files as $file) { 
       $zip->addFile($file,$file); 
      } 

      $zip->close(); 

      return file_exists($destination); 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public function judged_zip_singles() { 

     $sql = " 
      SELECT * 
      FROM (
       SELECT *, @rn:=IF(@prevCat=category_id, @rn + 1,1) rn, @prevCat:=category_id 
       FROM (
       SELECT sub.entry_id, sum(jud.stage_2) AS score, sub.member_group, sub.category_id, dat.field_id_48 as path 
       FROM exp_judging AS jud 
       JOIN (SELECT @rn:=0, @prevCat:=0) T 
       LEFT JOIN exp_submissions AS sub ON jud.rel_id = sub.id 
       LEFT JOIN exp_channel_data AS dat ON dat.entry_id = sub.entry_id 
       GROUP BY jud.rel_id 
       ORDER BY sub.category_id, sum(jud.stage_2) DESC 
      ) T 
      ) T 
      WHERE rn <= 35 
     "; 

     $query = $this->EE->db->query($sql); 


     $items = array(); 
     foreach ($query->result_array() as $key => $row) { 
      $path = substr($row['path'], 11); 
      $items[] = $path; 
     } 

     $result = create_zip($items,'single-files.zip'); 

     print_r($result); 

    } 
} 

Может кто-нибудь понять, почему я буду получать эту ошибку?

+0

Вы называете его как функцию или метод объекта суждения ? Большая разница между ними. –

+1

Потому что это метод, и вы вызываете его как глобальную функцию - без '->' ссылаясь на текущий объект. – mario

+0

Поскольку create_zip - это метод в том же классе, вам придется вызывать его с $ this, а в своей области $ this-> create_zip() –

ответ

4

Вы должны использовать $this для доступа к функции члена внутри judged_zip_singles():

$result = $this->create_zip($items,'single-files.zip'); 
1

изменение

$result = create_zip($items,'single-files.zip'); 

с

$result = $this->create_zip($items,'single-files.zip'); 
Смежные вопросы