Verification: a143cc29221c9be0

Path or set the php executablepath setting

Path or set the php executablepath setting

Зачем использовать конфиги

Зачем использовать XML-конфиги

XML-конфиги для телефонов Grandstream проще создавать и редактировать, т.к., в отличие от не-XML-конфигов Grandstream, они не содержат бинарных данных и представляют из себя обычные текстовые файлы. Впрочем, алгоритм создания не-XML-конфигов Grandstream уже реализован в модуле «OSS PBX End Point Manager», настоящая причина использования XML-конфигов для телефонов Grandstream — возможность шифрования XML-конфигов.

Зачем использовать шифрованные конфиги

Данные для подключения телефона к серверу по SIP указаны в конфиг-файле в открытом виде, поэтому их шифрование является хорошей идеей, особенно если нужен доступ к хранилищу конфигов из удалённых точек через интернет.

Установка «OSS PBX End Point Manager»

Как уже упоминалось выше, для провижининга телефонов Grandstream можно использовать модуль FreePBX «OSS PBX End Point Manager». Для того, чтобы этот модуль делал XML-конфиги для телефонов Grandstream, требуется доработка модуля.
Для начала установим модуль «OSS PBX End Point Manager». Для этого в web-интерфейсе FreePBX заходим в раздел настроек Admin -> Module Admin

Web-интерфейс FreePBX раздел настроек Admin - Module Admin

Включаем установку неподдерживаемых модулей и нажимаем «Check Online» для проверки доступных для установки модулей.

Включение установки неподдерживаемых модулей. FreePBX

Находим в списке модуль «OSS PBX End Point Manager», нажимаем на названии модуля для отображения доступных действий, нажимаем «Install»

Модуль OSS PBX End Point Manager

Нажимаем кнопку «Process» в правом верхнем или правом нижнем углу страницы для установки модуля «OSS PBX End Point Manager»

Установка модуля OSS PBX End Point Manager

После завершения установке применяем изменения в FreePBX нажатием «Apply Config».

Базовая настройка «OSS PBX End Point Manager»

Заходим в раздел настроек Connectivity -> OSS Endpoint Advanced Settings, заполняем там поля:

IP address of phone server — IP-адрес сервера Asterisk, к которому должны подключаться IP-телефоны (в данном примере — 192.168.1.100)
Configuration Type — выбираем «File (TFTP/FTP)» (провижининг всё равно можно будет делать и по TFTP и по HTTP/HTTPS)
Global Final Config & Firmware Directory — указываем корень TFTP-сервера (обычно /tftpboot/)
Time Zone (like USA-5) — выбираем свой часовой пояс
Time Server (NTP Server) — указываем NTP-сервер, который будут использовать IP-телефоны (в данном примере это IP-адрес сервера Asterisk, т.к. на нём запущен и NTP-сервер)
Disable TFTP Server Check — отмечаем, чтобы отключить проверку TFTP-сервера

Завершаем настройку нажатием кнопки «Update Globals»

Базовая настройка модуля OSS PBX End Point Manager

Переходим в раздел настроек Connectivity -> OSS Endpoint Configuration, нажимаем «Check for Updates», через некоторое время должен отобразиться список всех доступных модулей для «OSS PBX End Point Manager».

Устанавливаем модуль Grandstream и включаем любую модель из раздела «GXP Enterprise HD series», например GXP1400 (не имеет значения, т.к. их конфиги идентичны).

Установка модуля Grandstream. FreePBX

Включение модели из раздела "GXP Enterprise HD series", GXP1400

На данном этапе уже можно делать провижининг телефонов Grandstream, но мы пойдём дальше и изменим код модуля таким образом, чтобы он создавал шифрованные XML-конфиги.

Модификация модуля «OSS PBX End Point Manager» под свои нужды

Редактирование шаблона конфигов

Для начала, сменим имя шаблона конфигов для телефонов Grandstream с cfg$mac на cfg$mac.xml. Для этого нужно переименовать файл шаблона и поменять имя шаблона в таблице MySQL endpointman_product_list

cd /var/www/html/admin/modules/_ep_phone_modules/endpoint/grandstream/gxphd
mv cfg$mac cfg$mac.xml

имя пользователя, пароль и имя базы данных для выполнения следующего запроса можно посмотреть в файле /etc/freepbx.conf

mysql -u freepbxuser -p asterisk -e ‘UPDATE ‘endpointman_product_list’ SET ‘config_files’=»cfg$mac.xml» WHERE ‘cfg_dir’=»gxphd»‘

Заходим в раздел FreePBX Connectivity -> OSS Endpoint Advanced Settings, далее в подраздел «Product Options/Configuration Editor», выбираем из списка «Select Product» значение «GXP Enterprise HD Series [2100,2110,2120]», нажимаем кнопку Select. В списке «Local File Configs» должен быть шаблон cfg$mac.xml, кликните на имя шаблона для редактирования.

Редактирование шаблона cfg$mac.xml в списке "Local File Configs"

В теле шаблона содержится конфиг в старом формате, нужно удалить оттуда всё, вписать текст конфига в формате XML и нажать кнопку Save. Ниже общий пример конфига для телефонов Grandstream (расшифровку параметров конфига, а также полный список параметров для конкретных моделей телефонов можно узнать из шаблонов, предоставляемых производителем [[http://www.grandstream.com/sites/default/files/Resources/config-template.zip]]).

?xml version=»1.0″ encoding=»UTF-8″ ?>


{$mac}
    





admin





0


1



{$firmware_srv_path}



1

ru


1


{$username.line.1}


1


{$transport.line.1}


1


0


3


120


{$server_host.line.1}:{$server_port.line.1}


{$username.line.1}


{$username.line.1}


{$secret.line.1}


{$username.line.1}


0


{$dialplan}


*97


1


TZQ-3


{$network_time_server}



1



0






2


1


0


1
     

Рекомендуется поменять пароли администратора и пользователя (параметры P2 и P196), также обратите внимание на часовой пояс (параметр P64), пояс TZQ-3 совместим с московским временем (GMT+3), полный список часовых поясов можно посмотреть в шаблах предоставляемых производителем.

Редактирование кода модуля

1. Редактируем файл /var/www/html/admin/modules/_ep_phone_modules/endpoint/grandstream/gxphd/phone.php
Нужно закомментировать отрывок, заменяющий «+» на «%2B» (в XML-конфиге не нужно заменять «+» в строке диалплана) и добавить код для правильной кодировки используемого транспорта для SIP (0 — UDP, 1 — TCP, 2 — TLS).

if (isset($this->settings[‘dialplan’]))
{
$this->settings[‘dialplan’] = str_replace(«+», «%2B», $this->settings[‘dialplan’]);
}

должно стать

/*if (isset($this->settings[‘dialplan’]))
{
$this->settings[‘dialplan’] = str_replace(«+», «%2B», $this->settings[‘dialplan’]);
}*/

foreach ($this->settings[‘line’] as $key => $data)
{
      if (isset($this->settings[‘line’][$key][‘transport’]))
        {
            if($this->settings[‘line’][$key][‘transport’] == ‘UDP’)
{ $this->settings[‘line’][$key][‘transport’] = ‘0’; }
            if($this->settings[‘line’][$key][‘transport’] == ‘TCP’)
{ $this->settings[‘line’][$key][‘transport’] = ‘1’; }
            if($this->settings[‘line’][$key][‘transport’] == ‘TLS’)
{ $this->settings[‘line’][$key][‘transport’] = ‘2’; }
        }
}

2. Редактируем файл /var/www/html/admin/modules/_ep_phone_modules/endpoint/grandstream/base.php
В этом файле нужно полностью закомментировать функции parse_gs_config и gs_config_out (они нужны для создания старых конфигов Grandstream) и отредактировать функцию create_encrypted_file
изначальная версия create_encrypted_file

function create_encrypted_file($list)
{
   $temporary_directory_location = function_exists(‘sys_get_temp_dir’) ? sys_get_temp_dir() : ‘/tmp’;
   foreach ($list as $key => $data)
   {
     file_put_contents($temporary_directory_location . «/» . $key, $data);
     if (file_exists(«/usr/src/GS_CFG_GEN/bin/encode.sh»))
     {
       exec(«/usr/src/GS_CFG_GEN/bin/encode.sh » . $this->mac . » » . $temporary_directory_location . «/» . $this->mac . «.cfg » . $temporary_directory_location . «/cfg» . $this->mac);
       $contents = file_get_contents($temporary_directory_location . «/cfg» . $this->mac);
       unlink($temporary_directory_location . «/cfg» . $this->mac);
     } else
       {
         $params = $this->parse_gs_config($temporary_directory_location . «/» . $key);
         $contents = $this->gs_config_out($this->mac, $params);
       }
       $files[«cfg» . $this->mac] = $contents;
       unlink($temporary_directory_location . «/» . $key);
   }
   return($files);
}

отредактированная версия

function create_encrypted_file($list)
{
  $temporary_directory_location = function_exists(‘sys_get_temp_dir’) ? sys_get_temp_dir() : ‘/tmp’;      foreach ($list as $key => $data)
  {
    file_put_contents($temporary_directory_location . «/» . $key, $data);
    exec(‘/usr/bin/dos2unix ‘ . $temporary_directory_location . «/» . $key);
    exec(‘/usr/bin/openssl enc -e -aes-256-cbc -k encryption_password -in ‘ . $temporary_directory_location . «/» . $key . ‘ -out ‘ . $temporary_directory_location . «/cfg» . $this->mac);
    $contents = file_get_contents($temporary_directory_location . «/cfg» . $this->mac);
    $files[«cfg» . $this->mac] = $contents;
  }
return($files);
}

Сгенерированный файл будет зашифрован с помощью алгоритма AES-256-CBC и пароля encryption_password (замените на свой). Также обратите внимание на то, что в коде указан абсолютный путь к приложениям dos2unix и openssl, путь верен для дистрибутива CentOS 6, если используете другой дистрибутив, скорректируйте пути, если они не верны (также указанные приложения должны быть установлены в системе).

Настройка завершена, можно создавать конфиги для телефонов Grandstream. Для тестирования рекомендуется сперва закомментировать строку, вызывающую openssl для шифрования и убедиться, что модуль генерирует правильные XML-конфиги, альтернативно можно расшифровать и прочитать конфиг-файл с помощью команды:

openssl enc -d -aes-256-cbc -k encryption_password -in cfg000b82001122.xml -out cfg000b82001122_dec.xml

Why are you getting the No PHP Executable is Set Error?

Well, before going to the solution, it is better to understand what the heck is this problem and in what ways we will be solving it.

Cannot validate since no php executable is set. Use the setting "php.validate.executablePath" to configure the php executable

This problem is due to the reason that the path to the PHP executable (that is, php.exe) is not set in the Visual Studio Code. Now, the path of the PHP executable depends upon the OS(Operating System) and the development environment that you are using (like: XAMPP, WAMPP etc).

So, you might have guessed that the solution of the problem is some what related to setting the path of the PHP executable and you are absolutely right.

Steps to solve the no php executable error in VS Code:

Step 1. Our first step will be to find out the path where the PHP executable is installed.

Finding out path of PHP executable in File Explorer

As I am a windows 10 user, so I know that mostly the PHP executable’s path is located at C:/xampp/php/php.exe but it depends upon you, that while installing the server which location you had chosen. By default, when you install XAMPP, it suggest you the same location as mentioned above.

As much as I know, this default location in Linux and MacOS is at /usr/bin/php but as I had mentioned earlier, it might be different in your situation. So, you will have to check it out manually by yourself.

Step 2. Open Visual Studio Code.

Step 3. Click Files > Preferences > Settings. This will take you to the settings.

Open up settings in Visual Studio Code by Clicking on Files > Preferences > Settings.

Another short way to open the settings is: Click on the gear icon in the bottom-left side of the window > Settings. (Shortcut command to open up the settings is: Ctrl+,).

Open up Settings in VS Code by clicking on the gear icon in the bottom-left side of the window > Settings.

Step 4. Now, you will see a small icon in the top-right corner, when you will hover upon it, it will display “Open Settings (JSON)”, click on it.

Opening Settings.json in VS Code.

This step will open up the settings.json file.

Step 5. Now, put a comma at the end and paste the following code.

php.validate.executablePath”: “C:/xampp/php/php.exe

Adding code to the settings.json file in VS Code.

and this code for the macOS and Linux users:

php.validate.executablePath”: “/usr/bin/php”

Step 6. Now, you can save the file by File > Save or by pressing Ctrl+S. If you are a macOS user, then you can save it by pressing CMD+S.

Saving updates done in settings.json file in VS Code.

Step 7. Shut down the VS Code window and open it up again. You will see that the warning that you were facing before has gone. Hurray!!

But, you have to be confirm that you have added the PHP path to the environment’s PATH variable.

You must once checkout whether it is set or not. If it isn’t set then you can follow the following steps to set it.

Steps to set the PHP PATH in Environment Variables:

Step 1. Open up search, type environment. 

Edit the system environment variables in windows search results

Here you can see “Edit the system environment variables” option in search results. Click on it, this will take you to System Properties.

Step 2. Open up the Advanced tab, and click on Environment Variables, this will open up Environment Variables settings.

Click Environment Variables in Advanced Tab in System Properties

Step 3. Under User variables, you will see a variable Path, select it and click on Edit.

Under User variables, you will see a variable Path, select it and click on Edit.

This step will open up a new window for you to edit the Path environment variable.

Step 4. If you had added the path then you can edit it by click on the Edit button.

If you are going to add it for the first time, click on New. Here enter the path of PHP directory (Make sure not to enter php.exe at the end).

Adding PHP Directory path in the PATH environment variable

Note: If you will input the path with forward slash(/) you can get a path component error. So, please replace forward slash(/) with backward slash(\). 

Adding PHP Directory path in the PATH environment variable using Browse feature/

You can also choose the path by clicking on Browse and then browse the location of the php folder and click OK.

That’s all, now the path has been added to the environment variables.

Устанавливаем плагин atom-beautify (для IDE Atom) правильно

Прежде чем начать, кратко отрезюмирую последовательность действий по установке плагина atom-beautify.

  1. Устанавливаем плагин atom-beautify в IDE Atom.
  2. Устанавливаем плагин php-cs-fixer в IDE Atom.
  3. Устанавливаем OpenServer на диск C: (он распакуется в папку).
  4. Заходим в папку OpenServer на диске C:, в папку modules, в папку php и ищем в  ней папку с PHP последней версии. У меня путь к интерпретатору получился C:\OpenServer\modules\php\PHP_7.4\php.exe Запоминаем этот путь (а лучше записываем), он нам ещё пригодится.
  5. Устанавливаем Composer. Качать тут https://getcomposer.org/download/ Во время установки инсталлятор может попросить указать путь к интерпретатору PHP. Указываем тот, что в п.4
  6. В консоли выполняем команду composer global require friendsofphp/php-cs-fixer Чтобы вызвать консоль, прожимаем Win-R, вводим в поле команду cmd и жмём ОК. Вот она, консоль (чёрное окно с белыми буквами).
  7. Возможно, для работы Композера, понадобится прописать путь к php.exe в системную переменную среды — Path.
    Для этого идём в Панель управления — Безопасность и система — Система — Дополнительные параметры системы — Переменные среды, делаем двойной клик на надпись Path в табличке, жмём кнопку «Создать» и добавляем туда папку где лежит php.exe (C:\OpenServer\modules\php\PHP_7.4).
  8. Проверяем, находится-ли php-cs-fixer.bat по пути C:\Users\имя_пользователя\AppData\Roaming\Composer\vendor\bin\php-cs-fixer.bat, и если да, то переходим в Atom, жмём там «Ctrl-,» и видим окно Settings.
  9. В окне Settings клацаем пункт меню Packages, а в нём — на плагин php-cs-fixer
  10. В настройках php-cs-fixer в поле PHP executable path пишем C:\OpenServer\modules\php\PHP_7.4\php.exe, а в поле PHP-CS-fixer executable path пишем C:\Users\имя_пользователя\AppData\Roaming\Composer\vendor\bin\php-cs-fixer.bat

    Картинка кликабельна.
  11. В настройках atom-beautify мотаем до PHP, раскрываем и смотрим, чтобы не было никаких лишних путей, а так же ставим галку на Beautify On Save.

    Картинка кликабельна.
  12. Открываем php файл, жмём Ctrl-Alt-B и убеждаемся, что ошибок больше не вылазит.

А теперь пара слов о том, что заняло несколько часов и чуть не привело к выбрасыванию Atom’а, вместе с его плюшками, в помойку.

Помогло? Зашли Админу на чай.


Atom — замечательная и бесплатная IDE (среда разработки), созданная под патронажем всеми любимого GitHub. Тут много приятных вещиц, облегчающих и ускоряющих труд программиста. Но…

Вот такая ошибка смотрит на меня с экрана в данный момент: The «PHP — PHP-CS-Fixer Path (cs_fixer_path)» configuration option has been deprecated. Please switch to using the option in section «Executables» (near the top) in subsection «PHP-CS-Fixer» labelled «Path» in Atom-Beautify package settings.

Сейчас расскажу что с этим делать, но сперва несколько пояснений что да как.

Продукт бесплатный. Плагины пилят энтузиасты. А ещё, эта IDE кроссплатформенная. Т.е. доступна и на Linux’ах, и на Mac OS… Ну и вы, презренные недоразрабы, сидящие на кодомерзком Windows, тоже располагайтесь рядышком со мной, на коврике в проходе.

Не рассчитан Atom на Windows. Работать работает, но стоит захотеть вкусностей, и всё, готовь свой огромный бубен к изнурительному камланию. У вас ведь есть бубен?

Вот взять к примеру плагин Linter и нужную его часть, плагин php-linter. Принцип работы прост. Код выполняется раз в -дцать секунд, и если интерпретатор PHP находит ошибку в строке, эта строка в редакторе будет помечаться красным кружочком и снабдится подсказкой с текстом ошибки.

Но есть нюанс. Он не работает от слова «вообще». Вместо того, чтобы искать ошибки, плюёт в тебя окошками с ошибками собственного сочинения.

Чтобы заставить его работать, пришлось поставить OpenServer, загнать на него тестовые сайты, добавить папки этих сайтов как проекты в Atom, и, внимание, прописать в настройках php-linter путь к интерпретатору php из ОпенСервера.

У меня это c:\OpenServer\modules\php\PHP_7.4\php.exe

Будьте внимательны! Папок с интерпретаторами PHP у ОпенСервера несколько.

И вот результат — всё работает как надо!

Но, к чему я рассказываю про php-linter? К тому, что путь к PHP нужен плагину, о котором этот пост. И он не будет работать, если в коде скрипта есть ошибки.