Shivaraj patil Ответов: 1

Проблема последовательного COM порта с хостинговым сервером linux с использованием PHP


// Change Parms on Comport: Linux: Windows
$command = (PHP_OS == 'Linux') ? 'mode /dev/ttyS1: BAUD=9600 PARITY=N data=8 stop=1 XON=off TO=on' : 'mode COM1: BAUD=9600 PARITY=N data=8 stop=1 XON=off TO=on';

system($command, $retVar);    

if($retVar == '127'){
    echo("Command not found:$command<br>");
    // May want to exit here.
}

//Create the resource id:  Linux: Windows
$path = (PHP_OS == 'Linux') ? '/dev/ttyS1' : 'COM1';
$fp = fopen($path, 'r+');

if(!$fp){ 
  echo"Port not accessible";
  exit();
} else {
  echo"Port COM1 opened successfully";
}

//Read from port:
$buffer = fgets($fp);

echo "<br>Data read from buffer: $buffer";


Что я уже пробовал:

Поскольку я не могу получить доступ к значению COM-порта со ссылками на Linux Server и windows server.Поэтому объясните мне, что все настройки должны быть сделаны со ссылками на Linux и windows Server.Как это ниже код работает правильно в localhost.

Как я получаю следующую ошибку-
Команда не найдена:mode /dev/ttyS1: BAUD=9600 PARITY=N data=8 stop=1 XON=off TO=on
Порт недоступен

1 Ответов

Рейтинг:
1

Jochen Arndt

Здесь нет mode команда с Linux. Соответствующая команда Linux setserial(8): get/set serial port info - man-страница Linux[^].

С использованием PHP РНР: прямые НЛ - инструкция[^] для настройки и связи с последовательными портами. Чтобы установить атрибуты порта см. PHP: dio_tcsetattr-руководство пользователя[^].

Общую информацию о последовательных портах с Linux можно найти в разделе Серийный методические указания[^].

[РЕДАКТИРОВАТЬ]
Если вы хотите использовать fopen() в случае Linux смотрите этот комментарий: PHP: fopen-руководство пользователя[^]
[/РЕДАКТИРОВАТЬ]


Shivaraj patil

Поскольку приведенный выше код работает правильно в localhost.
можем ли мы получить доступ к значениям COM с помощью функций fopen?
$path = (PHP_OS = = 'Linux') ? '/dev/ttyS1': 'COM1';
$fp = fopen($path, 'r+');
$buffer = fgets($fp);

echo " <br & gt;данные, считываемые из буфера: $buffer";

если (!$fp){
Echo " порт недоступен";
выход();
} еще {
echo " порт COM1 успешно открыт";
}
Поскольку я не получаю разрешения на доступ к значениям COM-порта, когда размещаю его на сервере Linux

Jochen Arndt

Я обновил свой ответ ссылкой на то, как использовать fopen() для последовательных портов.

Но вы должны понимать, что последовательные порты обрабатываются по-разному в Windows и Linux.

Если ваш PHP-скрипт не имеет прав на настройку последовательного порта, вы можете сделать это где-нибудь еще (например, в сценарии запуска). Если у вас нет корневого доступа к серверу, обратитесь за помощью к администратору.

Shivaraj patil

можем ли мы проверить корневой доступ или разрешение последовательного COM-порта через PHP-скрипт на сервере веб-хостинга Linux?

Jochen Arndt

Есть ли у вас какая-то оболочка удаленного входа на ваш сервер (например, с помощью SSH). Если да, используйте это и используйте su / sudo, чтобы стать root (требуется пароль).

При входе в систему выполните команду " ls-l /dev/ttyS*" (можно также выполнить как обычный пользователь). Это покажет вам владельца и группу последовательных устройств. В большинстве случаев он покажет владельцу " root "и группе" dialout", где группа имеет доступ на чтение и запись.

Самым простым решением для получения доступа к последовательным портам является добавление пользователя, выполняющего ваш PHP-скрипт, в показанную группу (dialout).

Выполнить как root:

usermod -a -G dialout user_name_excuting_the_script

Если у вас нет доступа к оболочке, вы можете выполнить вышеуказанные команды из вашего PHP-скрипта с помощью функции system (). Но те, которые требуют выполнения root, конечно же, потерпят неудачу.

Если ваш сервер имеет какой-то веб-интерфейс для администрирования, он может содержать опции для управления пользователями. Затем вы можете попытаться добавить пользователя, выполняющего сценарий, в группу удаленного доступа там.

Если вы не знаете, о чем я говорю, попросите администратора сервера помочь вам объяснить ему, что ваш скрипт нуждается в доступе к последовательным портам.