PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (1): [1]
Найдено сообщений: 8
undex
Отправлено: 27 Октября, 2016 - 11:21:50 • Тема: Что делаю не так php soket • Форум: Вопросы новичков
Ответов: 3 Просмотров: 244
armancho7777777 пишет: Пример для прослушки более одного клиента.
Благодарю, помогло. Еще один вопрос возник. У меня при закрытии одного из терминалов телнета вылетает полностью весь сокет-сервер, ошибка в кракозябрах (хотя кодировка мелкософтовская) ошибка в функции socket_read();
(Добавление)
Перевел кракозябры, текст ошибки: "Операция успешно завершена."
undex
Отправлено: 26 Октября, 2016 - 16:39:53 • Тема: Что делаю не так php soket • Форум: Вопросы новичков
Ответов: 3 Просмотров: 244
далаю скриптец для работы с сокетами, сострепал тестовый скрипт, все отлично работает, ное есть одно НО - подключится может только 1 пользователь, хотя в socket_listen прописано 10.
Вот код:
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
define ( "DB_HOST" , "localhost" ) ; // Хост базы define ( "DB_USER" , "root" ) ; // Пользователь базы define ( "DB_PASS" , "506038" ) ; // Пароль от базы define ( "DB_BASE" , "database" ) ; // Имя базы
/* Позволяет скрипту ожидать соединения бесконечно. */
/* Включает скрытое очищение вывода так что мы получаем данные
* как только они появляются. */
$address = '*.*.*.*' ;
$port = 7781 ;
$maxlistens = 10 ;
$id = 0 ;
if ( ( $sock = socket_create ( AF_INET
, SOCK_STREAM
, SOL_TCP
) ) === false ) { } else {
echo "[SERVER]: socket_create() - [OK]\n " ;
}
} else {
echo "[SERVER]: socket_bind() - [OK]\n " ;
}
} else {
echo "[SERVER]: socket_listen() - [OK]\n " ;
}
echo '[SERVER]: Socket server is started. Online users: ' . $id . "\n " ;
do {
break ;
}
/* Отправляем инструкции. */
$id ++;
$msg = "Welkome to 10.60.67.110. Date: " . date ( 'd/m/Y' ) . " | Time: " . date ( 'H:i:s' ) . "\r \n Your connect id: $id \r \n Insert '/help', to list commands\r \n [USER $id ]# " ; echo "[SERVER]: User id $id is connected \n " ;
do {
if ( false === ( $buf = socket_read ( $msgsock , 2048
, PHP_NORMAL_READ
) ) ) { break 2 ;
}
if ( ! $buf = trim ( $buf ) ) { continue ;
}
if ( $buf == '/online' ) {
$talkback = "\r \n Connected users: $id \r \n " ;
} elseif ( preg_match ( "/^\/dslam_search ([a-zA-Z0-9_\-]*)$/i" , $buf ) ) { $msg = "\r \n Please wait...\r \n " ;
$q = mysql_query ( "SELECT * FROM `shpd` WHERE `name` LIKE '%$search %'" ) ; $talkback = "\r \n ============================\r \n List DSLAM\r \n ============================\r \n " ;
$talkback .= "ID: $row[id] | Name: $row[name] | Port: $row[port] | Status: $row[status] | User: $row[user] | VPN: $row[vpn] \r \n " ;
}
$talkback .= "============================\r \n Status: 1 - used, 0 - not used, 3 - armored\r \n " ;
$talkback .= "User: 1 - Legal, 0 - Physical, 3 - Not used\r \n " ;
$talkback .= "VPN: 1 - Yes, 0 - No\r \n " ;
$talkback .= "============================\r \n " ;
} else {
$talkback = "\r \n Not found\r \n " ;
}
} elseif ( $buf == '/dslam_search' ) {
$talkback = "Used '/dslam_search DSLAM_NAME'\r \n " ;
} elseif ( preg_match ( "/^\/dslam ([0-9]*)$/i" , $buf ) ) { $msg = "\r \n Please wait...\r \n " ;
$talkback = "\r \n ============================\r \n List DSLAM\r \n ============================\r \n " ;
$talkback .= "ID: $row[id] | Name: $row[name] | Port: $row[port] | Status: $row[status] | User: $row[user] | VPN: $row[vpn] \r \n " ;
}
$talkback .= "============================\r \n Total DSLAM: $c \r \n ============================\r \n " ;
$talkback .= "============================\r \n Status: 1 - used, 0 - not used, 3 - armored\r \n " ;
$talkback .= "User: 1 - Legal, 0 - Physical, 3 - Not used\r \n " ;
$talkback .= "VPN: 1 - Yes, 0 - No\r \n " ;
$talkback .= "============================\r \n " ;
} elseif ( $buf == '/dslam' ) {
$talkback = "Used '/dslam LIMIT'\r \n " ;
} elseif ( $buf == '/mktime' ) {
$talkback = "\r \n Time mark: " . time ( ) . "\r \n " ; } elseif ( $buf == '/help' ) {
$talkback = "\r \n ============================\r \n List commands\r \n ============================\r \n " ;
$talkback .= "/online - Count connected users\r \n " ;
$talkback .= "/list_users - List database users\r \n " ;
$talkback .= "/dslam LIMIT - List DSLAM, LIMIT - limit show, numeric\r \n " ;
$talkback .= "/dslam_search DSLAM_NAME - Search DSLAM, DSLAM_NAME - name DSLAM, text\r \n " ;
$talkback .= "/mktime - Time mark\r \n " ;
$talkback .= "/help - List commands\r \n " ;
$talkback .= "/exit - close connection\r \n " ;
$talkback .= "\r \n ============================\r \n " ;
} elseif ( $buf == '/list_users' ) {
$talkback = "\r \n ============================\r \n List Users\r \n ============================\r \n " ;
$talkback .= "ID: $row[id] | Login: $row[login] | Rank: $row[rank] \r \n " ;
}
$talkback .= "============================\r \n Total users: $c \r \n ============================\r \n " ;
} elseif ( $buf == '/exit' ) {
echo "[SERVER]: Client id $id is disconected \n " ;
break ;
} elseif ( $buf == 'close' ) {
echo "[SERVER]: Client id $id is disconected and close server \n " ;
break 2 ;
} else {
$talkback = "\r \n Unknow command '$buf '\r \n " ;
}
echo "[CLIENT][id$id ]: $buf \n " ;
$talkback .= "[USER $id ]# " ;
//echo "$buf\n";
} while ( true ) ;
} while ( true ) ;
?>
Первый пользователь подключившийся водит приветственное сообщение и может свободно работать с сокетами, второй просто пустой экран, тестирую через стандартную утилиту telnet в MS WinXP. Сервер на WinServer 2003 (XAMPP)
Тестирую с разных пк в одной локальной сети.
undex
Отправлено: 10 Августа, 2016 - 13:44:51 • Тема: обновление данных в таблице mysql не UPDATE • Форум: Вопросы новичков
Ответов: 2 Просмотров: 161
Здравствуйте, столкнулся с проблемой, как обновить все записи в базе изменив только ID. Как сбросить счетчик Auto Increment нашел, а вот что бы обновить значение полей типа A_I не нашел. Задача в чем, есть база с полем ID в качестве значения A_I и есть остальные столбцы. Я обнуляю значение A_I:
И мне нужно обновить значение поля ID, что бы пошла нумерация с 1 до N, при этом не обновляя другие поля таблицы.
Есть мысль что можно циклом обновить данные поля ID, просто не хочется "костыли" лепить
undex
Отправлено: 09 Августа, 2016 - 08:02:10 • Тема: Что делаю не так str_replace (array) • Форум: Вопросы новичков
Ответов: 3 Просмотров: 220
Fart пишет: попробуй так:
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?
"Філія" , "Підрозділ" , "Найменування" , "Статус" , "Індекс" , "Хост" , "Вин.модуль" , "Тип" , "Клас" ,
"Аналогові" , "ПЗ" , "Мережа" , "Відомчі" , "Обл.центр" , "Власник" , "Монт.ємн." , "Мон.інд." , "Монт.спар." , "Монт.такс." , "Мон.АВН" , "Монт.АМТС" , "Монт.АПОР" , "Монт.ємн.поч." , "Монт.Е1" , "Змін.ємн." , "Дата змін монт.ємн." , "ЗЛ вих." , "ЗЛ вхід." , "ЗЛ двох." , "Спец.компл." , "Зад.ємн. To 19" , "E1 зад." , "АПОР" , "АВН система" , "АВН тип" , "Автовідповідач" , "Персонал" , "Дата виробництва" , "Дата вед.експл." , "Дата гарант.ПЗ" , "Дата гарант.АЧ" , "Виробник" , "Схема" , "Інв.номер" , "Примітка" , "Адреса" , "Дата редагування" ) ;
function translit( $str )
{
'А' , 'Б' , 'В' , 'Г' , 'Ґ' , 'Д' , 'Е' , 'Є' , 'Ж' , 'З' , 'И' , 'І' , 'Ї' , 'Й' ,
'К' , 'Л' , 'М' , 'Н' , 'О' , 'П' , 'Р' , 'С' , 'Т' , 'У' , 'Ф' , 'Х' , 'Ц' , 'Ч' ,
'Ш' , 'Щ' , 'Ь' , 'Ю' , 'Я' , 'а' , 'б' , 'в' , 'г' , 'ґ' , 'д' , 'е' ,
'є' , 'ж' , 'з' , 'и' , 'i' , 'ї' , 'й' , 'к' , 'л' , 'м' , 'н' , 'о' , 'п' ,
'р' , 'с' , 'т' , 'у' , 'ф' , 'х' , 'ц' , 'ч' , 'ш' , 'щ' , 'ь' , 'ю' , 'я' ) ;
'A' , 'B' , 'V' , 'H' , 'G' , 'D' , 'E' , 'Ie' , 'Zh' , 'Z' , 'Y' , 'I' , 'I' , 'I' ,
'K' , 'L' , 'M' , 'N' , 'O' , 'P' , 'R' , 'S' , 'T' , 'U' , 'F' , 'Kh' , 'Ts' , 'Ch' ,
'Sh' , 'Sch' , '' , 'Yu' , 'Ya' , 'a' , 'b' , 'v' , 'h' , 'g' , 'd' , 'e' ,
'ie' , 'zh' , 'z' , 'y' , 'i' , 'i' , 'i' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'r' ,
's' , 't' , 'u' , 'f' , 'kh' , 'ts' , 'ch' , 'sh' , 'sch' , '' , 'yu' , 'ya' ) ;
// либо return str_replace($ua, $lat, iconv('UTF-8', 'windows-1251', $str));
}
//выводим транслит ua->lat
foreach ( $str as $key => $s )
{
echo "Key:" . $key . ";---UA: " . $s . ";---LAT: " . translit( $str [ $key ] ) . "<br />" ;
}
?>
теперь не придется искать какое то слово, а лишь замени те символы транслита, которые тебе нужно.
после транслита делай ту выборку, что тебе необходима. ключи согласно массиву от 0 до 46.
Благодарю, не додумался по буквам транслитить. Сейчас попробую реализовать еще после вашего примера замену пробелов и точек на "_" и буду пытатся внести в базу
undex
Отправлено: 08 Августа, 2016 - 16:13:58 • Тема: Что делаю не так str_replace (array) • Форум: Вопросы новичков
Ответов: 3 Просмотров: 220
Вообщем дело вот в чем, нужно спарсить csv файл и прочитать "шапку" таблицы, затем перевести шапку с украинского языка в английский транслит для заноса в базу mysql
делаю это через функцию str_replace();
Вот так:
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
//тут идет начало цикла парсинга по строкам
$replace = array ( iconv ( 'UTF-8' , 'windows-1251' , "Філія" ) , iconv ( 'UTF-8' , 'windows-1251' , "Підрозділ" ) , iconv ( 'UTF-8' , 'windows-1251' , "Найменування" ) , iconv ( 'UTF-8' , 'windows-1251' , "Статус" ) , iconv ( 'UTF-8' , 'windows-1251' , "Індекс" ) , iconv ( 'UTF-8' , 'windows-1251' , "Хост" ) , iconv ( 'UTF-8' , 'windows-1251' , "Вин.модуль" ) , iconv ( 'UTF-8' , 'windows-1251' , "Тип" ) , iconv ( 'UTF-8' , 'windows-1251' , "Клас" ) , iconv ( 'UTF-8' , 'windows-1251' , "Аналогові" ) , iconv ( 'UTF-8' , 'windows-1251' , "ПЗ" ) , iconv ( 'UTF-8' , 'windows-1251' , "Мережа" ) , iconv ( 'UTF-8' , 'windows-1251' , "Відомчі" ) , iconv ( 'UTF-8' , 'windows-1251' , "Обл.центр" ) , iconv ( 'UTF-8' , 'windows-1251' , "Власник" ) , iconv ( 'UTF-8' , 'windows-1251' , "Монт.ємн." ) , iconv ( 'UTF-8' , 'windows-1251' , "Мон.інд." ) , iconv ( 'UTF-8' , 'windows-1251' , "Монт.спар." ) , iconv ( 'UTF-8' , 'windows-1251' , "Монт.такс." ) , iconv ( 'UTF-8' , 'windows-1251' , "Мон.АВН" ) , iconv ( 'UTF-8' , 'windows-1251' , "Монт.АМТС" ) , iconv ( 'UTF-8' , 'windows-1251' , "Монт.АПОР" ) , iconv ( 'UTF-8' , 'windows-1251' , "Монт.ємн.поч." ) , iconv ( 'UTF-8' , 'windows-1251' , "Монт.Е1" ) , iconv ( 'UTF-8' , 'windows-1251' , "Змін.ємн." ) , iconv ( 'UTF-8' , 'windows-1251' , "Дата змін монт.ємн." ) , iconv ( 'UTF-8' , 'windows-1251' , "ЗЛ вих." ) , iconv ( 'UTF-8' , 'windows-1251' , "ЗЛ вхід." ) , iconv ( 'UTF-8' , 'windows-1251' , "ЗЛ двох." ) , iconv ( 'UTF-8' , 'windows-1251' , "Спец.компл." ) , iconv ( 'UTF-8' , 'windows-1251' , "Зад.ємн. To 19" ) , iconv ( 'UTF-8' , 'windows-1251' , "E1 зад." ) , iconv ( 'UTF-8' , 'windows-1251' , "АПОР" ) , iconv ( 'UTF-8' , 'windows-1251' , "АВН система" ) , iconv ( 'UTF-8' , 'windows-1251' , "АВН тип" ) , iconv ( 'UTF-8' , 'windows-1251' , "Автовідповідач" ) , iconv ( 'UTF-8' , 'windows-1251' , "Персонал" ) , iconv ( 'UTF-8' , 'windows-1251' , "Дата виробництва" ) , iconv ( 'UTF-8' , 'windows-1251' , "Дата вед.експл." ) , iconv ( 'UTF-8' , 'windows-1251' , "Дата гарант.ПЗ" ) , iconv ( 'UTF-8' , 'windows-1251' , "Дата гарант.АЧ" ) , iconv ( 'UTF-8' , 'windows-1251' , "Виробник" ) , iconv ( 'UTF-8' , 'windows-1251' , "Схема" ) , iconv ( 'UTF-8' , 'windows-1251' , "Інв.номер" ) , iconv ( 'UTF-8' , 'windows-1251' , "Примітка" ) , iconv ( 'UTF-8' , 'windows-1251' , "Адреса" ) , iconv ( 'UTF-8' , 'windows-1251' , "Дата редагування" ) ) ;
$to = array ( "Filiya" , "Pidrozdil" , "Naymenuvannya" , "Status" , "Indeks" , "ost" , "Vyn_modul" , "Typ" , "Klas" , "Analohovi" , "PZ" , "Merezha" , "Vidomchi_V" , "Obl_tsentr" , "Vlasnyk" , "Mont_yemn" , "Mon_ind" , "Mont_spar" , "Mont_taks" , "Mon_AVN" , "Mont_AMT" , "Mont_APOR" , "Mont_yemn_poch" , "Mont_E1" , "Zmin_yemn" , "Data_zmin_mont_yemn" , "ZL_vy" , "ZL_vid" , "ZL_dvo" , "Spets_kompl" , "Zad_yemn" , "E1_zad" , "APOR" , "AVN_systema" , "AVN_typ" , "Avtovidpovidach" , "Personal" , "Data_vyrobnytstva" , "Data_ved_ekspl" , "Data_garant_PZ" , "Data_harant_ACh" , "Vyrobnyk" , "Sema" , "Inv_nomer" , "Prymitka" , "Adresa" , "Data_redahuvannya" ) ; // Тут второй цикл для парсинга самой строкки
// Ну далее как бы занос в базу но я для отладки вывожу все в табличном варианте
$show = $value [ $i ] ;
if ( $i == $count ) {
if ( $row == 0 ) {
//$show = str_replace($replace,$to,$show);
$text .= '<th>' . $show . '</th></tr>' ;
} else {
$text .= '<td>' . $show . '</td></tr>' ;
}
} elseif ( $i == 0) {
if ( $row == 0) {
$text .= '<tr><th>' . $show . '</th>' ;
} else {
$text .= '<tr><td>' . $show . '</td>' ;
}
} else {
if ( $row == 0) {
$text .= '<th>' . $show . '</th>' ;
} else {
$text .= '<td>' . $show . '</td>' ;
}
}
// тут всякая муть ввиде переменных счетчиков цикла
//А тут вывод
echo $text ;
В итоге в шапке таблицы не перевелось в транслит "Дата гарант.PZ X" вернее перевелось но не корректно, подскажите как быть?
undex
Отправлено: 01 Июня, 2015 - 21:05:42 • Тема: Помогите разобраться с Mod Rewite • Форум: Apache и другие веб-серверы
Ответов: 3 Просмотров: 490
Столкнулся с проблемой вопросительного знака в mod rewite
Мне нужно преобразовать урл в ЧПУ вида /$ID/i.php?$Q
в htaccess пишу следующее:
Mod Rewite отдает только первый параметр ($ID) а $Q со знаком вопроса, проглатывает
В регулярках полный 0 как и в mod rewite.
Помогите пожалуйста
Страниц (1): [1]
Powered by ExBB FM 1.0 RC1. InvisionExBB