简体   繁体   中英

json and php Uncaught Error: Function name must be a string in in php 7.0

I tried to translate the site to php7.0 and I have a login system and registration when I press the buttons gives an error

<br />

Notice: Array to string conversion in on line 行的数组到字符串的转换

: Undefined property: ajax::$Array in on line :第行的未定义属性:ajax :: $ Array

: Uncaught Error: Function name must be a string in /var/www/html/new/lib/class/class.ajax.php:252 Stack trace: :未被捕获的错误:函数名称必须是/var/www/html/new/lib/class/class.ajax.php:252中的字符串:堆栈跟踪:

0 {main}

My code :

 <?php error_reporting(E_ALL); ini_set('display_errors', '1'); session_start(); // запуск сессии date_default_timezone_set('Europe/Moscow'); //выбор временного региона Москва require_once 'class.auth.php'; // принятие данных с ajax запросов include_once('db.php'); require_once 'class.mix.php'; //$servers = new MixServers(); // если человек онлайн обновление информации class ajax { public $ip; protected $OOP_auth; protected $OOP_mix; public function __construct() { $this->OOP_auth = new Authorization(); $this->OOP_mix = new MixServers(); if ( isset($_SESSION['auth']) ) { $this->OOP_auth->online($_SESSION['auth']); $this->OOP_mix->id_player = $_SESSION['auth']; } } public function __destruct() { $this->OOP_auth = null; $this->OOP_mix = null; } public function login($array) { //print_r($array); // функция проверка отправленых данных if ( isset($array['Username']) && isset($array['psw']) && $array['psw'] != '' && $array['Username'] != '' ) { if ( isset($array['remembe']) && ($array['remembe'] == "true") ) { SetCookie("remember",'1',time()+604800,'/'); SetCookie("login", $array['Username'],time()+604800,'/'); SetCookie("password",md5($array['psw']),time()+604800,'/'); } else { SetCookie("remember",'0',time()+604800,'/'); } $this->OOP_auth->login($array['Username'], $array['psw']) ? $answer['status'] = true : $answer = array("status" => false, "message" => "Ошибка при вводе"); return json_encode($answer); } else { return json_encode(array('status' => false, 'message' => 'Логин или пароль не введены')); } } public function registration($array) { if ( isset($array['reg_login']) and isset($array['reg_password']) and isset($array['reg_password1']) and $array['reg_password'] === $array['reg_password1'] and 3 < mb_strlen($array['reg_login'], 'utf-8') and 3 < mb_strlen($array['reg_password'], 'utf-8') and 3 < mb_strlen($array['reg_password1'], 'utf-8') ) { $this->OOP_auth->pre_registration($this->ip, $array['reg_login'], $array['reg_password']) ? $answer['status'] = true : $answer = array("status" => false, "message" => "Вы уже зарегистрированны"); return json_encode($answer); } else { return json_encode(array('status' => false, 'message' => 'Логин или пароль не введены или введены неправильно')); } } public function check_reg($array) { $this->OOP_auth->check_reg($this->ip) ? $answer['status'] = true : $answer = array("status" => false, "message" => "Вы еще не зашли на сервер"); return json_encode($answer); } public function in_login($array) { $this->OOP_auth->loginIP($this->ip) ? $answer['status'] = true : $answer = array("status" => false, "message" => "Ошибка при входе"); return json_encode($answer); } public function unlogin($array) { $this->OOP_auth->unlogin($_SESSION['auth']) ? $answer['status'] = true : $answer = array("status" => false, "message" => "Ошибка при выходе"); if ($answer['status']) { SetCookie("login", "", time() - 3600,'/'); SetCookie("password","", time() - 3600,'/'); } return json_encode($answer); } public function change_country($array) { $DATA = $this->OOP_mix->free_servers("sity", $array['add_mix_country']); $option = ""; if (isset($DATA['mix_sity'])) { foreach ($DATA['mix_sity'] as $key => $value) { $option .= "<option value=\\"" . $DATA['mix_sity'][$key]['name'] . "\\">" . $DATA['mix_sity'][$key]['name'] . "</option>"; } } return $option; } public function create_mix($array) { if ( isset($array['name']) && isset($array['country']) && isset($array['sity']) && isset($array['map']) && 3 < mb_strlen($array['name'], 'utf-8') && 40 > mb_strlen($array['name'], 'utf-8')) { $this->OOP_mix->create_mix_server($_POST['name'], $_POST['country'], $_POST['sity'], $_POST['map']) ? $answer['status'] = true : $answer = array("status" => false, "message" => "Ошибка при создании микса"); } else { $answer = array("status" => false, "message" => "Ошибка при вводе данных"); } return json_encode($answer); } public function ajax_mixs_free() { if (isset($_SESSION['auth'])) { $answer['message'] = $this->OOP_mix->get_info_all_servers(); } return $answer['message']['free_servers']; } public function join_team($array) { if ( isset($_SESSION['auth']) && (int) $array['team'] > 0 && (int) $array['team'] < 3) { if ($this->OOP_mix->check_player()) { $this->OOP_mix->join_team((int) $array['team']) ? $answer['status'] = true : $answer = array("status" => false, "message" => "Все слоты заняты"); } else { $answer = array("status" => false, "message" => "Вы не на миксе"); } } else { $answer = array("status" => false, "message" => "Ошибка при выборе команды"); } return json_encode($answer); } public function message_mix($array) { if (isset($_SESSION['auth'])) { $this->OOP_mix->messeges_send($array['text']) ? $answer['status'] = true : $answer = array("status" => false, "message" => "Проблемы с текстом"); } else { $answer = array("status" => false, "message" => "Авторизируйтес на сайте"); } return json_encode($answer); } public function update_chat($array) { if (isset($_SESSION['auth']) && isset($array['id'])) { if ($answer = $this->OOP_mix->messeges_get($array['id'])) $answer['status'] = true; } else { $answer = array("status" => false, "message" => "Авторизируйтес на сайте"); } return json_encode($answer); } public function exit_mix() { if (isset($_SESSION['auth'])) { $this->OOP_mix->exit_on_server() ? $answer['status'] = true : $answer = array("status" => false, "message" => "Этого не может быть"); } return json_encode($answer); } public function select_mix($array) { if (isset($_SESSION['auth'])) { $this->OOP_mix->set_on_mix($array['val']) ? $answer['status'] = true : $answer = array("status" => false, "message" => "Не правильный id"); } else { $answer = array("status" => false, "message" => "Авторизация закончилась"); } return json_encode($answer); } public function back_to_mixs() { if (isset($_SESSION['auth'])) { if ($this->OOP_mix->check_player()) { $this->OOP_mix->back_to_mixs() ? $answer['status'] = true : $answer = array("status" => false, "message" => "Вы не можете выйти так как являетесь игроком сервера"); } else { $answer = array("status" => true, "message" => "Все ваши игры завершены"); } } else { $answer = array("status" => false, "message" => "Авторизация закончилась"); } return json_encode($answer); } } if ( isset($_POST['url']) && $_POST['url'] != '' ) { $OOPajax = new ajax(); if(isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { $OOPajax->ip = $_SERVER['HTTP_CF_CONNECTING_IP']; } else { $OOPajax->ip = $_SERVER['REMOTE_ADDR']; } if ( method_exists($OOPajax, $_POST['url']) ) { $answer = $OOPajax->$_POST['url']($_POST); } else { $answer = json_encode(array("status" => false, "message" => "Не наебешь")); } } else { $answer = json_encode(array("status" => false, "message" => "Пошел на хуй")); } echo $answer; /* // Выход с сайта - обнуление кукки if ( isset($_POST['set']) && ($_POST['set'] == 'unlogin') ) { SetCookie("login", "", time() - 3600,'/'); SetCookie("password","", time() - 3600,'/'); } // Авторизация if (isset($_POST['set']) && ($_POST['set'] == 'login') && isset($_POST['Username']) && isset($_POST['psw'])) { // авторизация if ( isset($_POST['remembe']) && ($_POST['remembe'] == "true") ) { SetCookie("remember",'1',time()+604800,'/'); SetCookie("login", $_POST['Username'],time()+604800,'/'); SetCookie("password",md5($_POST['psw']),time()+604800,'/'); } else { SetCookie("remember",'0',time()+604800,'/'); } if ($authorization->login($_POST['Username'], $_POST['psw'])) echo 'true'; } // Регистрация if ( isset($_POST['reg_login']) && isset($_POST['reg_password']) && isset($_POST['reg_password1']) && ( $_POST['reg_password'] === $_POST['reg_password1'] ) ) { if ( $authorization->pre_registration($ip, $_POST['reg_login'], $_POST['reg_password']) ) echo 'true'; } // Выход с сайта if ( isset($_POST['set']) && ($_POST['set'] == 'unlogin') ) { if ( $authorization->unlogin($_SESSION['auth']) ) echo 'true'; } // обновление микса if ( isset($_POST['set']) && ($_POST['set'] == 'info_mix') ) { echo $servers->info_mix_server(); } // обновление списка миксов if ( isset($_POST['set']) && ($_POST['set'] == 'info_mixs') ) { echo $servers->info_mix_servers(); } // Получение списка городов в стране if ( isset($_POST['add_mix_country']) && ($_POST['add_mix_country'] != '') ) { $DATA = $servers->free_servers("sity", $_POST['add_mix_country']); foreach ($DATA['mix_sity'] as $key => $value) { echo "<option value=\\"" . $DATA['mix_sity'][$key]['name'] . "\\">" . $DATA['mix_sity'][$key]['name'] . "</option>"; } } // Создание микса if ( isset($_POST['set']) && ($_POST['set'] == 'create_mix') && isset($_POST['name']) && isset($_POST['country']) && isset($_POST['sity']) && isset($_POST['map']) && isset($_POST['password'])) { if ($servers->create_mix_server($_POST['name'], $_POST['country'], $_POST['sity'], $_POST['map'], $_POST['password'])) echo "true"; } // Вход на микс if ( isset($_POST['set']) && ($_POST['set'] == 'select_mix') && isset($_POST['val']) && isset($_POST['pass'])) { if($servers->set_on_mix($_POST['val'], $_POST['pass'])) echo "true"; } // Вход на сервер if ( isset($_POST['set']) && ($_POST['set'] == 'select_server') && isset($_POST['val'])) { if($servers->set_on_server($_POST['val'])) echo "true"; } // Выход с микса if ( isset($_POST['set']) && ($_POST['set'] == 'exit_mix') ) { if ($servers->exit_on_server()) echo "true"; } */ ?> 

PHP 7 introduced some backward incompatible changes, including the evaluation of indirect expressions. You need to change the line:

$answer = $OOPajax->$_POST['url']($_POST);

to this:

$answer = $OOPajax->{$_POST['url']}($_POST);

to get the old PHP 5 behaviour.

The manual lists other expressions that were affected by this change here: http://php.net/manual/en/migration70.incompatible.php (see the "Changes to variable handling" section).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM