2014-03-03 22 views
2

我正在使用一个可以在我的Mac上使用HUAWEI GSM调制解调器发送和接收SMS的PHP脚本。 首先,我试图直接在终端中使用AT命令,并且我成功了。下面是我用做它的命令行:在MacOS上使用PHP脚本中的AT命令

验证哪个端口上是我的华为的调制解调器: LS -al /dev/tty.*

打开AT命令会话: 屏幕的/ dev/tty的.HUAWEIMobile调制解调器115200

然后,我可以使用AT命令,它工作正常。 但是,因为我是一个终端的新手,我不明白为什么我必须使用屏幕命令打开AT命令会话(我发现它在网页上,它的工作原理,但为什么?)。 如果我想在不使用屏幕命令的情况下打开这个AT命令会话怎么办?

然后我切换到我的PHP脚本。我尝试使用在此页面上找到的非常漂亮的一个(http://gonzalo123.com/2011/03/21/howto-sendread-smss-using-a-gsm-modem-at-commands-and-php/),并且已知它在Linux上正常工作。所以它也应该在MacOS上工作不是吗?

这个脚本首先要求设备,所以我给了它,根据我用来在终端打开AT命令会话的命令: $ serial-> deviceSet(“/ dev/tty.HUAWEIMobile-Modem “);

当我启动脚本,它返回此错误: 警告:指定串口无效在/用户/ iMac1 /文档/ MAMP/SMSing /解决方案上线2 /短信/ serial.php 72

因此,我检查第72行,使用$ device变量的第一个命令在哪里。这里的错误是合理的。命令: $ this - > _ exec(“stty -F”。$ device)

我发现它很奇怪,因为-F参数。 所以我试图改变它: $ this - > _ exec(“stty -f”。$ device)

然后当我启动我的脚本时,它什么也不做,甚至永远不会结束。

我在这里卡住了。 有人可以帮我吗?

使用下面的代码预先感谢您 路易斯

+0

如何/你在哪里运行此PHP脚本?从命令行或通过网络服务器?如果是通过网络服务器,网络服务器不可能直接访问/ dev设备。 –

+0

有趣..相当长的问题虽然:) – Hardy

+0

我运行我的php脚本从我的本地Apache服务器提供的MAMP。 – user3375680

回答

0

使用phpserial类是http://www.phpclasses.org/browse/file/17926.html

但我强烈建议使用Python和Gammu来代替PHP。 PHP不适用于操作系统。 Python确实如此。

<?php 
error_reporting(0); 

$time = time(); 
$mensaje = "Hola este es un mensaje desde Mac ".$time; 
$pais = "+58"; 
$numero = "00__myphone__00"; 



include "../php_serial.class.php"; 
$serial = new phpSerial(); 
$serial->deviceSet("/dev/tty.HUAWEIMobile-Modem"); 
$serial->deviceOpen('r+'); 
$serial->confBaudRate(9600); 

$serial->sendMessage("AT+CMGF=1\r",1); 
$serial->readPort(); 

$serial->sendMessage('AT+CMGS="'.$pais.$numero.'"'."\r",1); 
echo $serial->readPort(); 

$serial->sendMessage($mensaje."\r",1); 
echo $serial->readPort(); 

$serial->sendMessage("\x1a",2); 
echo $serial->readPort(); 

// If you want to change the configuration, the device must be closed 
$serial->deviceClose(); 

?> 
+0

感谢您的帮助,但是您所谈论的php_serial.class.php无法在Mac上运行,因为它明确为Linux和Windows设计。所以我试图添加命令来使它在Mac上正常工作,看起来问题来自stty终端命令。 如果我在终端中运行stty,它会按预期工作,但是如果我在终端中运行stty -f,它会像打开一个端口一样等待其他内容,直到用Ctrl-Z关闭它为止。考虑到Mac Terminal无法识别-F stty选项,我认为问题来自stty。让我试着按照你的建议看看Python ... – user3375680

+0

好的,我检查了php_serial.class.php,发现有问题的PHP命令: $ this - > _ dHandle = fopen($ this - > _ device,$ mode) ; 它使脚本永远不会达到其结束。 我试图用file_get_contents替换fopen。然后脚本到达尽头,但文件不再打开。 有什么想法? 预先感谢您 – user3375680

+0

我使用了上面的代码并为我工作了100%我在委内瑞拉有一个SMS&语音应用程序公司,我使用Python/Django/Sqlite/Gammu和其他技术。但我想尝试使用PHP,它不是最好的解决方案。使用Fusion搭配linux虚拟机并安装usb-modeswitch并从控制台尝试gammu。其超级简单的任何我可以帮助。请告诉我。 – eddwinpaz

0

这是一个用于发送短信没有问题的脚本。为此,您需要安装Gammu并使用控制台配置您要使用的USB Dongle。纯粹用python解决它并不是最好的方法。看下面的代码是一个工作示例在控制台上执行这个(python sms.py)。

sms.py

#!/usr/bin/env python 

import gammu 
import sys 

sm = gammu.StateMachine() 
sm.ReadConfig(2) #is gammu config 
sm.Init() 

to = '+5844444' 
body = 'Your message' 

message = { 
    'Text': body, 
    'SMSC': {'Location': 1}, 
    'Number': to, 
} 

try: 
    # Send SMS if all is OK 
    sm.SendSMS(message) 
    print 'Success, SMS was Sent' 

except gammu.ERR_UNKNOWN: 
    # Show error if message not sent 
    print 'Error, SMS not Sent' 
+0

非常感谢eddwinpaz。我在back2arie.wordpress.com上的一个很好的教程后,在我的Mac上安装了gammu。但有什么不对,因为当我尝试导入gammu时,我得到:ImportError:没有名为'gamma'的模块 对此有何想法? – user3375680

+0

tuto的主人告诉我gammu命令应该从任何地方运行。但是当我尝试它时,我得到一个“找不到的命令”。显然,gammu没有正确安装。 – user3375680

+0

嗨eddwinpaz。安装gammu时遇到困难吗?我今天早上第二次尝试了1.33版本,在配置和制作方面我几乎没有任何警告,最后一切都看起来不错。但是当我尝试运行gammu时,它仍然返回“未找到命令”。当然,如果我尝试在Python中导入gammu,我会得到“No module named'gammu'”。请帮忙。 – user3375680