Я пытался играть с доступом к последовательному порту с PHP, но не имел большой удачи.
Я пробовал использовать fsockopen
, fopen
, proc_open
и т. Д. Я не могу читать или писать в сокет.
Пример:
$fp = fopen("/dev/ttyUSB0", "w+"); fwrite("enable"); echo fread($fp, 1024);
Я сталкивался с этим много раз в прошлом. Когда-то создавался интерфейс управления для Cisco 2811. Это может работать для вас, хотя я не уверен в вашей версии IOS (предполагая, что Cisco из-за вашего fwrite();
через консоль).
Посмотрите, есть ли у пользователя первый доступ к устройству. Легко, это можно сделать с помощью screen /dev/ttyUSB0
. Запустите свои команды, чтобы отсоединить, нажмите ctrl+a
затем d
.
Я обычно использую семейство stream_*
для чего-то вроде этого.
Вот пример:
$stream = stream_socket_client("udg:///dev/ttyUSB0", $errno, $errstr, 30); fwrite($stream, "enable"); while(true){ $line = stream_get_contents( $stream ); if($line == 'exit'){ break; } }
в$stream = stream_socket_client("udg:///dev/ttyUSB0", $errno, $errstr, 30); fwrite($stream, "enable"); while(true){ $line = stream_get_contents( $stream ); if($line == 'exit'){ break; } }
По умолчанию stream_socket_client
запускается в режиме блокировки, поэтому вам не нужно вручную переключать его.
Еще одна вещь, которую вы можете сделать, если не возражать, что установка расширения – это расширение DirectIO
. Он обладает функциями, позволяющими вам установить скорость передачи и все лакомства, например здесь .
Вы можете даже взглянуть на этот проект: http://code.google.com/p/php-serial/source/browse/trunk/