Portál AbcLinuxu, 12. května 2025 13:37
Řešení dotazu:
app-mobilephone/smstools
(homepage) ... funguje to podobne ako email client. SMS vo spravnom formate vlozis do directory. Daemon si to zoberie a presunie do queue. Queue postupne odosiela. Prijate SMS zas uklada do dalsieho dir. Vies si tam scriptovat akcie (ja si napr. prijate SMS preposielam na email).mktemp
a nasledne vyklopi cislo + obsah sms do /var/spool/sms/outgoing/
. Riesenie v PHP nebude daleko od toho.
char template[] = "/var/spool/sms/outgoing/smsXXXXXX"
mkstemp(template)
fchmod(fd, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
fdopen(fd, "w")
Ale to bylo jen tak, nic v tom nehledejte, jen jednoduché řešení pro command line, pokud to zrovna nemá být bash.
Samozřejmě HTTP API nad smstools je dobré řešení, také jsem nad tím dělal v NodeJS www a API rozhraní (včetně zpracování doručenek přes handler smstools).
<?php $queue_dir = '/var/spool/sms/outgoing'; $checked_dir = '/var/spool/sms/checked'; $pocet_v_rade = 0; $dir = opendir($queue_dir); while (($filename = readdir($dir)) !== FALSE) if ($filename != '.' && $filename != '..') $pocet_v_rade++; closedir($dir); $dir = opendir($checked_dir); while (($filename = readdir($dir)) !== FALSE) if ($filename != '.' && $filename != '..' && strpos($filename, '.LOCK') === FALSE) $pocet_v_rade++; closedir($dir); echo 'Počet SMS v rade na odoslanie: '.$pocet_v_rade.'<br/>' if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['sprava'])) { $count = 0; $sprava = substr($_POST['sprava'], 0, 160); echo '<br/>Správa: "'.htmlspecialchars($sprava).'"<br/><br/>'; $cisla = explode("\n", $_POST['cisla']); foreach ($cisla as $cislo) { $cislo = trim($cislo); if (empty($cislo)) continue; if (($cislo{0} == '+' && strlen($cislo) == 13) || ($cislo{0} != '+' && strlen($cislo) == 12)) { $cislo_pre_sms = str_replace('+','',$cislo); $filename = tempnam($queue_dir, date('YmdHis').'-'.$cislo_pre_sms.'-'); if ($filename === FALSE) { echo 'Chyba pri vytváraní SMS súboru pre '.$cislo.'<br/>'; continue; } $f = fopen($filename, 'w'); if ($f === FALSE) { echo 'Chyba pri otváraní SMS súboru pre '.$cislo.'<br/>'; continue; } fwrite($f, "To: ".$cislo_pre_sms."\n\n".$sprava); fclose($f); chmod($filename, 0644); $count++; } else echo 'Číslo '.$cislo.' nie je v správnom tvare!<br/>'; } echo '<br/>Správ vložených do radu: '.$count.'<br/>'; } ?>
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.