Я программирую PHP-приложение, которое использует последовательное устройство для работы с GSM-модемом. Таким образом, вы можете общаться с последовательным портом через screen
и вы получите ответ, когда напишете команду.
Я использую PHP для связи с моим последовательным портом и использую sleep
ждать между командами, я вижу fopen
с w+
флаги и fwrite
отправлять команды. Я пытался использовать fread
функция, чтобы проверить, есть ли ответ, но это не так. Как это можно сделать в PHP?
концептуально f_read
должно работать, если порт настроен правильно. есть библиотека php-serial
на https://github.com/Xowap/PHP-Serial
это readPort()
функция:
public function readPort($count = 0)
{
if ($this->_dState !== SERIAL_DEVICE_OPENED) {
trigger_error("Device must be opened to read it", E_USER_WARNING);
return false;
}
if ($this->_os === "linux" || $this->_os === "osx") {
// Behavior in OSX isn't to wait for new data to recover, but just
// grabs what's there!
// Doesn't always work perfectly for me in OSX
$content = ""; $i = 0;
if ($count !== 0) {
do {
if ($i > $count) {
$content .= fread($this->_dHandle, ($count - $i));
} else {
$content .= fread($this->_dHandle, 128);
}
} while (($i += 128) === strlen($content));
} else {
do {
$content .= fread($this->_dHandle, 128);
} while (($i += 128) === strlen($content));
}
return $content;
} elseif ($this->_os === "windows") {
// Windows port reading procedures still buggy
$content = ""; $i = 0;
if ($count !== 0) {
do {
if ($i > $count) {
$content .= fread($this->_dHandle, ($count - $i));
} else {
$content .= fread($this->_dHandle, 128);
}
} while (($i += 128) === strlen($content));
} else {
do {
$content .= fread($this->_dHandle, 128);
} while (($i
+= 128) === strlen($content));
}
return $content;
}
return false;
}
( Как читать последовательный порт RS232 в PHP, как эта программа QBasic )
Других решений пока нет …