2013-04-03 186 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'我需要包括任何擴展名。? –