Предоставление PHP разрешения на доступ к COM-порту

Я создаю php-скрипт, который подключается к модему 3G, подключенному через последовательное соединение на COM5.

Я получаю следующую ошибку, и я считаю, что это связано с тем, что php не имеет доступа r/w к COM5:

Предупреждение: fopen(COM5:) [function.fopen]: не удалось открыть поток: нет такого файла или каталога в C:\xampp\htdocs\SMStest\test2.php в строке 9

// mode com1: BAUD=9600 PARITY=N data=8 stop=1 xon=off
$fp = fopen ("COM5:", "w+");
if (!$fp) {
    echo "Uh-oh. Port not opened.";
} else {
    $e = chr(27);
    $string  = $e . "A" . $e . "H300";
    $string .= $e . "V100" . $e . "XL1SATO";
    $string .= $e . "Q1" . $e . "Z";
    echo $string;
    fputs ($fp, $string );
    fclose ($fp);
}

person Nebula    schedule 10.02.2012    source источник
comment
Да, как с двоеточием, так и без него, одна и та же ошибка.   -  person Nebula    schedule 10.02.2012
comment
Я не знаю, но, может быть, это может помочь? phpclasses.org/package/   -  person Svish    schedule 10.02.2012
comment
COM5 является виртуальным, а не физическим портом: делает что-то вроде dio_open('COM5:', O_RDWR | O_NOCTTY | O_NONBLOCK); работать вместо fopen?   -  person Mark Baker    schedule 10.02.2012
comment
Кроме того, прямо в сообщении об ошибке написано, что не так. Вы пытаетесь открыть файл с именем COM5:, но такого файла нет в каталоге, из которого выполняется ваш сценарий.   -  person Svish    schedule 10.02.2012
comment
Я пробовал dio_open, но получаю фатальную ошибку: вызов неопределенной функции dio_open(), что странно, так как должно быть частью стандартной библиотеки... @Svish COM5: виртуальный последовательный порт, к которому подключен модем 3g. Подхватывается в диспетчере устройств.   -  person Nebula    schedule 10.02.2012
comment
Кроме того, вы пытались получить доступ к объекту физического устройства? т.е. \Device\00000123 (Вы можете найти его в диспетчере устройств, свойствах, деталях, имени объекта физического устройства). Не уверен, что это вообще возможно.   -  person Leigh    schedule 10.02.2012
comment
Последнее, о чем я могу думать, вы пытались получить к нему доступ с помощью \\.\com5 ?   -  person Leigh    schedule 10.02.2012
comment
Ли огромное спасибо, это сработало! Вы можете опубликовать это как ответ, и я приму его.   -  person Nebula    schedule 13.02.2012


Ответы (1)


Есть много способов получить доступ к COM-портам в Windows, альтернативой вашему методу является открытие его по следующим путям:

\Device\00000123 (Вы можете найти правильное значение в диспетчере устройств, свойствах, деталях, имени объекта физического устройства)

\\.\com5 (Вот как бы я открывал порт как файл, если бы писал программу на C или что-то в этом роде)

person Leigh    schedule 01.03.2012