Trapp Опубликовано 23 марта, 2021 (изменено) · Жалоба Коллеги, доброго дня. Внедряемся по СОРМ3, готовимся к опытной эксплуатации встал вопрос заполнения справочников СОРМа ( .csv - файлы) из биллинга UTM5 подскажите, кто-то делал такое, и возможно есть какое-то обкатанное готовое решение? Изменено 23 марта, 2021 пользователем Trapp Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bike Опубликовано 23 марта, 2021 · Жалоба 4 часа назад, Trapp сказал: Внедряемся по СОРМ3, готовимся к опытной эксплуатации встал вопрос заполнения справочников СОРМа ( .csv - файлы) из биллинга UTM5 У меня когнитивный диссонанс - "готовимся к опытной эксплуатации" vs "встал вопрос заполнения справочников". Мы на стадии подготовки ТЗ вендорам на решение по приказу 573. И уже сейчас меняем биллинг из за "встал вопрос заполнения справочников". П.С. Извиняюсь за офф топ. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 23 марта, 2021 · Жалоба Обычно производитель СОРМа выдает требования - в каком виде и какие данные ему нужно выгрузить из биллинга. У нас не UTM, но подход был именно такой. Приложением к договору на поставку СОРМ идет описание, где указано как должны называться имена файлов с данными, какие данные и в каком формате в этих файлах должны содержаться, с какой периодичностью они должны обновляться и куда выгружаться. А дальше уже софт СОРМа берет эти файлики и заполняет этими данными ИС СОРМ3. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bike Опубликовано 23 марта, 2021 · Жалоба 14 минут назад, Andrei сказал: Приложением к договору на поставку СОРМ идет описание, где указано как должны называться имена файлов с данными, какие данные и в каком формате в этих файлах должны содержаться, с какой периодичностью они должны обновляться и куда выгружаться. А дальше уже софт СОРМа берет эти файлики и заполняет этими данными ИС СОРМ3. Тут главная проблема, что нужных полей может просто не быть. Информация о структуре выгрузок не секретна, проверяйте свои базы данных и если всё хорошо - парсер Вам поможет. Или нет. :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 24 марта, 2021 · Жалоба 10 часов назад, bike сказал: проверяйте свои базы данных и если всё хорошо У меня-то все хорошо. Это топикстартеру совет. 10 часов назад, bike сказал: Тут главная проблема, что нужных полей может просто не быть. А вот это никого не волнует, кроме оператора. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Trapp Опубликовано 24 марта, 2021 · Жалоба Коллеги, в том то и вопрос, что описание всех полей у всех интеграторов СОРМ +- одинковое Вопрос найти - делал ли кто-то парсер для UTM5, чтобы не задействовать знакомого программиста ( он есть, но ленивый, почти как памятник, а пинать уже не интересно, люди то взрослые уже) либо с кем-то кто делал, или плотно работал с УТМ5 - договориться об изменениях под нас, так сказать в хорошем и взаимовыгодном темпе. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Andrei Опубликовано 24 марта, 2021 · Жалоба Если есть описание БД (или дамп для примера) + описание от производителя СОРМ, то пишите в личку. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 8 апреля, 2021 · Жалоба Делал такое, но у меня еще своя дублирующая база связанная с утм. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Antares Опубликовано 8 апреля, 2021 · Жалоба Нам куратор намекнул как то недавно, что бы им хотелось иметь базу данных абонентов, со всеми данными...не хотят видите ли они лишний раз к биллингу цепляться. Тоже думаю, как бы им выгрузить. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 8 апреля, 2021 · Жалоба @Antares ну так берем базу, выгружаем в цвс нужные поля и грузим на сорм. делов то :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Antares Опубликовано 8 апреля, 2021 · Жалоба 1 час назад, Cramac сказал: @Antares ну так берем базу, выгружаем в цвс нужные поля и грузим на сорм. делов то :) В том то и дело, что не в сорм надо ))) а куратору типа ексель, csv и т.п. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
VolanD666 Опубликовано 8 апреля, 2021 · Жалоба 23 минуты назад, Antares сказал: В том то и дело, что не в сорм надо ))) а куратору типа ексель, csv и т.п. У нас был специальный фтпшник и туда каждую неделю складывали данные в csv. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Antares Опубликовано 8 апреля, 2021 · Жалоба 42 минуты назад, VolanD666 сказал: У нас был специальный фтпшник и туда каждую неделю складывали данные в csv. А есть скриптик для забора данных из базы? ))) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
VolanD666 Опубликовано 8 апреля, 2021 · Жалоба 2 минуты назад, Antares сказал: А есть скриптик для забора данных из базы? ))) А у нас не утм-ка была. Но в приципе, зная структуру бд- такой скрипт пишется за день, а может и меньше ) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 8 апреля, 2021 · Жалоба 4 часа назад, Antares сказал: В том то и дело, что не в сорм надо ))) а куратору типа ексель, csv и т.п. ну эт не знаю, для продажи видимо :) а так, та же выгрузка, да ему куда скажет. могу свой скинуть, но опять же, там выборка с двух баз, сначала своя, потом утм Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ShumBor Опубликовано 9 апреля, 2021 · Жалоба @Trapp очень много будет зависеть от того какие поля в том же utm заполнены. Нам приходилось много дописывать, т.к. не все поля есть в стандартных. К тому же если у вас не 5+, то писать точно все самим придется. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
VolanD666 Опубликовано 9 апреля, 2021 · Жалоба 5 часов назад, ShumBor сказал: @Trapp очень много будет зависеть от того какие поля в том же utm заполнены. Нам приходилось много дописывать, т.к. не все поля есть в стандартных. К тому же если у вас не 5+, то писать точно все самим придется. А там разве нельзя кастомные поля добавлять в UTM? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dryukov Опубликовано 10 апреля, 2021 · Жалоба В 09.04.2021 в 20:22, VolanD666 сказал: А там разве нельзя кастомные поля добавлять в UTM? Я кумекал и там много вещей. Во первых это персональные данные и нужно регаться в РКН как оператор со всеми требованиями, организационными и техническими. Персональные данные и данные юриков простые операторы видеть лучше не должны да и админы, кроме того нужна политика доступа к данным с логированием к ним доступа, УТМ тут не вкатывает. Выгружать нужно изменения, поправил фамилию нужно выгружать событие с отменой старой записи, отслеживать изменения в двух базах геморно. С wifi зонами тоже нужно интегрировать, тут нужно генерировать пользователя для СОРМ но у есть только сотовый и координаты но обязательных полей нет ... потому бум решать как без обязательных требований. Про необходимость сохранения оплаты и координат автоматов и т.п. тоже не в пользу УТМ. Короче планирую выгружать пользователей в базу и минимум данных, потом отдельный человек будет заполнять все персональные данные под логи и к этой записи уже автоматом будут добавляться IP и удаляться. Ну и wifi только в базе СОРМ, чтобы УТМ не нагружать абонентами только с номером телефона, а в СОРМ выгружалось начало сессии и конец сессии, но как координаты обновлять нужно разбираться. В общем нужно будет писать под версию СОРМ-а, ну нужно соображать. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dryukov Опубликовано 10 апреля, 2021 · Жалоба Опять же нужно решать с абонентами которые в органах работают, вообще никаких данных в UTM быть не должно так зная логин пароль всё видно в личном кабинете, тупо писать "РФ" )))) А вот уже в СОРМ-овой базе всё по полной. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Antares Опубликовано 11 апреля, 2021 · Жалоба В 08.04.2021 в 20:10, Cramac сказал: ну эт не знаю, для продажи видимо :) а так, та же выгрузка, да ему куда скажет. могу свой скинуть, но опять же, там выборка с двух баз, сначала своя, потом утм Кидай, посмотрю Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ShumBor Опубликовано 12 апреля, 2021 · Жалоба @VolanD666 У нас так и сделано. Просто до этого эти данные были только в бумажных договорах. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Cramac Опубликовано 13 апреля, 2021 · Жалоба @Antares Скрытый текст <?php include ("/var/www/html/tech/admin/inc/config.php"); include ("/var/www/html/tech/admin/inc/function.php"); if($start_date = str_replace(array(" ","\r","\n"), "",file_get_contents('/var/www/html/tech/admin/sorm/date.txt')) ) echo date("d-m-Y H:i:s", $start_date); function ftp_upload ($src,$remote) { // установка соединения $conn_id = ftp_connect("10.10.10.22"); // проверка имени пользователя и пароля $login_result = ftp_login($conn_id, "", ""); // загрузка файла if (ftp_put($conn_id, $remote, $src, FTP_ASCII)) { echo "$file успешно загружен на сервер<br>\r\n"; } else { echo "Не удалось загрузить $file на сервер<br>\r\n"; } // закрытие соединения ftp_close($conn_id); } $index_arr[1]="123123"; // типы платежей которые не смотрим $dont_show_type_pay="(102,116,117,103,104,105,1,2,3,7)"; ################################# Абоненты #################################################### $city= runSQL("SELECT * FROM `acl_city` where id_user=2",$database_lan); for ($i=0;$i<count($city);$i++) { $citya.=" or city_id=".$city[$i]["id_city"]; } echo "SELECT * FROM `user` where 1=1".$citya; $user= runSQL("SELECT * FROM `user` where 1=1".$citya,$database_lan); $user_out=array(); for ($i=0;$i<count($user);$i++) { //Дом номер $res1= runSQL("SELECT * FROM doma where id='".$user[$i]["address"]."'",$database_lan); $nomer_doma = $res1[0]['nomer']; $street_id = $res1[0]['street_id']; //название улицы $res1= runSQL("SELECT * FROM street where id='$street_id'",$database_lan); $name_street = $res1[0]['name']; $id_gorod = $res1[0]['gorod_id']; $user_index=$index_arr[$res1[0]['gorod_id']]; //название города $res1= runSQL("SELECT name FROM gorod where id='$id_gorod'",$database_lan); $name_gorod = $res1[0]['name']; $kvart = $user[$i]['kvart']; $utm= runSQL(" SELECT * FROM users u, service_links sl, iptraffic_service_links isl, ip_groups ig, accounts a WHERE u.id=sl.user_id AND u.basic_account=a.id AND u.login = '".$user[$i]["login"]."' AND isl.id=sl.id AND isl.ip_group_id=ig.ip_group_id AND ig.is_deleted=0 AND u.is_deleted=0 AND sl.is_deleted=0 ORDER BY u.id ",$database_utm); /* SELECT users.id, users.login, users_accounts.account_id FROM users_accounts LEFT JOIN users ON users.id = users_accounts.`uid` where users.login='".$user[$i]["login"]."' */ $user_login_arr[]=$utm[0]["login"]; if ($utm[0]["basic_account"]!="") { $user_login_arr[]=$utm[0]["uname"]; $user_basicid_arr[$user[$i]["login"]]=$utm[0]["basic_account"]; } //print_r($utm); if ($user[$i]["data"]>$start_date or $user[$i]["update"]>$start_date) { $user_out[]=array( "1_id_filial"=>chr(34)."1".chr(34), "2_login"=>chr(34).($utm[0]["login"]!="" ? $utm[0]["uname"] : $user[$i]["login"]).chr(34), "3_static_ip"=>chr(34)."".chr(34), "4_email"=>chr(34).'-'.chr(34), "5_telefon"=>chr(34).$user[$i]["mobile_nomer"].chr(34), "6_mac"=>chr(34).''.chr(34), "7_data_reg"=>chr(34).date("d.m.Y H:i:s", $user[$i]["data"]).chr(34), "8_num_dogovor"=>chr(34).$user[$i]["id"].chr(34), "9_status_dog"=>chr(34).($user[$i]["otkl"]==0 ? "0": "1").chr(34), //0 podkl, 1 otkl "10_data_podkl_usl"=>chr(34).date("d.m.Y H:i:s", $user[$i]["data"]).chr(34), "11_data_otkl_usl"=>chr(34).($user[$i]["otkl"]!=0 ? date("d.m.Y H:i:s", $user[$i]["data_otkl"]) : "").chr(34), "12_tip_abon"=>chr(34)."0".chr(34), //0 fizik, 1 urik "13_tip_dannix_fio"=>chr(34)."1".chr(34), "14_name"=>chr(34)."".chr(34), "15_otch"=>chr(34)."".chr(34), "16_famil"=>chr(34)."".chr(34), "17_nestrukt_fio"=>chr(34).$user[$i]["name_full"].chr(34), "18_data_rogd"=>chr(34)."".chr(34), "19_tip_pasp_dann"=>chr(34)."0".chr(34), //0 - структурированные паспортные данные, 1 - неструктурированные "20_seriya_pasp"=>chr(34).$user[$i]["seria"].chr(34), "21_nomer_pasp"=>chr(34).$user[$i]["nomer"].chr(34), "22_kem_kogda_pasp"=>chr(34).$user[$i]["vidan"]." ".$user[$i]["data_vidachi"].chr(34), "23_nestrukt_pasp"=>chr(34)."".chr(34), "24_id_tip_dokumenta"=>chr(34)."1".chr(34), "25_bank_abon"=>chr(34)."".chr(34), "26_nomer_scheta_abon"=>chr(34)."".chr(34), "27_ur_name"=>chr(34)."".chr(34), "28_ur_inn"=>chr(34)."".chr(34), "29_ur_kont_lico"=>chr(34)."".chr(34), "30_ur_kont"=>chr(34)."".chr(34), "31_ur_bank"=>chr(34)."".chr(34), "32_ur_shcet"=>chr(34)."".chr(34), "33_tip_addr_abon"=>chr(34)."0".chr(34),//0 - структурированные данные, 1 - неструктурированные "34_index"=>chr(34).$user_index.chr(34), "35_strana"=>chr(34)."Россия".chr(34), "36_obl"=>chr(34)."Московская область".chr(34), "37_rayon"=>chr(34)."Орехово-Зуевский".chr(34), "38_gorod"=>chr(34).$name_gorod.chr(34), "39_ulica"=>chr(34).$name_street.chr(34), "40_dom"=>chr(34).$nomer_doma.chr(34), "41_korpus"=>chr(34)."".chr(34), "42_kvart"=>chr(34).$kvart.chr(34), "43_nestrukt_adr"=>chr(34)."".chr(34), "44_ustr_tip_addr"=>chr(34)."0".chr(34), //адрес устройства 0 - структурированные данные, 1 - неструктурированные "45_ustr_index"=>chr(34).$user_index.chr(34), "46_ustr_strana"=>chr(34)."Россия".chr(34), "47_ustr_obl"=>chr(34)."Московская область".chr(34), "48_ustr_rayon"=>chr(34)."Орехово-Зуевский".chr(34), "49_ustr_gorod"=>chr(34).$name_gorod.chr(34), "50_ustr_ulica"=>chr(34).$name_street.chr(34), "51_ustr_dom"=>chr(34).$nomer_doma.chr(34), "52_ustr_korpus"=>chr(34)."".chr(34), "53_ustr_kvart"=>chr(34).$kvart.chr(34), "54_ustr_nestrukt_adr"=>chr(34)."".chr(34), ); } } $fp = fopen('/var/www/html/tech/admin/sorm/abonents_new.csv', 'w'); foreach ($user_out as $fields) { $fields=implode(';', $fields); $fields=iconv('UTF-8', 'cp1251', $fields); fwrite($fp, $fields . PHP_EOL); } fclose($fp); ftp_upload ("/var/www/html/tech/admin/sorm/abonents_new.csv","/abonents/abonents/abonents_new.csv"); ################################# Абоненты - услуги #################################################### unset($utm); for ($i=0;$i<count($user);$i++) { //Услуга интернет //$serv= runSQL("SELECT * FROM `user` limit 10",$database_lan); $service[]=array( "1_id_filial"=>chr(34)."1".chr(34), "2_login"=>chr(34).$user[$i]["login"].chr(34), "3_num_dog"=>chr(34).$user[$i]["id"].chr(34), "4_id_uslugi"=>chr(34).'1'.chr(34), "5_data_podkl"=>chr(34).date("d.m.Y H:i:s", $user[$i]["data"]).chr(34), "6_data_otkl"=>chr(34).($user[$i]["data_otkl"]>0 ? date("d.m.Y H:i:s", $user[$i]["data_otkl"]) : "").chr(34), "7_nastroyki"=>chr(34)."".chr(34) ); //ищем обещанный if ($user_basicid_arr[$user[$i]["login"]]!="") { $utm= runSQL("SELECT * FROM payment_transactions where actual_date>'".$start_date."' and method in ('103','104') and account_id =".$user_basicid_arr[$user[$i]["login"]]." ",$database_utm); for ($q=0;$q<count($utm);$q++) { $service[]=array( "1_id_filial"=>chr(34)."1".chr(34), "2_login"=>chr(34).$user[$i]["login"].chr(34), "3_num_dog"=>chr(34).$user[$i]["id"].chr(34), "4_id_uslugi"=>chr(34).$utm[$q]["method"].chr(34), "5_data_podkl"=>chr(34).date("d.m.Y H:i:s", $utm[$q]["actual_date"]).chr(34), "6_data_otkl"=>chr(34).date("d.m.Y H:i:s", $utm[$q+1]["actual_date"]).chr(34), "7_nastroyki"=>chr(34)."".chr(34) ); $q=$q+1; } } //ищем турбо } $fp = fopen('/var/www/html/tech/admin/sorm/services.csv', 'w'); foreach ($service as $fields) { $fields=implode(';', $fields); fwrite($fp, $fields . PHP_EOL); } fclose($fp); //ftp_upload ("/var/www/html/tech/admin/sorm/services.csv","/abonents/services/services.csv"); ############################## Справочники - тип услуг ########################################################## $tip_service=array(); $tip_service[]=array( "1_id_filial"=>chr(34)."1".chr(34), "2_id_uslugi"=>chr(34)."1".chr(34), "3_obozn_uslugi"=>chr(34).'интернет'.chr(34), "4_start_time"=>chr(34).'01.01.1970 00:00:00'.chr(34), "5_end_time"=>chr(34)."".chr(34), "6_opisanie"=>chr(34).'интернет'.chr(34) ); $tip_service[]=array( "1_id_filial"=>chr(34)."1".chr(34), "2_id_uslugi"=>chr(34)."104".chr(34), "3_obozn_uslugi"=>chr(34).'Обещанный платеж'.chr(34), "4_start_time"=>chr(34).'01.01.1970 00:00:00'.chr(34), "5_end_time"=>chr(34)."".chr(34), "6_opisanie"=>chr(34).'Обещанный платеж'.chr(34) ); $fp = fopen('/var/www/html/tech/admin/sorm/supplement_services.csv', 'w'); foreach ($tip_service as $fields) { $fields=implode(';', $fields); $fields=iconv('UTF-8', 'Windows-1251', $fields); fwrite($fp, $fields . PHP_EOL); } fclose($fp); //ftp_upload ("/var/www/html/tech/admin/sorm/supplement_services.csv","/dictionaries/supplement-services/supplement_services.csv"); ############################## Справочники - тип документов ########################################################## $tip_dok=array(); $tip_dok[]=array( "1_id_filial"=>chr(34)."1".chr(34), "2_id_dok"=>chr(34)."1".chr(34), "3_start_time"=>chr(34)."01.01.1970 00:00:00".chr(34), "4_end_time"=>chr(34).''.chr(34), "5_opisanie"=>chr(34)."Паспорт РФ".chr(34) ); $fp = fopen('/var/www/html/tech/admin/sorm/doc_types.csv', 'w'); foreach ($tip_dok as $fields) { $fields=implode(';', $fields); $fields=iconv('UTF-8', 'Windows-1251', $fields); fwrite($fp, $fields . PHP_EOL); } fclose($fp); //ftp_upload ("/var/www/html/tech/admin/sorm/doc_types.csv","/dictionaries/doc-types/doc_types.csv"); ############################## Справочники - способов оплаты ########################################################## $tip_pay=array(); $paytype= runSQL("SELECT * FROM `payment_methods` where id not in ".$dont_show_type_pay,$database_utm); for ($i=0;$i<count($paytype);$i++) { $tip_pay[]=array( "1_id_filial"=>chr(34)."1".chr(34), "2_id_tippay"=>chr(34).$paytype[$i]["id"].chr(34), "3_start_time"=>chr(34)."01.01.1970 00:00:00".chr(34), "4_end_time"=>chr(34).''.chr(34), "5_opisanie"=>chr(34).$paytype[$i]["name"].chr(34) ); } $fp = fopen('/var/www/html/tech/admin/sorm/pay_types.csv', 'w'); foreach ($tip_pay as $fields) { $fields=implode(';', $fields); $fields=iconv('UTF-8', 'Windows-1251', $fields); fwrite($fp, $fields . PHP_EOL); } fclose($fp); //ftp_upload ("/var/www/html/tech/admin/sorm/pay_types.csv","/dictionaries/pay-types/pay_types.csv"); ############################## Справочники - 7.6Пополнение баланса личного счета ########################################################## $pay=array(); for ($i=0;$i<count($user);$i++) { /*$pays= runSQL("SELECT payment_transactions.method,payment_transactions.actual_date,payment_transactions.payment_incurrency FROM `users` left join users_accounts on users_accounts.uid=users.id left join payment_transactions on users_accounts.account_id=payment_transactions.account_id where users.login='".$user[$i]["login"]."' and payment_transactions.method not in ".$dont_show_type_pay." ",$database_utm);*/ $pays= runSQL("SELECT method,actual_date,payment_incurrency FROM `payment_transactions` where actual_date>'".$start_date."' and account_id='".$user_basicid_arr[$user[$i]["login"]]."' and method not in ".$dont_show_type_pay." ",$database_utm); for($q=0;$q<count($pays);$q++) { $pay[]=array( "1_id_filial"=>chr(34)."1".chr(34), "2_id_tippay"=>chr(34).$pays[$q]["method"].chr(34), "3_numdog"=>chr(34).$user[$i]["id"].chr(34), "4_statikip"=>chr(34).''.chr(34), "5_data"=>chr(34).date("d.m.Y H:i:s",$pays[$q]["actual_date"]).chr(34), "6_summa"=>chr(34).$pays[$q]["payment_incurrency"].chr(34), "7_dopinfo"=>chr(34).''.chr(34) ); } } $fp = fopen('/var/www/html/tech/admin/sorm/balance-fillup.csv', 'w'); foreach ($pay as $fields) { $fields=implode(';', $fields); $fields=iconv('UTF-8', 'Windows-1251', $fields); fwrite($fp, $fields . PHP_EOL); } fclose($fp); ftp_upload ("/var/www/html/tech/admin/sorm/balance-fillup.csv","/payments/balance-fillup/balance-fillup.csv"); //записываем дату $fp = fopen('/var/www/html/tech/admin/sorm/date.txt', 'w'); fwrite($fp, time() . PHP_EOL); fclose($fp); Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Antares Опубликовано 14 апреля, 2021 · Жалоба @Cramac Спасибо, гляну Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
inettel_mal Опубликовано 6 мая, 2021 · Жалоба Всем привет, как получить текущий ip абонента? На данный момент получаю так: select ipid from discount_transactions_iptraffic_all where account_id = 213213 order by id desc limit 1; Но такая реализация занимает кучу времени если её выполнять для всех абонентов Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
VolanD666 Опубликовано 11 мая, 2021 · Жалоба В 06.05.2021 в 22:28, inettel_mal сказал: Всем привет, как получить текущий ip абонента? На данный момент получаю так: select ipid from discount_transactions_iptraffic_all where account_id = 213213 order by id desc limit 1; Но такая реализация занимает кучу времени если её выполнять для всех абонентов Дык может выгружать все ИПы одним запросом в хеш и дальше уже смотреть там? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...