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 ...
}