По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Друг, в статье быстро покажем, как заставить звонить IP – телефон Grandstream GXP1610 в связке с IP – АТС Asterisk. Настройки выполним с помощью графической оболочки FreePBX 14. Let's get it started! $dbName_ecom = "to-www_ecom"; $GoodID = "2524508967"; mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); mysql_select_db($dbName_ecom) or die(mysql_error()); $query_ecom = "SELECT `model`, `itemimage1`, `price`, `discount`, `url`, `preview115`, `vendor`, `vendorCode` FROM `items` WHERE itemid = '$GoodID';"; $res_ecom=mysql_query($query_ecom) or die(mysql_error()); $row_ecom = mysql_fetch_array($res_ecom); echo 'Кстати, купить '.$row_ecom['vendor'].' '.$row_ecom['vendorCode'].' можно в нашем магазине Merion Shop по ссылке ниже. С настройкой поможем 🔧 Купить '.$row_ecom['model'].''.number_format(intval($row_ecom['price']) * (1 - (intval($row_ecom['discount'])) / 100), 0, ',', ' ').' ₽'; $dbName_ecom = "to-www_02"; $GoodID = "2524508967"; mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); mysql_select_db($dbName_ecom) or die(mysql_error()); Пошаговое видео Настройка FreePBX Открыв FreePBX переходим в меню Applications → Extensions, нажимаем + Add Extension и создаем сущность вида Chan_Sip. Внутри страницы настройки: User Extension - желаемый номер для аппарата; Display Name - имя, которое увидим на дисплее телефонного аппарата; Обратите внимание, по умолчанию, chan_sip слушает пор 5160! Из поля Secret скопируйте пароль, который FreePBX сгенерировал для нового номера. Сохраняем настройки. Настройка GXP1610 Следующее, что нам предстоит сделать – выяснить IP – адрес (если он получил его по протоколу DHCP), который наш подключенный в сеть GXP1610 получил. Все очень просто – на дисплее телефона нажмите на кнопку NextScr - вот и наш IP – адрес. Открываем новую вкладку в браузере и попадаем на страницу графической оболочки (web gui) нашего Grandstream GXP1610. Вводим логин и пароль. По умолчанию, логин для входа - admin, пароль такой же - admin SIP – регистрации на телефоне нет – исправляем. Открываем Accounts → General Settings и начинаем заполнять поля: Account Name - имя учетной записи. Например, Мерион Нетворкс; SIP Server - IP – адрес сервера Asterisk и через двоеточие порт, на котором слушает chan_sip. Например, 192.168.2.19:5160; Outbound Proxy - аналогично сип – серверу, IP – адрес сервера Asterisk и через двоеточие порт; SIP User ID - номер телефона, который создали на FreePBX. Например, 155; Authenticate ID - аналогично как выше, внутренний номер. Например, 155; Authenticate Password - пароль, который вы скопировали из поля Secret на этапе настройки FreePBX; Name - указываем тоже самое, что и в поле Account Name; Account Display - рекомендуем выбрать User ID, чтобы на дисплее телефона отображался номер, а не имя. Все-таки, дисплей не очень большой :); Нажимаем Save and Apply Проверка В меню навигации в WEB – интерфейсе управления телефоном нажмите на Status. Если в опции SIP registration на зеленом фоне указано Yes, то телефон успешно зарегистрирован. Не получилось? Напиши свой вопрос в комментариях – поможем :)
img
  Введение Типы данных применяются для того, чтобы вы могли классифицировать один конкретный тип данных в языках программирования. Например, число и строка символов – это разные типы данных, которые JavaScript будет обрабатывать по-разному.  Это очень важно, так как тип данных, который вы используете, будет определять, какие значения вы можете присвоить переменной и что вы можете с ней делать. Этим я хочу сказать, что для того, чтобы выполнять операции с переменными в JavaScript, вы должны знать тип данных любой заданной переменной.  В этой статье мы обсудим то, как работают типы данных в JavaScript, а также основные типы данных, которые есть в этом языке. Этот обзор нельзя назвать полноценным, но он поможет вам ознакомиться с дополнительными возможностями JavaScript. Динамическая типизация JavaScript работает с динамическими типами данных, а это значит, что проверка соответствия типов выполняется на этапе выполнения программы, а не на этапе ее компиляции. Типы данных Python также имеют динамическую типизацию. Если мы говорим о динамически типизированных языках, то здесь переменная с одним и тем же именем может хранить разные типы данных. Например, переменная  t , которая была определена с помощью ключевого слова  let (не забывайте, что  let ограничивает область действия переменной), может хранить разные типы данных, а может быть инициализирована, но не определена: let t = 16; // t is a number { // t – это число } let t = "Teresa"; // t is a string { // t – это строка } let t = true; // t is a Boolean { // t – это логическое значение } let t; // t is undefined { // t неопределена } Все переменные, перечисленные выше, могут иметь любой тип данных, который есть в JavaScript; тип этих переменных явно объявлять не требуется.  Числа  В JavaScript есть всего один числовой тип, то есть здесь нет отдельных обозначений для целых чисел и чисел с плавающей точкой. Вследствие этого числа в JavaScript можно записывать как с десятичной точкой, так и без нее: let num1 = 93; let num2 = 93.00; И в том, и в другом случае тип данных – число, и он один и тот же, неважно записано число с десятичной точкой или нет.  В JavaScript можно использовать экспоненциальное представление для того, чтобы сократить очень большие и очень маленькие числа: let num3 = 987e8; // 98700000000 let num4 = 987e-8; // 0.00000987 Точность чисел в JavaScript составляет 15 цифр. Это значит, что после того, как запись числа дойдет до 16-ой цифры, число будет округлено: let num5 = 999999999999999; // remains as 999999999999999 { // остается как 999999999999999 } let num6 = 9999999999999999; // rounded up to 10000000000000000 { // округляется до 10000000000000000 } Помимо обычного представления чисел, у числового типа данных в JavaScript есть три символьных значения: Infinity – числовое значение, которое символизирует  положительное число, близкое к бесконечности. -Infinity – числовое значение, которое символизирует  отрицательное число, близкое к бесконечности. NaN – числовое значение, которое символизирует  нечисло , обозначающее не числовое значение.  Вы получите в качестве результата  Infinity или  -Infinity , если вычислите число, которое находится за пределами диапазона доступных чисел в JavaScript, а также для значений, которые не определены, например, если поделите на ноль: let num7 = 5 / 0; // will return Infinity { // вернет Infinity } let num8 = -5 / 0; // will return –Infinity { // вернет - Infinity } Говоря техническим языком,  Infinity отобразится в том случае, если число превысит значение  1.797693134862315E+308 , которое считается верхним пределом JavaScript.  И аналогично,  -Infinity отобразится в том случае, если число превысит нижний предел, а именно  1.797693134862316E+308 . Кроме того,  Infinity можно использовать в циклах: while (num9 != Infinity) { // Code here will execute through num9 = Infinity       { // Код будет выполняться вплоть до num9 = Infinity } } NaN  будет отображаться для недопустимых чисел. В случае, если вы попытаетесь выполнить какую-нибудь математическую операцию над числом и нечислом, то в качестве результата вы получите  NaN : let x = 20 / "Shark"; // x will be NaN { // переменной x будет присвоено значение NaN } Из-за того, что число  20 нельзя разделить на строку  “Shark” (мы не получим в результате число), возвращаемое значение для переменной  x будет равно  NaN . Однако, если строку можно определить как числовое значение, то математическое выражение вполне может быть выполнено: let y = 20 / "5"; // y will be 4 { // переменной y будет присвоено значение 4 } В примере выше строка  "5" может быть определена как число, именно поэтому JavaScript может ее интерпретировать как число, и оно будет работать с математическим оператором деления.  Если переменной, которая используется в операции, присвоено значение  NaN , то в результате вы также получите значение  NaN , даже если другой операнд является допустимым числом: let a = NaN; let b = 37; let c = a + b;  // c will be NaN { // переменной c будет присвоено значение NaN } В JavaScript есть всего один числовой тип данных. Если вы работаете с числами, то любое число, которое вы введете, будет интерпретировано как тип данных для чисел; и поскольку JavaScript имеет динамическую типизацию, вам не нужно явно объявлять тип данных. Строки Строка – это последовательность, состоящая из одного или нескольких символов (букв, цифр, символов). Строки могут оказаться довольно полезными, так как могут представлять текстовые данные.  В JavaScript строки можно записывать как в одинарных кавычках, так и в двойных. Так что, для того, чтобы создать строку, вам просто нужно заключить последовательность символов в кавычки: let singleQuotes = 'This is a string in single quotes.'; let doubleQuotes = "This is a string in double quotes."; Вы можете использовать любые кавычки (одинарные или двойные), но они должны быть одинаковыми во всей программе.  Программа «Hello, World!» демонстрирует то, как можно использовать строки в программировании. Так, символы, которые составляют фразу  Hello, World! в  alert() ниже, представляют собой строку.   hello.html

