Portál AbcLinuxu, 1. listopadu 2025 11:55
Ř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.