2013-04-03 187 views
1

我知道我可能会这么多的投票,但请帮助我通过这个,因为我几乎在那里。我有下面的代码。不发送脚本消息

<?php 
exec("mode COM1 BAUD=9600 PARITY=N data=8 stop=1 xon=off"); 
$fp = fopen ("\\.\com1", "r+"); 
//$fp = dio_open('COM5:', O_RDWR | O_NOCTTY | O_NONBLOCK); 
if (!$fp) 
{ 
    echo "Uh-oh. Port not opened."; 
} 
else 
{ 

    $string = "AT+CMGF=1"; 

    $string = $string."OK"; 

    $string = $string."AT+CMGS='+44XXXXX'"; 

    $string = $string."> Hello World?<Ctrl>+<Z>"; 

    $string = $string."+CMGS: 44"; 

    $string = $string."OK"; 

    fputs ($fp, $string); 
    echo $string."\n"; 
    fclose ($fp); 
} 

?> 

上面的代码是输出AT+CMGF=1OKAT+CMGS='+44XXXX'> Hello World?++CMGS: 44OK但实际上并没有发送任何消息到该号码。

我有设备连接到其中有SIM卡的PC。

我该怎么做?

回答

4

从我所知道的AT命令来看,它是一个对话。您必须发送AT+CMGF=1然后等待调制解调器发送OK,发送下一个命令等。

您现在正在发送所有内容,包括调制解调器在一个字符串中的响应。

的更多信息(总是)在维基百科:http://en.wikipedia.org/wiki/Hayes_command_set

的代码应该是沿着线(从我的头顶,未测试):

$string = "AT+CMGF=1"; 
fputs($fp, $string); 
$r = fgets($fp); 
if ($r == "OK") { 
    $string = "AT+CMGS='+44XXXXX'"; 
    fputs($fp, $string); 
    $r = $fgets($fp); 
    ... etc ... 
} 
+0

感谢名单答复我读的地方我需要使用睡眠命令几秒到AT命令来响应...是那个.. ..我怎么样才能在终端测试它? –

+0

我会使用阻止阅读。请注意,我只是使用'fgets'来解释如何去做。你必须弄清楚你自己的时间和格式(这很大程度上取决于调制解调器和连接)。有了[此功能](http://php.net/manual/en/function.stream-set-blocking.php),你可以将'fgets'设置为阻止。 –

+0

好吧,我现在到目前为止,只是想知道为什么PHP不执行'AT + CMGS'我需要包括任何扩展名。? –