php dio_open函数无法在wamp上工作:获取权限问题

时间:2013-12-29 07:06:30

标签: php serial-port exec

我正在处理批量短信应用,我需要连接到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:\wamp\www\serial_port\exec.php on line 8

我在Windows系统上使用PHP 5.3和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] =&gt; [1] =&gt;设备COM24的状态:[2] =&gt; ---------------------- - [3] =&gt;波特:230400 [4] =&gt;奇偶校验:无[5] =&gt;数据位:8 [6] =&gt;停止位:1 [7] =&gt;超时:OFF [ 8] =&gt; XON / XOFF:OFF [9] =&gt; CTS握手:OFF [10] =&gt; DSR握手:OFF [11] =&gt; DSR灵敏度:OFF [12] =&gt; DTR电路:ON [13] =&gt; RTS电路:ON [14] =&gt;)

但不确定为什么dio_open会发出警告以及为什么它无法打开com端口。我用谷歌搜索了这个问题,但没有找到任何帮助。如果我遗漏任何东西,请提出建议。

1 个答案:

答案 0 :(得分:0)

答案非常晚,但我已经谷歌搜索了几个小时,并希望帮助任何未来的冒险家。

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)

这会将path\file.txt转换为C:\path\file.txt,然后dio_open将按预期工作。

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

&#34; PHP无法从Windows下的串行端口读取。在Linux系统上不是这种情况,使用常见的PHP文件系统功能从COM端口读取没有问题。&#34;

PHP COM port connection with DIO