phpdio_open函数不适用于wamp:获取权限问题



我正在开发批量短信应用程序,需要连接到GSM调制解调器来发送和接收短信。作为脚本的一部分,我使用dio_open函数连接到COM端口来发送AT命令。但dio_open函数抛出警告,无法打开com端口。

Warning: dio_open() [<a href='function.dio-open'>function.dio-open</a>]: cannot open file COM24: with flags 0 and permissions 0: Invalid argument in C:wampwwwserial_portexec.php on line 8

我使用的是PHP 5.3,在windows系统上安装了wamp。下面我提到了我正在使用的PHP代码。

<?php
$output = array();
exec('mode COM24: baud=230400 data=8 stop=1 parity=n',$output);
// execute 'help mode' in command line of Windows for help
print_r($output);
$fd = dio_open('COM24:', O_RDONLY);
if(!$fd)
{
echo "Connection not working";
}
else
{
echo "Connection working";
}
?>

我认为exec命令作为数组中的返回输出运行良好。

阵列([0]=>[1]=>设备COM24的状态:[2]=>---------------------------[3]=>波特率:230400[4]=>奇偶校验:无[5]=>数据位:8[6]=>停止位:1[7]=>超时:OFF[8]=>XON/XOFF:OFF[9]=>CTS握手:OFF[10]=>DSR握手:OFF[11]=>DSR-灵敏度:OFF[12]=>DTR电路:ON[13]=>RTS电路:ON[11]=>)

但不确定dio_open为什么发出警告,以及为什么无法打开com端口。我在谷歌上搜索了这个问题,但没有找到任何有用的东西。请告知我是否遗漏了什么。

答案很晚,但我已经在谷歌上搜索了几个小时,我想帮助任何未来的冒险家。

dio_open在Windows中使用相对路径。以这个片段为例。

// Open file for write (create if doesn't exist)
if (!$fp = dio_open($path, O_WRONLY | O_CREAT, 0644)) {
error('Unable to open file for writing: ' . $path);
}

在UNIX中,这应该可以正常工作。在Windows中,它会抱怨您无法创建文件,即使我指定了O_CREAT

您需要指定完整路径。以下是我在示例中的做法。

realpath(dirname($path))."/".basename($path)

这将把pathfile.txt转换为C:pathfile.txt,然后dio_open将按预期工作。

我知道这与OP没有直接关系,因为他在询问COM端口。如果你正在寻找,请参阅这篇文章:

"在Windows下,PHP无法从串行端口读取。Linux系统不是这样,在Linux系统上,使用常见的PHP文件系统函数从COM端口读取没有问题。">

PHP COM端口与DIO 的连接