PHP класс, вызывающий функцию внутри другой ошибки функции - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть следующий класс с несколькими функциями внутри.Я получаю сообщение об ошибке, когда я вызываю get_dir_size() внутри функции Diskspace().Это не признание этого.Что я делаю неправильно.Этот код предназначен для создания плагина expressionengine.

Неустранимая ошибка: вызов неопределенной функции get_dir_size ()

class DiskSpace
{

    public $return_data = "";
    public function Diskspace()
    {
        $this->EE =& get_instance();

        $dir_name = $_SERVER['DOCUMENT_ROOT']."/userfiles/";
        /* 1048576 bytes == 1MB */
        $total_size= round((get_dir_size($dir_name) / 1048576),2) ;
         $this->return_data = $total_size;

    }

    public function get_dir_size($dir_name){
        $dir_size =0;
        if (is_dir($dir_name)) {
            if ($dh = opendir($dir_name)) {
                while (($file = readdir($dh)) !== false) {
                    if($file !="." && $file != ".."){
                        if(is_file($dir_name."/".$file)){
                            $dir_size += filesize($dir_name."/".$file);
                        }
                        /* check for any new directory inside this directory */
                        if(is_dir($dir_name."/".$file)){
                            $dir_size +=  get_dir_size($dir_name."/".$file);
                        }
                    }
                }
            }
        }
        closedir($dh);
        return $dir_size;
    }
}

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011

Измените строку, которая вызывает get_dir_size ($ dir_name), на: -

$total_size= round(($this->get_dir_size($dir_name) / 1048576),2) ;

Есть еще несколько проблем с этим кодом Что это?$this->EE = & get_instance();, а также вы получите ошибки при выполнении closedir($dh);, если оператор if, в котором он объявлен, не выполнен.

1 голос
/ 21 ноября 2011

Помните, когда вы вызываете собственную функцию объекта внутри объекта, используйте переменную $ this указателя.

$total_size= round((get_dir_size($dir_name) / 1048576),2) ;

Изменить на

 $total_size= round(($this->get_dir_size($dir_name) / 1048576),2) ;

Было бы также хорошо, если бы вы сказали нам, в какой строке происходит ошибка. Также было бы приятно увидеть полный журнал ошибок.

...