Php 不从脚本发送消息

Php 不从脚本发送消息,php,serial-port,at-command,Php,Serial Port,At Command,我知道我可能会投很多反对票,但请帮我度过难关,因为我快到了。我有下面的代码 <?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."; }

我知道我可能会投很多反对票,但请帮我度过难关,因为我快到了。我有下面的代码

<?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=1处发送
,然后等待调制解调器发送
确定
,发送下一个命令等

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

有关维基百科的更多信息(一如既往):

代码应该是(在我的脑海中,未经测试):


据我所知,这是一个对话。您必须在+CMGF=1处发送
,然后等待调制解调器发送
确定
,发送下一个命令等

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

有关维基百科的更多信息(一如既往):

代码应该是(在我的脑海中,未经测试):


Thanx对于回复,我在某个地方读到,我需要使用sleep命令几秒钟,以AT命令来响应…是这样吗…?我如何在终端中测试它?我会使用阻塞读取。注意,我刚才用了
fgets
来解释如何做。您必须自己确定时间和格式(这在很大程度上取决于调制解调器和连接)。使用,您可以将
fgets
设置为blocking。好的,我已经讲了这么多,只想知道为什么php不在+CMGS执行
AT
我需要包括任何扩展吗?调制解调器没有响应的大变化。首先尝试使用
minicom
或HyperTerm之类的工具了解其行为。Bart是正确的-在尝试编程之前,您应该在HyperTerminal或minicom中手动输入AT命令序列。观察对每个命令的响应。然后你就会明白调制解调器的真正行为。Thanx作为回复,我在某个地方读到,我需要使用sleep命令几秒钟,才能使用AT命令进行响应…是这样吗?我如何在终端中测试它?我会使用阻塞读取。注意,我刚才用了
fgets
来解释如何做。您必须自己确定时间和格式(这在很大程度上取决于调制解调器和连接)。使用,您可以将
fgets
设置为blocking。好的,我已经讲了这么多,只想知道为什么php不在+CMGS执行
AT
我需要包括任何扩展吗?调制解调器没有响应的大变化。首先尝试使用
minicom
或HyperTerm之类的工具了解其行为。Bart是正确的-在尝试编程之前,您应该在HyperTerminal或minicom中手动输入AT命令序列。观察对每个命令的响应。然后您将了解调制解调器的实际工作方式。
$string = "AT+CMGF=1";
fputs($fp, $string);
$r = fgets($fp);
if ($r == "OK") {
  $string = "AT+CMGS='+44XXXXX'";
  fputs($fp, $string);
  $r = $fgets($fp);
  ... etc ...
}