<?php /*-----------------------------------------+ | Gammu phpClass | Author : Stieven R. Kalengkian | Contact : stieven.kalengkian@gmail.com | Website : www.glowciptamedia.com | Version : 2.1 | Last Update : April, 26 2007 | Tested OS : Linux Slackware 11.0 and Windows XP Pro (unlicense demo only) | PHP ver. : 5.1 | MySQL ver : 5.0 | Apache Web Server : 1.x and 2.0 | Gammu Version : 1.10.00 built 22:52:25 Apr 18 2006 in MS VC .NET 2003 (win32 and linux) | | Solution Problem : | The solution to the "No configuration file found" error is to put a copy of the gammurc | in the directory whrein your php files are found specifically the one that uses the gammu class. | Reference >> Classes of Davis Muhajereen D. Dimalen | | Description: | Gammu API with PHP | (only if you wan't running daemon) | I recommended you to use Gammu | --smsd MYSQL see | http://www.gammu.org/wiki/index.php?title=Gammu:Full_reference_manual | this is my custom API-SMS. | | Gammu Command : | gammu nothing --identify | gammu nothing --deleteallsms [INBOX_ID] | gammu nothing --getsmsfolders | gammu nothing --getallsms | gammu nothing --getallmemory ME|SM | echo [text] | gammu nothing --sendsms TEXT [number] | | Change log | v2.1 | - Add function enable_sudo([int]) | set 1 if using sudo for gammu command exe ------------------------------------------*/ class gammu { /* Initializing gammu bin/EXE */ var $gammu = "/usr/local/bin/gammu"; var $replacemen = array("\n","\t","\r"); var $dataBuffer; var $filedb = "smsbox.txt"; var $TextEncrypt = 0; var $sudo = 1; //var $configFile = "/etc/gammurc"; /* Locate gammurc files (fullpath) */ function gammu($ex="") { if ($ex!="") { $this->gammu = $ex; } } function gammu_exe($exe,&$respon) { $respon=array(); if (file_exists($this->gammu)) { if ($this->sudo == 1) { @exec("sudo ".$exe,$respon); } else { @exec($exe,$respon); } } else { array_push($respon,"Can not found $this->gammu or Gammu is not installed"); } //print_r($respon); } function Send($number=0,$text,$validity=0,$report=0,$reply=0,&$respon) { $option=""; // if ($report == 1) { $option.="-report "; } // if ($validity != 0) { $option.="-validity $validity "; } // if ($reply == 1) { $option.="-reply "; } $text=str_replace($this->replacemen," ",$text); if ($number) { if ($this->sudo == 1) { exec("echo $text | sudo ".$this->gammu." nothing --sendsms TEXT $number $option -autolen ".strlen($text)."",$rs); } else { $this->gammu_exe("echo $text | ".$this->gammu." nothing --sendsms TEXT $number $option -autolen ".strlen($text)."",$rs); } } for($i=0;$i<count($rs);$i++) { $respon.=$rs[$i]."\r\n"; } $this->Error=$respon; if (eregi("OK",$respon)) { return 1; } else { $this->Error=$respon; return 0; } } function Identify(&$MANUFACTURER,&$MODEL,&$IMEI,&$SIM_IMSI,&$NetworkName,&$NetworkLevel,&$BatteryLevel,&$respon) { $x=0; $this->gammu_exe($this->gammu." nothing --identify",$rs); for($i=0;$i<count($rs);$i++) { $r.=$rs[$i]."\r\n"; } $this->gammu_exe($this->gammu." nothing --monitor 1",$rs); for($i=0;$i<count($rs);$i++) { $r.=$rs[$i]."\r\n"; } if(eregi("Error opening device",$r)) { $respon="Not Connected ($r) [Error opening device]"; return 0; } if (eregi("No configuration file found",$r)) { $respon="No configuration file found"; return 0; } if (eregi("Gammu is not installed",$r)) { $respon=$r; return 0; } if (preg_match("/Manufacturer(.+):(.+)/",$r,$s)) { $MANUFACTURER=trim(str_replace("\n","",$s[2])); $respon=""; $x++; } if (preg_match("/Model(.+):(.+)/",$r,$s)) { $MODEL=trim(str_replace("\n","",$s[2])); $respon=""; $x++; } if (preg_match("/IMEI(.+):(.+)/",$r,$s)) { $IMEI=trim(str_replace("\n","",$s[2])); $respon=""; $x++; } if (preg_match("/SIM IMSI(.+):(.+)/",$r,$s)) { $SIM_IMSI=trim(str_replace("\n","",$s[2])); $respon=""; $x++; } if (preg_match("/Battery level(.+):(.+)/",$r,$s)) { $BatteryLevel=trim(str_replace("\n","",$s[2])); $respon=""; $x++; } if (preg_match("/Network level(.+):(.+)/",$r,$s)) { $NetworkLevel=trim(str_replace("\n","",$s[2])); $respon=""; $x++; } if (preg_match("/Network (.+):(.+)/",$r,$s)) { $NetworkName=trim(str_replace("\n","",$s[2])); $respon=""; $x++; } if ($x > 0) { return 1; } } function Del($d,&$respon) { $this->gammu_exe($this->gammu." nothing --deleteallsms $d",$rs); for($i=0;$i<count($rs);$i++) { $respon.=$rs[$i]."\r\n"; } } function Get() { //Checking SMS INBOX Folder $this->dataBuffer=false; //$this->gammu_exe($this->gammu." nothing --getsmsfolders",$rs); for($i=0;$i<count($rs);$i++) { if (preg_match("/^(.). \"(.+)Inbox\", phone\s*/",$rs[$i],$s)) { $this->Inbox_PHONE=trim(str_replace("\n","",$s[1])); } else if (preg_match("/^(.). \"(.+)Inbox\", SIM\s*/",$rs[$i],$s)) { $this->Inbox_SIM=trim(str_replace("\n","",$s[1])); } else if (preg_match("/^(.). \"(.+)Outbox\", phone\s*/",$rs[$i],$s)) { $this->Outbox_PHONE=trim(str_replace("\n","",$s[1])); } else if (preg_match("/^(.). \"(.+)Outbox\", SIM\s*/",$rs[$i],$s)) { $this->Outbox_SIM=trim(str_replace("\n","",$s[1])); } else if (eregi("Error opening device",$rs[$i])) { $respon="Error opening device"; return $respon; } } $trimData=array(" ","\n","\r","\t","\"","'"); $this->gammu_exe($this->gammu." nothing --geteachsms",$rs); $x=0;$y=0; for ($i=0;$i<count($rs);$i++) { //echo $rs[$i]; //Initializing Data if (eregi("^SMS message",$rs[$i])) continue; if (preg_match("/Location (.+), folder \"(.+)\"/",$rs[$i],$d)) { $folder=$d[2]; if ($folder == "Outbox") { $fid=$x; $x++; } if ($folder == "Inbox") { $fid=$y; $y++; } //$fid=$x; //$x++; $data[$folder][$fid]=array(); $data[$folder][$fid]['location']=trim($d[1]); } //Inbox SMS Center Buffer else if (preg_match("/^SMSC number(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$folder][$fid]['SMSC']=trim($d[2]); } //Outbox Ref Number Buffer else if (preg_match("/^Reference number(.+): (.+)/",$rs[$i],$d)) { $data[$folder][$fid]['REFNUM']=trim($d[2]); } //Inbox SentTime Buffer else if (preg_match("/^Sent (.+): (.+)/",$rs[$i],$d)) { $u=strtotime(trim($d[2])); if (!$u or $u <=0) { $u=date("U"); } $data[$folder][$fid]['SentTime']=date("Y-m-d H:i:s",$u); } //Coding Buffer else if (preg_match("/^Coding (.+): (.+)\s*/",$rs[$i],$d)) { $data[$folder][$fid]['Coding']=trim($d[2]); } //Phone Number Buffer else if (preg_match("/^Remote number(.+): \"(.+)\"\s*/",$rs[$i],$d)) { $number=trim($d[2]); if (substr($number,0,1) == "0") { $number=substr($number,1,strlen($number)); $number="+62".$number; } $data[$folder][$fid]['Number']=$number; } //Status Buffer else if (preg_match("/^Status (.+): (.+)\s*/",$rs[$i],$d)) { $data[$folder][$fid]['Status']=trim($d[2]); } //Buffer linked else if (preg_match("/(.+)Concatenated \(linked\) message, ID \((.+)\) (.+), part (.+) of (.+)/",$rs[$i],$d)) { $data[$folder][$fid]['link']['coding']=trim($d[2]); $data[$folder][$fid]['link']['id']=trim($d[3]); $data[$folder][$fid]['link']['part']=trim($d[4]); } //Buffer Other Information else if (preg_match("/^(.+) : (.+)\s*/",$rs[$i],$d)) { $data[$folder][$fid][trim(str_replace($trimData,"",$d[1]))]=trim($d[2]); } //Buffer Other Body else { //By Pass last line or info for Gammu UNIX/LINUX version if (preg_match("/(.+) SMS parts in (.+) SMS sequences/",$rs[$i],$xxx)) continue; //Buffer BODY if (trim($rs[$i])) { $data[$folder][$fid]['body'].=htmlspecialchars(trim(addslashes($rs[$i]))); } } $data[$folder][$fid]['ID']=md5($data[$folder][$fid]['body'].$data[$folder][$fid]['Number'].$data[$folder][$fid]['SentTime'].$data[$folder][$fid]['location']); } //$this->dataBuffer=$data; return $data; //return 1; //asort($this->dataBuffer); } function setFile($filedb) { $this->filedb=$filedb; } function setEncryptText($t) { $this->TextEncrypt=$t; } function SaveTXT(&$respon) { if ($this->dataBuffer) { $write="";$writeDump=""; if (!file_exists($this->filedb)) { $fp=@fopen($this->filedb,"w+") or $respon="Can not create file $this->filedb"; } $fp=@fopen($this->filedb,"w+"); //Save Inbox for ($i=0;$i<count($this->dataBuffer['Inbox']);$i++) { $write.="INBOX\t{$this->dataBuffer['Inbox'][$i]['ID']}\t{$this->dataBuffer['Inbox'][$i]['Number']}\t{$this->dataBuffer['Inbox'][$i]['SentTime']}\t{$this->dataBuffer['Inbox'][$i]['SMSC']}\t{$this->dataBuffer['Inbox'][$i]['body']}\r\n"; $writeDump.="$this->dataBuffer['Inbox'][$i]['ID']"; } //Save Outbox for ($i=0;$i<count($this->dataBuffer['Outbox']);$i++) { $write.="OUTBOX\t{$this->dataBuffer['Outbox'][$i]['ID']}\t{$this->dataBuffer['Outbox'][$i]['Number']}\t{$this->dataBuffer['Outbox'][$i]['body']}\r\n"; $writeDump.="$this->dataBuffer['Outbox'][$i]['ID']"; } $dump=strtoupper(md5($write).md5($write).md5($write)); if ($this->TextEncrypt == 1) { fwrite($fp,"e=1".base64_encode(base64_encode($writeDump)).$dump.md5($dump).strrev($dump)."x4nG3l1C4x".strrev(base64_encode($write))."x4nG3l1C4x".$dump.base64_encode($writeDump.strrev($writeDump).strrev($dump))); } else { fwrite($fp,"e=0\r\n".$write); } @fclose($fp); $respon="SMS SAVED [".count($this->dataBuffer['Inbox'])." Inbox] [".count($this->dataBuffer['Outbox'])." Outbox]"; } else { $respon="NO DATA SAVED"; } } function ReadTXT(&$respon) { $x=0;$data=array();$dataDump=array(); $w=0; $z=0; if (file_exists($this->filedb)) { $fp=@fopen($this->filedb,"r"); $ck=fread($fp,3); if ($ck == "e=0") { while($fg=@fgets($fp,10240)) { $x++; if ($x==1) continue; $dataDump[$x]=explode("\t",trim($fg)); if (!$dataDump[$x][3]) continue; if ($dataDump[$x][0] == "INBOX") { $data['Inbox'][$w]['ID']=$dataDump[$x][1]; $data['Inbox'][$w]['Number']=$dataDump[$x][2]; $data['Inbox'][$w]['SentTime']=$dataDump[$x][3]; $data['Inbox'][$w]['SMSC']=$dataDump[$x][4]; $data['Inbox'][$w]['body']=$dataDump[$x][5]; $w++; } if ($dataDump[$x][0] == "OUTBOX") { $data['Outbox'][$z]['ID']=$dataDump[$x][1]; $data['Outbox'][$z]['Number']=$dataDump[$x][2]; $data['Outbox'][$z]['body']=$dataDump[$x][3]; $z++; } //$data=$dataDump[]; } } @fclose($fp); $this->dataBuffer=$data; if (!$this->dataBuffer) { $respon="NO DATA FOUND"; return 0; } else { return 1; } } else { $respon="Can not found $this->filedb"; return 0; } } function DeleteTXT($id,$box='Inbox') { if ($this->dataBuffer[$box][$id]) { $this->dataBuffer[$box][$id]=NULL; unset($this->dataBuffer[$box][$id]); } $this->SaveTXT($respon); $this->ReadTXT($respon); } function SaveSQL(&$respon) { } function setDate() { $this->gammu_exe($this->gammu." --setdatetime",$respon); $data=$respon[0]; $this->gammu_exe($this->gammu." --getdatetime",$respon); $data.="\r\n".$respon[0]; return $data; } function getContact($me="SM",&$respon) { if ($this->Version() < 1.10) { $respon="Invalid Gammu Version, require version 1.10+<br>Your version $this->gammu_version"; return false; } $this->gammu_exe($this->gammu." nothing --getallmemory $me",$rs); $sx=0; for($i=0;$i<count($rs);$i++) { $rs[$i]=trim($rs[$i]); //if (!$rs[$i]) continue; if (preg_match("/^Memory (.+), Location (.+)/",$rs[$i],$d)) { $eml=0; $x=$sx; if (!trim($d[1])) continue; $data[$x]['Location']=$d[2]; $data[$x]['MEM']=$d[1]; //echo $d[1]." - ".$d[2]."<br>"; $sx++; } if (preg_match("/^Email address (.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['email'][$eml]=htmlentities(addslashes($d[2])); $eml++; } else if (preg_match("/^Name(.+): \"(.+)\/(.+)\"\"/",$rs[$i],$d)) { $data[$x]['FirstName']=htmlentities(addslashes($d[2])); } else if (preg_match("/^Name(.+): \"(.+)\"\"/",$rs[$i],$d)) { $data[$x]['FirstName']=htmlentities(addslashes($d[2])); } else if (preg_match("/^Name(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['FirstName']=htmlentities(addslashes($d[2])); } else if (preg_match("/^Last name(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['LastName']=htmlentities(addslashes($d[2])); } else if (preg_match("/^First name(.+): \"(.+)\/\"\"/",$rs[$i],$d)) { $data[$x]['FirstName']=htmlentities(addslashes($d[2])); } else if (preg_match("/^First name(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['FirstName']=htmlentities(addslashes($d[2])); } else if (preg_match("/^Job title(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['JobTitle']=htmlentities(addslashes($d[2])); } else if (preg_match("/^Company(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['Company']=htmlentities(addslashes($d[2])); } else if (preg_match("/^Home number(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['HomeNumber']=htmlentities(addslashes($d[2])); } else if (preg_match("/^Work number(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['WorkNumber']=htmlentities(addslashes($d[2])); } else if (preg_match("/^Mobile number(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['MobileNumber']=htmlentities(addslashes($d[2])); } else if (preg_match("/^Fax number(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['FaxNumber']=htmlentities(addslashes($d[2])); } else if (preg_match("/^General number(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['GeneralNumber']=htmlentities(addslashes($d[2])); } else if (preg_match("/^URL address(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['URL']=htmlentities(addslashes($d[2])); } else if (preg_match("/^Street address(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['StreetAddress']=htmlentities(addslashes($d[2])); } else if (preg_match("/^City(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['City']=htmlentities(addslashes($d[2])); } else if (preg_match("/^State(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['State']=htmlentities(addslashes($d[2])); } else if (preg_match("/^Zip code(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['ZipCode']=htmlentities(addslashes($d[2])); } else if (preg_match("/^Text(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['Text']=htmlentities(addslashes($d[2])); } else if (preg_match("/^LUID(.+): \"(.+)\"/",$rs[$i],$d)) { $data[$x]['LUID']=htmlentities(addslashes($d[2])); } else if (preg_match("/^Date and time(.+): (.+)/",$rs[$i],$d)) { $data[$x]['TimeInfo']=htmlentities(addslashes($d[2])); } /* else if (preg_match("/^(.+):(.+)/",$rs[$i],$d)) { $data[$x][trim($d[1])]=$d[2]; } else { $data[$x]['Buffer']=$rs[$i]; } */ } return $data; } function Version() { $this->gammu_exe($this->gammu." nothing --version",$respon); preg_match("/^\[Gammu version (.+) built (.+)\]/",$respon[0],$gm); list($My,$Mi,$Mr)=explode(".",$gm[1]); $this->gammu_version = "$My.$Mi"; return $this->gammu_version; } function enable_sudo($s=1) { $this->sudo=$s; } } ?>