Когда мы запустим код и нажмем кнопку  Click me , мы увидим всплывающее окно со следующим текстом: Output Hello, World! По аналогии с другими типами данных, строки можно хранить в переменных: let hw = "Hello, World!"; А также выводить строки, указав в  alert() эту самую переменную: hello.html ... ... Output Hello, World! Существует огромное количество операций, которые можно выполнять со строками, чтобы достичь того результата, который мы хотим. Строки нужны для того, чтобы программа могла передавать информацию пользователю, а пользователь мог передавать информацию обратно в программу. Логические значения Переменные  логического типа данных могут принимать только два значения:  true или  false (истина или ложь). Логические значения используются для того, чтобы представлять значения истинности, которые относятся к логическому разделу математики, используемому в алгоритмах информатики.  Во многих математических операциях ответы можно определить, как истинные или ложные: больше чем 500 > 100 -  true 1 > 5 -  false меньше чем 200 < 400 -  true 4 < 2 -  false равно 5 = 5 -  true 500 = 400 -  false Как и другие типы данных, логические значения можно хранить в переменных: let myBool = 5 > 8; // false Поскольку 5 не больше, чем 8, то это значит, что значение переменной  myBool будет равно  false . По мере того, как вы будете практиковаться и писать все больше и больше программ на JavaScript, вы начнете лучше понимать, как работают логические значения и различные функции и операции, вычисляющие значения  true или  false , которые, в свою очередь, могут в корне изменить ход программы. Массивы Массив может хранить сразу несколько значений в одной переменной. Это значит, что внутри массива вы можете хранить список значений и перебирать их. Значения внутри массива называются  элементами . Обращаться к элементам массива можно с помощью их порядковых номеров.  Строки – это символы в кавычках, а массивы – это значения в квадратных скобках.  Массив строк, например, будет выглядеть вот так: let fish = ["shark", "cuttlefish", "clownfish", "eel"]; Если мы вызовем переменную  fish , то получим следующее: ["shark", "cuttlefish", "clownfish", "eel"] Массивы – это очень гибкий тип данных. Это так, поскольку они являются изменяемы, то есть мы можем добавлять элементы в массив, удалять элементы из массива и менять элементы в массиве.   Объекты Объекты в JavaScript могут хранить несколько значений в виде пар  имя:значение . Таким образом, обеспечивается удобный способ хранения данных и доступа к ним. Синтаксис объектного литерала следующий: пара имя:значение, разделенные двоеточием и заключенные в фигурные скобки. Как правило, объекты используются для того, чтобы хранить какие-то связанные данные, например, информацию, содержащуюся в ID. Если свойств несколько, то объектный литерал записывается следующим образом: let sammy = {firstName:"Sammy", lastName:"Shark", color:"blue", location:"ocean"}; Есть альтернативный вариант, который в особенности касается объектов с большим количеством пар имя:значение, - объекты можно записать в несколько строк с пробелом после каждого двоеточия: let sammy = {    firstName: "Sammy",    lastName: "Shark",    color: "blue",    location: "Ocean" }; Переменная типа объект  sammy во всех примерах выше имеет четыре свойства:  firstName ,  lastName ,  color и  location , и все эти переданные значения разделены двоеточием.  Работа с несколькими типами данных Несмотря на то, что программа, которую вы создаете, будет содержать несколько типов данных, важно не забывать о том, что операции, как правило, вы будете выполнять с одним и тем же типом данных. То есть математические операции вы будете выполнять с числами, а срезы делать у строк.  Если вы используете оператор, который может работать с разными типами данных, например, оператор + (который может складывать числа и объединять строки), то можете получить довольно неожиданные результаты.  Например, если вы будете использовать оператор + с числами и строками одновременно, числа будут интерпретироваться как строки (то есть они будут объединены со строками). Однако порядок типов данных может влиять на то, как они будут объединяться. Таким образом, если вы создадите переменную, которая выполняет следующую операцию объединения, то JavaScript будет интерпретировать все элементы как строки: let o = "Ocean" + 5 + 3; И если вы вызовете переменную  o , то получите вот такой результат: Output Ocean53 Однако, если первым типом данных будет число, то JavaScript сначала сложит эти два числа, а когда программа дойдет до строки  "Ocean" , это число будет проинтерпретировано как строка. Именно поэтому в качестве результата вы получите сумму двух чисел, объединенную со строкой: let p = 5 + 3 + "Ocean"; Output 8Ocean Из-за того, что могут происходить вот такие непредвиденные вещи, вы, вероятнее всего, будете выполнять все операции исключительно с одним типом данных, а не с несколькими. Так или иначе, в отличие от некоторых других языков программирования JavaScript не возвращает ошибок, если вы одновременно используете разные типы данных.  Заключение Теперь вы знаете некоторые основные типы данных, которые есть в JavaScript. Все эти типы могут оказаться полезными при разработке программных проектов на JavaScript.
img
SSH (Secure Shell) обеспечивает безопасное удаленное соединение между двумя системами. С помощью этого криптографического протокола вы можете управлять машинами, копировать или перемещать файлы на удаленном сервере через зашифрованные каналы. Существует два способа входа в удаленную систему через SSH - с использованием аутентификации по паролю или аутентификации с открытым ключом (вход SSH без пароля). В этом руководстве вы узнаете, как настроить и включить вход по SSH без пароля. Подготовка Нам необходимо: Доступ к командной строке или окну терминала Пользователь с привилегиями sudo или root Локальный сервер и удаленный сервер Доступ по SSH к удаленному серверу через командную строку или окно терминала Перед тем как начать проверьте существующие ключи SSH. Возможно, на вашем компьютере уже есть пара ключей SSH. Чтобы узнать, есть ли у вас в системе ключи SSH, выполните команду: ls -al ~/.ssh/id_*.pub Если в выводе указано, что таких файлов нет, переходите к следующему шагу, который показывает, как сгенерировать ключи SSH. Если они у вас есть, вы можете использовать существующие ключи, сделать их резервную копию и создать новую пару или перезаписать ее. Шаг 1. Создайте пару ключей SSH 1. Первое, что вам нужно сделать, это сгенерировать пару ключей SSH на машине, на которой вы сейчас работаете. В этом примере мы генерируем 4096-битную пару ключей. Мы также добавляем адрес электронной почты, но это необязательно. Команда такая: ssh-keygen -t rsa -b 4096 -C "your_email@domain.com" 2. Затем введите место, где вы хотите сохранить ключи, или нажмите Enter, чтобы принять путь по умолчанию. 3. Также вам будет предложено установить кодовую фразу. Хотя это делает соединение еще более безопасным, оно может прерываться при настройке автоматизированных процессов. Поэтому вы можете ввести пароль или просто нажать Enter, чтобы пропустить этот шаг. 4. Затем в выводе сообщается, где хранятся идентификационный и открытый ключ, а также выдается отпечаток ключа. 5. Убедитесь, что вы успешно создали пару ключей SSH, выполнив команду: ls -al ~/.ssh/id_*.pub Вы должны увидеть путь идентификационного ключа и открытого ключа, как на скриншоте ниже: Шаг 2. Загрузите открытый ключ на удаленный сервер Вы можете загрузить публичный SSH-ключ на удаленный сервер с помощью команды ssh-copy-id или команды cat. Вариант 1. Загрузить открытый ключ с помощью команды ssh-copy-id Чтобы включить беспарольный доступ, вам необходимо загрузить копию открытого ключа на удаленный сервер. 1. Подключитесь к удаленному серверу и используйте команду ssh-copy-id: ssh-copy-ide [remote_username]@[server_ip_address] 2. Открытый ключ автоматически копируется в файл .ssh/authorized_keys. Вариант 2: загрузить открытый ключ с помощью команды cat Другой способ скопировать открытый ключ на сервер - использовать команду cat. 1. Начните с подключения к серверу и создания на нем каталога .ssh. ssh [remote_username]@[server_ip_address] mkdir -p .ssh 2. Затем введите пароль для удаленного пользователя. 3. Теперь вы можете загрузить открытый ключ с локальной машины на удаленный сервер. Команда также указывает, что ключ будет храниться под именем authorized_keys во вновь созданном каталоге .ssh: cat .ssh/id_rsa.pub | ssh [remote_username]@[server_ip_address] 'cat >> .ssh/authorized_keys' Шаг 3. Войдите на сервер без пароля После создания пары ключей SSH и загрузки открытого ключа на удаленный сервер вы должны иметь возможность подключаться к выделенному серверу без ввода пароля. Проверьте, работает ли установка, выполнив команду: ssh [remote_username]@[server_ip_address] Система должна напрямую входить в систему на удаленном сервере, пароль не требуется. Примечание: убедившись, что вы можете подключаться к удаленному серверу SSH без пароля, рассмотрите возможность полного отключения аутентификации по паролю SSH. Это добавит еще один уровень безопасности и защитит ваш сервер от bruteforce атак. Дополнительно: Устранение неполадок с разрешениями файлов удаленного сервера Права доступа к файлам на удаленном сервере могут вызвать проблемы с входом в SSH без пароля. Это обычная проблема со старыми версиями SSH. Если после выполнения всех шагов вам все еще предлагается ввести пароль, начните с редактирования прав доступа к файлам на удаленном сервере. Установите разрешения 700 для каталога .ssh. Установите разрешения 640 для каталога .ssh/authorized_keys. Отредактируйте права доступа к файлу с помощью следующей команды: ssh [remote_username]@[server_ip_address] "chmod 700 .ssh; chmod 640 .ssh/authorized_keys" При появлении запроса введите свой пароль. Если действие было успешным, вывода не будет. Итог Если вы хотите автоматизировать обновления и другие задачи или беспрепятственно подключаться к удаленному серверу по SSH, вам следует включить вход по SSH без пароля. Инструкции в этой статье должны помочь вам в этом.
ЛЕТНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59