| 
<?php
 namespace TelegramCliWrapper;
 
 /**
 * Class TelegramCliHelper
 *
 * Allows to wrap the cli calls in a PHP class
 *
 * @package TelegramCliWrapper
 */
 class TelegramCliHelper
 {
 /** @var  array */
 protected $config;
 /** @var int */
 protected $pid = null;
 /** @var bool */
 protected $debug = false;
 
 protected static $instance = null;
 
 /**
 * starts telegram-cli from the configuration file given on ../config/config.ini
 */
 protected function __construct()
 {
 $config = parse_ini_file(__DIR__ . "/../config/config.ini", true);
 $this->config = $config["cli"];
 $this->debug = isset($this->config['debug']) && $this->config['debug'];
 
 // check if is an instance of telegram-cli already running
 if (false === @fsockopen($this->getSocket())) {
 $cmd = sprintf("%s/bin/telegram-cli -k %s/tg-server.pub %s %s & echo $!", $this->config['path'], $this->config['path'], $this->config['params'], $this->config['socket']);
 if ($this->debug) {
 print "{$cmd}\n";
 }
 $lines = exec($cmd);
 $this->pid = intval($lines);
 if ($this->debug) {
 print "telegram-cli started with pid {$this->pid}\n";
 }
 }
 }
 
 /**
 * @return TelegramCliHelper
 */
 public static function getInstance()
 {
 if (!self::$instance) {
 self::$instance = new TelegramCliHelper();
 }
 
 return self::$instance;
 }
 
 
 /**
 * returns the socket found on the configuration file to be used by TelegramCliWrapper easily
 *
 * @return string
 */
 public function getSocket()
 {
 return "unix://" . $this->config['socket'];
 }
 
 /**
 * @return boolean
 */
 public function isDebug()
 {
 return $this->debug;
 }
 
 /**
 * stops the telegram-cli process once the PHP program ends
 */
 function __destruct()
 {
 if ($this->pid) {
 /**
 * have to called twice in order to kill all the telegram-cli instances created
 */
 exec("killall telegram-cli");
 exec("killall telegram-cli");
 }
 }
 
 
 }
 |