Как исправить? Fatal error: Call to a member function get_files_list() on a non-object

Тема в разделе "Как сделать...", создана пользователем tusja, 28 ноя 2012.

  1. tusja

    tusja

    Регистр.:
    31 мар 2007
    Сообщения:
    493
    Симпатии:
    71
    Выскакивает такая ошибка -
    Fatal error: Call to a member function is_working() on a non-object
    код:
    PHP:
        if (!$cnt_domains) {
     
            
    $cnt_domains get_req_var('cnt_domains'0);
     
     
     
            if (!
    $cnt_domains) {
     
                
    $content $smarty->fetch('sites/sites_type.tpl');
     
                break;
     
            }
     
     
     
            
    save_settings('cnt_domains'$cnt_domains);
     
        }
     
     
     
        
    $threads true;
     
        
    $is_working $threads->is_working();
     
        
    $cnt get_settings('cnt_domains');
     
        
    $domains = array();
     
        
    $i 13;
     
     
     
        while (
    $i <= $cnt) {
     
            
    $domains[] = 'http://site' $i '.ru';
     
            ++
    $i;
     
        }
    и еще в другом файле:
    Fatal error: Call to a member function get_var() on a non-object

    PHP:
    case 'groups':
        
    $threads true;
        
    $cnt_requests $threads->get_var('cnt_requests');
        
    $is_working $threads->is_working();
        
    $smarty->assign('source'get_settings('groups_source''vk'));
        
    $smarty->assign('cnt_groups'get_settings('cnt_groups'0));
        
    $smarty->assign('bots'get_settings('groups_bots'5));
        
    $smarty->assign('queries'get_settings('groups_queries'));
        
    $smarty->assign('gate_api'get_settings('gate_api'));
        
    $smarty->assign('cnt_requests'$cnt_requests $cnt_requests 0);
        
    $smarty->assign('working'$is_working 0);
        
    $smarty->assign('page''groups');
        
    $smarty->assign('page_title''Вступление в группы');
        
    $content $smarty->fetch('groups/groups.tpl');
        break;
    Помогите пожалуйста решить данную проблему.
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.529
    Симпатии:
    1.386
    Опять видимо из под кубика?

    $threads = true; надо заменить на
    $threads = new ЗДЕСЬ_ИМЯ_ОБЪЕКТА;

    ИМЯ_ОБЪЕКТА надо как то угадать из контекста...
     
    tusja нравится это.
  3. tusja

    tusja

    Регистр.:
    31 мар 2007
    Сообщения:
    493
    Симпатии:
    71
    Ага из под него.
    Хмм, а если раскодировать другие файлы то можно будет узнать ИМЯ_ОБЪЕКТА?

    Вот theads.php
    PHP:
    <?PHP
     
    require_once '../config.php';
    $task get_req_var('task');
    switch (
    $task) {
    case 
    'start_thread':
    $identifier get_req_var('identifier');
    $thread_id get_req_var('thread_id');
    $threads = new Threads($identifier);
    $threads->execute(1,array($thread_id));
    echo 
    'Поток запущен!';die();
    break;
    case 
    'stop_thread':
    $identifier get_req_var('identifier');
    $thread_id get_req_var('thread_id');
    $threads = new Threads($identifier);
    $threads->stop($thread_id);
    echo 
    'Поток остановлен!';die();
    break;
    case 
    'stop_threads':
    $identifier get_req_var('identifier');
    $threads = new Threads($identifier);
    $threads->delete_threads();
    echo 
    'Потоки остановлены!';die();
    break;
    case 
    'get_log_thread':
    $identifier get_req_var('identifier');
    $thread_id get_req_var('thread_id');
    $threads = new Threads($identifier);
    $log $threads->get_log($thread_id);
    echo 
    $log;die();
    break;
    case 
    'get_log_threads':
    $identifier get_req_var('identifier');
    $threads = new Threads($identifier,true);
    $log $threads->get_log('',false);
    echo 
    $log;die();
    break;
    case 
    'clear_log':
    $identifier get_req_var('identifier');
    $threads = new Threads($identifier,true);
    $threads->clear_log();
    die();
    break;
    case 
    'thread_status':
    $identifier get_req_var('identifier');
    $thread_id get_req_var('thread_id');
    $threads = new Threads($identifier);
    $status = ( $threads->is_working($thread_id) ) ?'working''';
    echo 
    $status;die();
    break;
    case 
    'get_status':
    $identifier get_req_var('identifier');
    $threads = new Threads($identifier);
    $status = ( $threads->is_working() ) ?'working''';
    echo 
    $status;die();
    break;
    case 
    'get_progress':
    $identifier get_req_var('identifier');
    $progress_var get_req_var('progress_var');
    $accumulate get_req_var('accumulate',0);
    $threads = new Threads($identifier);
    $status = ( $threads->is_working() ) ?'working''';
    $progress $threads->get_progress($progress_var,$accumulate);
    $result = array(
    'status'=>$status,
    'percent'=>$progress['percent'],
    'current'=>$progress['current'],
    'total'=>$progress['total']
    );
    echo 
    json_encode($result);die();
    break;
    case 
    'thread_progress':
    $identifier get_req_var('identifier');
    $thread_id get_req_var('thread_id');
    $progress_var get_req_var('progress_var');
    $accumulate get_req_var('accumulate',0);
    $threads = new Threads($identifier);
    $status = ( $threads->is_working($thread_id) ) ?'working''';
    $progress $threads->get_progress($progress_var,$accumulate,array($thread_id));
    $result = array(
    'status'=>$status,
    'percent'=>$progress['percent'],
    'current'=>$progress['current'],
    'total'=>$progress['total']
    );
    echo 
    json_encode($result);die();
    break;
    case 
    'delete_thread':
    $identifier get_req_var('identifier');
    $thread_id get_req_var('thread_id');
    $threads = new Threads($identifier);
    $threads->delete_thread($thread_id);
    echo 
    '';die();
    break;
    case 
    'reset_threads':
    $identifier get_req_var('identifier');
    $threads = new Threads($identifier);
    $threads->reset();
    echo 
    '';die();
    break;
    case 
    'set_var':
    $identifier get_req_var('identifier');
    $thread_id get_req_var('thread_id');
    $varname get_req_var('varname');
    $new_value get_req_var('new_value');
    $threads = new Threads($identifier);
    $threads->set_var($varname,$new_value,$thread_id);
    echo 
    '';die();
    break;
    case 
    'task_stop':
    $uniqid get_req_var('uniqid');
    $uniqid clear_filename($uniqid);
    file_put_contents(LOG."/stop_$uniqid.txt",'stop');
    echo 
    '';die();
    break;
    case 
    'task_log':
    $uniqid get_req_var('uniqid');
    $uniqid clear_filename($uniqid);
    $log file_exists(LOG."/$uniqid.txt") ?file_get_contents(LOG."/$uniqid.txt") : '';
    $log file_exists(LOG."/$uniqid.txt") ?file(LOG."/$uniqid.txt") : array();
    $log array_reverse($log);
    $log implode('',$log);
    echo 
    $log;die();
    break;
    default:
    die();
    }
    ;
    ?>
    еще один класс.
    PHP:
    <?PHP
     
    class Threads {
    private 
    $identifier;
    private 
    $log_dir;
    private 
    $flows;
    public function 
    __construct($identifier) {
    $this->identifier $identifier;
    $log_dir LOG.'/'.$identifier;
    if ( !
    file_exists($log_dir) ) mkdir($log_dir,0777);
    $this->log_dir $log_dir;
    $flows_file $this->log_dir.'/'.$this->identifier.'.txt';
    $this->flows = ( file_exists($flows_file) ) ?unserializeread_file($flows_file) ) : array();
    if ( !
    is_array($this->flows) ) $this->flows = array();
    }
    public function 
    add($url,$data,$thread_id) {
    if ( !
    $thread_id ) return false;
    if ( !
    $url ) return false;
    $flow = array(
    'url'=>$url,
    'data'=>$data,
    'execute_code'=>get_uniq_id()
    );
    $this->flows[$thread_id ] = $flow;
    $this->save_flows();
    return 
    true;
    }
    public function 
    delete_thread($thread_id) {
    $flows $this->get_flows();
    if ( !isset(
    $flows[$thread_id]) ) return false;
    unset( 
    $flows[$thread_id] );
    $flows_file "{$this->log_dir}/{$this->identifier}.txt";
    write_to_file($flows_file,serialize($flows),true);
    }
    public function 
    delete_threads() {
    $this->flows = array();
    $flows_file "{$this->log_dir}/{$this->identifier}.txt";
    write_to_file($flows_file,serialize(array()),true);
    }
    public function 
    reset() {
    $this->delete_threads();
    $dir = new Dir($this->log_dir);
    $dir->clear();
    return 
    true;
    }
    public function 
    reset_thread($thread_id) {
    $this->delete_thread($thread_id);
    $files = array(
    "{$this->log_dir}/vars_$thread_id.txt",
    "{$this->log_dir}/log_$thread_id.txt",
    );
    foreach (
    $files as $filename) {
    while ( 
    file_exists($filename) ) unlink($filename);
    }
    return 
    true;
    }
    public function 
    get_flow_ids() {
    return 
    array_keys($this->flows);
    }
    public function 
    execute($flowcount=10,$threads=array()) {
    if ( !
    $this->flows ) return true;
    $chs = array();
    foreach(
    $this->flows as $thread_id =>$flow) {
    if ( 
    $threads &&!in_array($thread_id,$threads)) continue;
    $this->flows[$thread_id ]['execute_code'] = get_uniq_id();
    $this->set_status($thread_id,'В очереди');
    $data $flow['data'];
    $data['thread_id'] = $thread_id;
    $data['execute_code'] = $this->flows[$thread_id ]['execute_code'];
    $ch curl_init$flow['url'] );
    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    $chs[] = $ch;
    }
    $this->save_flows();
    if ( 
    count($chs)<$flowcount $flowcount count($chs);
    $mh curl_multi_init();
    for (
    $i=0;$i<$flowcount;$i++) curl_multi_add_handle($mh,array_shift($chs));
    $flows null;
    do {
    do {
    curl_multi_exec($mh,$flows);
    sleep(1);
    }while( 
    $flows==$flowcount );
    $info curl_multi_info_read($mh);
    $content curl_multi_getcontent($info['handle']);
    $this->save_log($content);
    curl_multi_remove_handle($mh,$info['handle']);
    curl_close($info['handle']);
    if ( 
    count($chs)>) {
    curl_multi_add_handle($mh,array_shift($chs));
    curl_multi_exec($mh,$flows);
    }else {
    $flowcount--;
    }
    }while( 
    $flows>);
    curl_multi_close($mh);
    write_to_file($this->log_dir.'/log.txt','Работа потоков завершена!');
    return 
    true;
    }
    public function 
    stop($thread_id) {
    if ( !
    $this->flows[$thread_id] ) return false;
    $this->flows[$thread_id]['execute_code'] = get_uniq_id();
    $this->save_flows();
    $this->set_status($thread_id,'Остановлен');
    return 
    true;
    }
    public function 
    stop_all() {
    foreach (
    $this->flows as $thread_id =>$flow) {
    $this->flows[$thread_id]['execute_code'] = get_uniq_id();
    $this->set_status($thread_id,'Не запущен');
    }
    $this->save_flows();
    return 
    true;
    }
    public function 
    is_working($id=false) {
    foreach (
    $this->flows as $thread_id =>$flow) {
    if ( 
    $id &&$thread_id!=$id ) continue;
    $status $this->get_status($thread_id);
    if ( 
    $status=='Работает') return true;
    if ( 
    $status=='В очереди') return true;
    }
    return 
    false;
    }
    public function 
    thread_status($thread_id) {
    return 
    $this->get_status($thread_id);
    }
    public function 
    get_progress($progress_var,$accumulate=false,$threads=array()) {
    $result = array(
    'percent'=>0,
    'current'=>0,
    'total'=>0
    );
    if ( !
    $progress_var ) {
    $result['total'] = count($this->flows);
    foreach (
    $this->flows as $flow_id =>$flow) {
    $status $this->thread_status($flow_id);
    if ( 
    $status=='В очереди') continue;
    if ( 
    $status=='Работает') continue;
    $result['current'] += 1;
    }
    $result['percent'] = ($result['total']) ?($result['current'] / $result['total'] * 100) : $result['current'];
    if ( 
    $result['percent']>100 $result['percent'] = 100;
    return 
    $result;
    }
    foreach (
    $this->flows as $flow_id =>$flow) {
    if ( 
    $threads &&!in_array($flow_id,$threads) ) continue;
    $result['total'] += $this->get_data($flow_id,$progress_var);
    if ( !
    $accumulate &&$this->thread_status($flow_id)=='В очереди') continue;
    $result['current'] += $this->get_var($progress_var,$flow_id);
    }
    $result['percent'] = ($result['total']) ?($result['current'] / $result['total'] * 100) : $result['current'];
    if ( 
    $result['percent']>100 $result['percent'] = 100;
    return 
    $result;
    }
    public function 
    log($thread_id,$text) {
    $log_file "{$this->log_dir}/log_{$thread_id}.txt'";
    $text str_replace(array("\r\n","\r","\n"),'||@#@||',$text);
    $text date('Y-m-d H:i:s').': '.$text;
    write_to_file($log_file,$text);
    write_to_file($this->log_dir.'/log.txt',$text);
    return 
    true;
    }
    public function 
    get_log($thread_id='',$format=true,$preview=0) {
    $log_file = ($thread_id) ?$this->log_dir.'/log_'.$thread_id.'.txt'$this->log_dir.'/log.txt';
    if ( !
    file_exists($log_file) ) return '';
    if ( 
    $format ) {
    $strings get_list_from_file($log_file);
    $strings array_reverse($strings);
    $cnt = ($preview) ?$preview count($strings);
    $result '';
    for (
    $i=0;$i<$cnt;$i++) {
    $string $strings[$i];
    $string str_replace('||@#@||',"\n",$string);
    $result .= '<p>'.$string.'</p>';
    }
    }else {
    $result read_file($log_file);
    }
    return 
    $result;
    }
    public function 
    clear_log($thread_id='') {
    $log_file = ($thread_id) ?$this->log_dir.'/log_'.$thread_id.'.txt'$this->log_dir.'/log.txt';
    write_to_file($log_file,'',true);
    if ( !
    $thread_id ) {
    foreach (
    $this->flows as $flow_id =>$flow) {
    $log_file $this->log_dir.'/log_'.$flow_id.'.txt';
    write_to_file($log_file,'',true);
    }
    }
    return 
    true;
    }
    public function 
    get_var($varname,$thread_id=false) {
    $vars_file = ( $thread_id ) ?"vars_$thread_id.txt"'global_vars.txt';
    $vars_file $this->log_dir.'/'.$vars_file;
    if ( !
    file_exists($vars_file) ) return false;
    $vars unserializeread_file($vars_file) );
    return ( isset(
    $vars[$varname]) ) ?$vars[$varname] : false;
    }
    public function 
    set_var($varname,$value,$thread_id=false) {
    $vars_file = ( $thread_id ) ?"vars_$thread_id.txt"'global_vars.txt';
    $vars_file $this->log_dir.'/'.$vars_file;
    $vars = ( file_exists($vars_file) ) ?unserializeread_file($vars_file) ) : array();
    $vars[$varname] = $value;
    write_to_file($vars_file,serialize($vars),true);
    }
    public function 
    get_data($thread_id,$param_name) {
    if ( !isset(
    $this->flows[$thread_id ]) ) return false;
    $flow $this->flows[$thread_id ];
    if ( !isset(
    $flow['data'][$param_name ]) ) return false;
    return 
    $flow['data'][$param_name ];
    }
    private function 
    get_flows() {
    $flows_file "{$this->log_dir}/{$this->identifier}.txt";
    if ( 
    file_exists($flows_file) ) {
    $flows read_file($flows_file);
    $flows unserialize($flows);
    if ( !
    is_array($flows) ) $flows = array();
    }else {
    $flows = array();
    }
    return 
    $flows;
    }
    private function 
    save_flows() {
    $flows_file "{$this->log_dir}/{$this->identifier}.txt";
    if ( 
    file_exists($flows_file) ) {
    $data read_file($flows_file);
    $flows unserialize($data);
    }else {
    $flows = array();
    }
    foreach (
    $this->flows as $flow_id =>$flow) {
    $flows[$flow_id ] = $flow;
    }
    $flows serialize($flows);
    write_to_file($flows_file,$flows,true);
    }
    private function 
    get_status($thread_id) {
    if ( !isset(
    $this->flows[$thread_id ]) ) return 'Не запущен';
    $execute_code $this->flows[$thread_id ]['execute_code'];
    $filename $this->log_dir .'/'.$execute_code .'.txt';
    if ( !
    file_exists($filename) ) return 'Не запущен';
    $status read_file($filename);
    $status get_list_from_text($status);
    return 
    $status[0];
    }
    private function 
    set_status($thread_id,$status) {
    if ( !isset(
    $this->flows[$thread_id ]) ) return false;
    $execute_code $this->flows[$thread_id ]['execute_code'];
    $filename $this->log_dir .'/'.$execute_code .'.txt';
    write_to_file($filename,$status,true);
    return 
    true;
    }
    private function 
    save_log($content) {
    if ( !
    $content ) return false;
    $path LOG .'/curl';
    if ( !
    file_exists($path) ) {
    mkdir($path);
    @
    chmod$path,0777 );
    }
    $path .= '/'.date('Y-m-d');
    if ( !
    file_exists($path) ) {
    mkdir($path);
    @
    chmod$path,0777 );
    }
    $path .= '/'.$this->identifier .'_'.date('H-i-s') .'_'.get_uniq_id() .'.txt';
    file_put_contents($path,$content);
    return 
    true;
    }
    }
    ;
    ?>
     
  4. tusja

    tusja

    Регистр.:
    31 мар 2007
    Сообщения:
    493
    Симпатии:
    71
    еще такая ошибка :
    Fatal error: Call to a member function get_files_list() on a non-object

    PHP:
        while ($i <= $cnt) {
            
    $domains[] = 'http://site' $i '.ru';
            ++
    $i;
        }
     
        
    $dm = array();
     
        foreach (
    $domains as $domain) {
            
    $site get_item_from_store($file_sites$domain);
            
    $dm[] = array('url' => $domain'code' => md5($domain), 'title' => isset($site['title']) ? $site['title'] : '''keys' => isset($site['keys']) ? $site['keys'] : '''template' => isset($site['template']) ? $site['template'] : '''uniq_tpl' => isset($site['uniq_tpl']) ? $site['uniq_tpl'] : '''progress' => '0''status' => get_status($domain));
        }
     
        
    $smarty->assign('domains'$dm);
        
    $sets = array();
        
    $s DATA;
        
    $sets_list $s->get_files_list(false);
        
    sort($sets_list);
     
        foreach (
    $sets_list as $set_title) {
            
    $sets[] = array('id' => md5($set_title), 'title' => $set_title);
        }
     
        
    $smarty->assign('sets'$sets);
        
    $tpls = new Dir('./cms_tpl/templates');
        
    $tpls $tpls->get_dirs_list();
        
    $smarty->assign('templates'$tpls);
        
    $content $smarty->fetch('sites/sites.tpl');
        break;
     
  5. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.529
    Симпатии:
    1.386
    tusja почитай про ооп в php Перейти по ссылке
    или хотя бы про объекты Перейти по ссылке

    На примере
    PHP:
    $threads true;
    $cnt_requests $threads->get_var('cnt_requests');
    $is_working $threads->is_working();
    мы понимаем что нам нужен class, который содержит функции get_var() и is_working() и class Threads из твоего поста https://nulled.cc/threads/235884/#post-2043585 подходит по логике и названию функций.
    Так что можно смело исправлять наш пример на
    PHP:
    $threads = new Threads;
    $cnt_requests $threads->get_var('cnt_requests');
    $is_working $threads->is_working();
     
    tusja нравится это.