我正在使用GPRS调制解调器通过this device使用php发送SMS。
我使用AT测试仪尝试了我的设备,以确定我的设备是否运行良好并成功发送。
然后,我尝试使用PHP通过GPRS调制解调器通过https://www.sitepoint.com/community/t/send-sms-using-gsm-modem/28584发送SMS的链接。
这里是提供的代码:
<?php //Example error_reporting(E_ALL); //Example $gsm_send_sms = new gsm_send_sms(); $gsm_send_sms->debug = true; $gsm_send_sms->port = 'COM4'; $gsm_send_sms->baud = 9600; $gsm_send_sms->init(); $status = $gsm_send_sms->send('+639153380630', 'testing 123'); if ($status) { echo "Message sent\ "; } else { echo "Message not sent\ "; } $gsm_send_sms->close(); //Send SMS via serial SMS modem class gsm_send_sms { public $port = 'COM4'; public $baud = 9600; public $debug = true; private $fp; private $buffer; //Setup COM port public function init() { $this->debugmsg("Setting up port: \"{$this->port} @ \"{$this->baud}\" baud"); exec("MODE {$this->port}: BAUD={$this->baud} PARITY=N DATA=8 STOP=1", $output, $retval); if ($retval != 0) { throw new Exception('Unable to setup COM port, check it is correct'); } $this->debugmsg(implode("\n", $output)); $this->debugmsg("Opening port"); //Open COM port $this->fp = fopen($this->port . ':', 'r+'); //Check port opened if (!$this->fp) { throw new Exception("Unable to open port \"{$this->port}\""); } $this->debugmsg("Port opened"); $this->debugmsg("Checking for responce from modem"); //Check modem connected fputs($this->fp, "AT\r"); //Wait for ok $status = $this->wait_reply("OK\r\n", 5); if (!$status) { throw new Exception('Did not receive responce from modem'); } $this->debugmsg('Modem connected'); //Set modem to SMS text mode $this->debugmsg('Setting text mode'); fputs($this->fp, "AT+CMGF=1\r"); $status = $this->wait_reply("OK\r\n", 5); if (!$status) { throw new Exception('Unable to set text mode'); } $this->debugmsg('Text mode set'); } //Wait for reply from modem private function wait_reply($expected_result, $timeout) { $this->debugmsg("Waiting {$timeout} seconds for expected result"); //Clear buffer $this->buffer = ''; //Set timeout $timeoutat = time() + $timeout; //Loop until timeout reached (or expected result found) do { $this->debugmsg('Now: ' . time() . ", Timeout at: {$timeoutat}"); $buffer = fread($this->fp, 1024); $this->buffer .= $buffer; usleep(200000);//0.2 sec $this->debugmsg("Received: {$buffer}"); //Check if received expected responce if (preg_match('/'.preg_quote($expected_result, '/').'$/', $this->buffer)) { $this->debugmsg('Found match'); return true; //break; } else if (preg_match('/\+CMS ERROR\:\ \d{1,3}\r\n$/', $this->buffer)) { return false; } } while ($timeoutat > time()); $this->debugmsg('Timed out'); return false; } //Print debug messages private function debugmsg($message) { if ($this->debug == true) { $message = preg_replace("%[^\040-\176\n\t]%", '', $message); echo $message . "\n"; } } //Close port public function close() { $this->debugmsg('Closing port'); fclose($this->fp); } //Send message public function send($tel, $message) { //Filter tel $tel = preg_replace("%[^0-9\+]%", '', $tel); //Filter message text $message = preg_replace("%[^\040-\176\r\n\t]%", '', $message); $this->debugmsg("Sending message \"{$message}\" to \"{$tel}\""); //Start sending of message fputs($this->fp, "AT+CMGS=\"{$tel}\"\r"); //Wait for confirmation $status = $this->wait_reply("\r\n> ", 5); if (!$status) { //throw new Exception('Did not receive confirmation from modem'); $this->debugmsg('Did not receive confirmation from modem'); return false; } //Send message text fputs($this->fp, $message); //Send message finished indicator fputs($this->fp, chr(26)); //Wait for confirmation $status = $this->wait_reply("OK\r\n", 180); if (!$status) { //throw new Exception('Did not receive confirmation of messgage sent'); $this->debugmsg('Did not receive confirmation of messgage sent'); return false; } $this->debugmsg("Message sent"); return true; } } ?>
执行代码后,PHP返回此错误:
Setting up port: "COM4 @ "9600" baud
Status for device COM4: -----------------------
Baud: 9600 Parity: None Data Bits: 8 Stop Bits: 1
Timeout: OFF XON/XOFF: OFF
CTS handshaking: OFF
DSR handshaking: OFF
DSR sensitivity: OFF
DTR circuit: ON
RTS circuit: ON
Opening port
Port opened
Checking for responce from modem
Waiting 5 seconds for expected result
Now: 1580560507, Timeout at: 1580560512
Received:
Now: 1580560508, Timeout at: 1580560512
Received:
Now: 1580560508, Timeout at: 1580560512
Received:
Now: 1580560508, Timeout at: 1580560512
Received:
Now: 1580560508, Timeout at: 1580560512
Received:
Now: 1580560508, Timeout at: 1580560512
Received:
Now: 1580560509, Timeout at: 1580560512
Received:
Now: 1580560509, Timeout at: 1580560512
Received:
Now: 1580560509, Timeout at: 1580560512
Received:
Now: 1580560509, Timeout at: 1580560512
Received:
Now: 1580560509, Timeout at: 1580560512
Received:
Now: 1580560510, Timeout at: 1580560512
Received:
Now: 1580560510, Timeout at: 1580560512
Received:
Now: 1580560510, Timeout at: 1580560512
Received:
Now: 1580560510, Timeout at: 1580560512
Received:
Now: 1580560510, Timeout at: 1580560512
Received:
Now: 1580560511, Timeout at: 1580560512
Received:
Now: 1580560511, Timeout at: 1580560512
Received:
Now: 1580560511, Timeout at: 1580560512
Received:
Now: 1580560511, Timeout at: 1580560512
Received:
Now: 1580560511, Timeout at: 1580560512
Received:
**Timed out**
**Fatal error: Uncaught Exception: Did not receive responce from modem in C:\xampp\htdocs\sms_test\text1.php:77 **
Stack trace:
#0 C:\xampp\htdocs\sms_test\text1.php(13): gsm_send_sms->init()
#1 {main} thrown in C:\xampp\htdocs\sms_test\text1.php on line 77
我正在使用GPRS MODEM在此设备上使用php发送SMS。我使用AT Tester尝试了我的设备,以确定我的设备是否运行良好并成功发送。然后我尝试了使用PHP的链接...
您的异常的根本原因是自定义生成的,不在您尝试发送SMS的AT命令序列中。我可以确认它是正确的,也可以通过您使用AT tester