ffffffff8008726f6c656e616d650000 это хекс код именно запроса? пакет? Да запроса на получение, без opcode и длины пакета. P.S. Пакет для FW, но отличий для PW в запросе нет. Отличия только в ответе, в структуре values.
эх, смотрю так с автором темы и не найдем пример рабочего пакета ) Структуры мало, хотелось бы понять как выглядит правильный запрос, хотя бы хекс код его. [IMG] ffffffff8008726f6c656e616d650000 P.S. Вроде возвращал не 16, а 33 записи.
Вообще-то вы ошибаетесь, если ее инициализировать в другом файле, то вы получите ошибки и не корректную работу. Конкретно в этом лк файла, который выдает монеты за голосование нет, но я его видел в других аналогичных лк. Не будет никакой ошибки!! Например я ее определяю в самом menu.php ! $Link = MySQLi_Connect($MySQL_HOST, $MySQL_USER, $MySQL_USER_PASS, $MySQL_DB) or die ("Menu: ".mysqli_connect_error() ); $MYMONEY=0; if ( $result = MySQLi_Query($Link, "SELECT money FROM users WHERE id=" . $_SESSION['id'] ) ) { $row= MySQLi_Fetch_Row($result); $MYMONEY = $row[0]; MySQLi_Free_Result($result); } MySQLi_Close($Link); $MONEY = number_format($MYMONEY,0,'',' '); Если же вы имеете ввиду видимость переменной в других модулях... ну, это возможно. Но плясать от значения переменной на стороне пользователя не есть гуд, вы же должны понимать ;) Вы понимаете не рациональность своих действий? Это бессмысленное дублирование кода. Зачем объявлять для каждого "модуля" переменную по новой дублируя все действия? О какой стороне пользователя вы говорите в данном случае? Данная переменная берется из базы, а не со стороны пользователи, пользователь видит только ее значение. Все операции с ней происходят на стороне сервера. Или я вас не понял? не будет походу лк стоять|-( И кто же в этом виноват? Не вы ли со своим не желанием что-то делать? P.S. alexp, Беларусь? А какой город?
мне нужно, чтобы приходили монеты в лк, есть возможность помочь? Монеты приходят не в том скрипте, что вы процитировали. Там, как уже говорилось выше, идет только вызов самого ммотоп (с вашим линком). А монеты приходят из другого места :) Во сказал... Скрипт для обработки результатов голосования - admin\money.php --- добавлено: 5 фев 2015 в 08:24 --- Конкретно в menu.php не должна быть. Должна быть в index.php и в оригинале она есть. Вообще-то без разницы где ее инициировать, но в оригинале да - в индексе. Вообще-то вы ошибаетесь, если ее инициализировать в другом файле, то вы получите ошибки и не корректную работу. Конкретно в этом лк файла, который выдает монеты за голосование нет, но я его видел в других аналогичных лк. P.S. Я уже сказал выше как сделать данную функцию, но вы можете попробовать взять файл из другого лк. Удачи.
Тогда все, ок. Почему тогда ЛК не приходят?=С А причина просто, как я уже писал выше этот скрипт, приведенный вами в первом сообщении, не должен выдавать монеты. Он просто выводит ссылку на голосование. вопрос у меня тож, как и в первом посте, как настроить выдачу голда?;D Работать с логами конкретного топа. В вашем случае mmotop, в шаре имеются скрипты по выдаче бонусов за голосование в этом топе. Настраиваете этот скрипт под себя, меняете награду и все.
Тогда все, ок. Почему тогда ЛК не приходят?=С проблема в том, что ее нету --- добавлено: 4 фев 2015 в 17:50 --- Это поле в таблице users, а не таблица. А причина просто, как я уже писал выше этот скрипт, приведенный вами в первом сообщении, не должен выдавать монеты. Он просто выводит ссылку на голосование.
, post: 151640, member: 12202"]#1060 - Duplicate column name 'mudev' вот такая беда Перевести не судьба? "Колонка `mudev` уже существует" проблема в том, что ее нету --- добавлено: 4 фев 2015 в 17:50 --- , post: 151640, member: 12202"]#1060 - Duplicate column name 'mudev' вот такая беда Перевести не судьба? "Колонка `mudev` уже существует" Это поле в таблице users, а не таблица.
ее и в основе нету а должна быть. Кроме того в таблице users надо 2 поля создать для голосования. Конкретно в menu.php не должна быть. Должна быть в index.php и в оригинале она есть. Не приходит монеты в лк. Кто знает как решить? p.s гуглил, не нашел=С <? include "menu.php"; $VOTE = <<<HTML <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Голосование</title> <link rel="stylesheet" type="text/css" href="stylelk.css"> </head> <body> <center> {$MENU} <hr> <h3>Привет, {$_SESSION['login']}.<br />Твой ID: {$_SESSION['id']}<br <br />На вашем счету: {$MONEY}</h3> <hr> При голосовании указывайте свой логин, который указывали при регистрации.<br> За обычное голосование на mmotop вы получите {$MoneyMmo} монет лк<br> За смс голосование на mmotop вы получите {$MoneyMmoSMS} монет лк.<br> <a href="https://mmotop.ru/votes/d29eec5cfcb9afacea75dbb42fa3a82aff6557d5.txt?f18f7472e5c29d09c4113578225a0bf9" target="_blank"><img src="http://pw.mmotop.ru/images/90x60w_pw.png" title="Рейтинг серверов Perfect World" alt="Рейтинг серверов Perfect World" border="0"></a><br> <br> <font color="blue">Личный Кабинет PW-Krit<br />2012</font> </center> </body> </html> HTML; ?> За основу взял ЭТОТ Этот скрипт вам и не будет выдавать монеты. Он только выводит ссылку для голосования и все.
Что там думать? Алекс же писал: foreach ($result as $i => $row) { echo $row['name']; }
Скрипт запрос: <?php function sql_sender($code_fnc,$data){ $url = "http://192.168.0.32/sapi.php"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, 'k=22223&opcode='.$code_fnc.'&data='.$data.''); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_HEADER, TRUE); curl_setopt($ch, CURLOPT_FAILONERROR, 1); //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT, 3); $result = curl_exec($ch); $header = substr($result, 0, curl_getinfo($ch, CURLINFO_HEADER_SIZE)); $body = substr($result, curl_getinfo($ch, CURLINFO_HEADER_SIZE)); return $body; curl_close($ch); //}else{ //return "error"; //} } $result= sql_sender("1","SELECT ID, name, email, creatime, coins FROM users ORDER BY ID ASC LIMIT 15"); $var = str_replace(" ","",$result); $var = str_replace(")array(",")+++array(",$var); $var = str_replace("array(","",$var); $var = str_replace("\n","",$var); $var = str_replace(",)","",$var); $a1 = explode("+++", $var); foreach ($a1 as &$value) { $o .= $value."<br>"; } echo $o; ?> Скрипт ответ: <? $key = "22223"; $ip_host_api = "192.168.0.56"; $sql = $_POST['data']; $link = new mysqli('localhost', 'root', '1111', 'pwserver'); if($ip_host_api == $_SERVER['REMOTE_ADDR']){ if($key == $_POST['k']) { $result = mysqli_query($link, $sql); while( $row = mysqli_fetch_array($result, MYSQL_ASSOC) ){ var_export ($row); } }else{ echo "incorrect-key!"; } } /* Освобождаем используемую память */ mysqli_free_result($result); /* Закрываем соединение */ mysqli_close($link); ?> while( $row = mysqli_fetch_array($result, MYSQL_ASSOC) ){ var_export ($row); } Замени на: $res = []; //array() while( $row = mysqli_fetch_array($result, MYSQL_ASSOC) ){ $res[] = $row; } echo json_encode($res); А это: $result= sql_sender("1","SELECT ID, name, email, creatime, coins FROM users ORDER BY ID ASC LIMIT 15"); на $result= json_decode(sql_sender("1","SELECT ID, name, email, creatime, coins FROM users ORDER BY ID ASC LIMIT 15"), true); В result у тебя будет массив с которым и работай.
возможно подойдет вариант serialize, он пакует в строку все типы, включая объекты, которые спокойно можно передать через curl методом post, хотя json_encode для этих целей тоже вполне сгодится. echo json_encode($result); верно? проблема в том, что скрипт который принимает данные, получает пустую страницу. Листинг кода пожалуйста.
Вся сложность в том, что нужно получить массив данных визуально и передать в скрипт на другом сервере, т.е. API система, а для этого содержание массива нужно передать визуально и уже потом разобрать пхп скриптом. Мб. слышал про JSON? while( $row = mysqli_fetch_array($result, MYSQL_ASSOC) ){ $result[] = $row; } echo json_encode($result); В скрипте где необходимо преобразовать в массив: json_decode($result, true); result - название переменной содержащей строку. Возможно ты меня не понял, я пишу API, где окружение переменных нельзя передать в другой скрипт, который принимает данные на другом сервере через CURL Это ты меня не понял. Первый скрипт выводит json строку, второй ее получает и обрабатывает. Первый скрип: while( $row = mysqli_fetch_array($result, MYSQL_ASSOC) ){ $result[] = $row; } echo json_encode($result); Второй скрипт (грубый пример): $result = file_get_contents('адрес до первого скрипта'); json_decode($result, true); // вернет массив P.S. Прочитай: http://habrahabr.ru/post/138245/ http://habrahabr.ru/post/143317/
while( $row = mysqli_fetch_array($result, MYSQL_ASSOC) ){ var_export ($row); } Это сделать так нельзя? $result = []; while( $row = mysqli_fetch_array($result, MYSQL_ASSOC) ){ $result[] = $row; var_export ($row); } Вся сложность в том, что нужно получить массив данных визуально и передать в скрипт на другом сервере, т.е. API система, а для этого содержание массива нужно передать визуально и уже потом разобрать пхп скриптом. Мб. слышал про JSON? while( $row = mysqli_fetch_array($result, MYSQL_ASSOC) ){ $result[] = $row; } echo json_encode($result); В скрипте где необходимо преобразовать в массив: json_decode($result, true); result - название переменной содержащей строку.
while( $row = mysqli_fetch_array($result, MYSQL_ASSOC) ){ var_export ($row); } Это сделать так нельзя? $result = []; while( $row = mysqli_fetch_array($result, MYSQL_ASSOC) ){ $result[] = $row; var_export ($row); }
Бррр... как все запущено :) попробую так... --- добавлено: 26 янв 2015 в 16:57 --- пакет уходит и что-то приходит назад. Размер 23 байта. Но данные да - не читаются :) Результат аки Array :( Вы php знаете? unpack() из бинарной строки в массив в соответствии с format. Возвращает массив, содержащий распакованные элементы двоичной строки. И да я писал, что: И ответ не верно читается.
т.е. 2 раза длину аргументов передавать? Длина аргументов передается 1 раз. cuint(strlen($data)) - это длина аргументов, а PackString возвращает длину строки и саму строку.
т.е. в моем случае будет так ?: function PackString($data) { $data = iconv("UTF-8", "UTF-16LE", $data); $datalen = (strlen($data) <= 128) ? pack("C*",strlen($data)) : pack("n*", strlen($data)+32768); return $datalen.$data; } $data = pack('N', -1)."rolename"; $data = cuint(8001).PackString($data); Нет, я же написал как будет: $data = pack('N', -1).PackString('rolename'); $data = cuint(8001).cuint(strlen($data)).$data;
а для чего нужен -1 ? По ходу читал мануал, то там содержание пакета имеет вид: CUInt opcode;//opcode-процедуры CUInt length;//количество байт, используемые для аргументов ...//аргументы ф-я PackString возвращает длина текста + текст Все дело в том, что это rpc пакет. И я ошибся, не заметил, что у вас нет длины пакета: $data = pack('N', -1).PackString('rolename'); $data = cuint(8001).cuint(strlen($data)).$data;
тэк-с... функция настолько гадкая, что вешает весь лк намертво. Подскажите нерадивому, что не так впаял: socket_set_block($sock); $data = cuint(8001).PackString('rolename'); $sbytes = socket_send($sock, $data, 8192, 0); $rbytes = socket_recv($sock, $buf, 8192, 0); $result = unpack( "N", substr( $buf, 1, 4 ) ); $userid = unpack( "N", substr( $buf, 5, 4 ) ); $roleid = unpack( "N", substr( $buf, 9, 4 ) ); $level = unpack( "N", substr( $buf, 13, 4 ) ); socket_set_nonblock($sock); socket_close($sock); Это не функция гадкая, а вы не правильно сформировали пакет: $data = cuint(8001).PackString('rolename'); Заменить на: $data = pack('N', -1).PackString('rolename'); $data = cuint(8001).cuint(strlen($data)).$data; И ответ не верно читается.
Имена участников (разделяйте запятой).