Ik heb aan mijn server een Siemens telefoon gehangen en nu wil ik daar de sms-jes van af willen halen en opslaan in een db zodat ik daar later dan meer mee kan doen. Ik gebruik het onderstaande php script om de informatie eruit te halen. Daarmee kom ik een eind maar met het opzoeken van een bericht met enters erin gaat het mis.
Uitvoer shell_exec:
Overige uitvoer:
"Welkom bij T-Mobile.
Je gebruikersnaam is: USERNAME
Je wachtwoord is: USERCODE
Met de groeten van T-Mobile."
Stopt het bij de eerste regel:
"Welkom bij T-Mobile."
Probleem is dat die \n\n dus niet wordt gebruikt maar een enkele \n. Er gaat dus nog iets mis in deze regels:
Iemand een idee hoe dat op te lossen? Door zoeken tot de volgende "slot:" is geen optie omdat dan de laatste niet mee komt.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| <?php $output = shell_exec('scmxx --get --sms --slot=all --out=- 2>&1'); echo "<pre>$output</pre>\n\n"; $regex = '|From: ([^\n]+)*|'; $count = preg_match_all($regex, $output, $from); print_r($from[1]); $regex = '|Date: ([^\n]+)*|'; $count = preg_match_all($regex, $output, $date); print_r($date[1]); $regex = '|SMSC number: ([^\n]+)*|'; $count = preg_match_all($regex, $output, $smsc); print_r($smsc[1]); $regex = '|PDU type: ([^\n]+)*|'; $count = preg_match_all($regex, $output, $pdu_type); print_r($pdu_type[1]); $regex = '|PDU flags: ([^\n]+)*|'; $count = preg_match_all($regex, $output, $pdu_flags); print_r($pdu_flags[1]); $regex = '|Settings: ([^\n]+)*|'; $count = preg_match_all($regex, $output, $settings); print_r($settings[1]); $regex = '|Message length: ([^\n]+)*|'; $count = preg_match_all($regex, $output, $lenght); print_r($lenght[1]); $regex = '|Message length:[^\n\n]*\n\n([^\n\n]+)\n\n*|'; $count = preg_match_all($regex, $output, $message); var_dump($message); //print_r($message[1]); ?> |
Uitvoer shell_exec:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
| <pre>Using "ANSI_X3.4-1968" as system character set. Accessing device /dev/ttyS0...done OK, a modem device is present. Detected SIEMENS M35i Looking for SMS of specified type... Found incoming, read SMS in slot 1. Found incoming, read SMS in slot 2. Found incoming, read SMS in slot 3. Found incoming, read SMS in slot 4. Slot: 1 From: 712 Date: Wed Oct 4 00:03:19 2006 SMSC number: +31624000000 PDU type: SMS-DELIVER PDU flags: MoreMessagesToSend ReplyPath Settings: 7bit-GSM Message length: 111 Welkom bij T-Mobile. Je gebruikersnaam is: USERNAME Je wachtwoord is: USERCODE Met de groeten van T-Mobile. Slot: 2 From: (T-Mobile NL) Date: Wed Oct 4 00:39:58 2006 SMSC number: +31624000000 PDU type: SMS-DELIVER PDU flags: StatusRequest MoreMessagesToSend Settings: 7bit-GSM Message length: 154 Welkom bij T-Mobile. T-Mobile geeft je 400 gratis SMSjes. Deze zijn aan je tegoed toegevoegd. Je kunt de gratis SMSjes gebruiken tot en met 31 maart 2007. Slot: 3 From: (T-Mobile NL) Date: Wed Oct 4 17:45:23 2006 SMSC number: +31624000000 PDU type: SMS-DELIVER PDU flags: StatusRequest MoreMessagesToSend Settings: 7bit-GSM Message length: 99 Je internet bestelling bij TM-Speciaal is verwerkt. Binnen 2 weken ontvang je het bestelde artikel. Slot: 4 From: (T-Mobile NL) Date: Wed Oct 4 17:45:30 2006 SMSC number: +31624000000 PDU type: SMS-DELIVER PDU flags: StatusRequest MoreMessagesToSend Settings: 7bit-GSM Message length: 74 Uw beltegoed is met EUR 10,00 opgewaardeerd. Uw beltegoed is nu EUR 15,00. </pre> |
Overige uitvoer:
code:
Ipv het bericht :1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
| Array ( [0] => 712 [1] => (T-Mobile NL) [2] => (T-Mobile NL) [3] => (T-Mobile NL) ) Array ( [0] => Wed Oct 4 00:03:19 2006 [1] => Wed Oct 4 00:39:58 2006 [2] => Wed Oct 4 17:45:23 2006 [3] => Wed Oct 4 17:45:30 2006 ) Array ( [0] => +31624000000 [1] => +31624000000 [2] => +31624000000 [3] => +31624000000 ) Array ( [0] => SMS-DELIVER [1] => SMS-DELIVER [2] => SMS-DELIVER [3] => SMS-DELIVER ) Array ( [0] => MoreMessagesToSend ReplyPath [1] => StatusRequest MoreMessagesToSend [2] => StatusRequest MoreMessagesToSend [3] => StatusRequest MoreMessagesToSend ) Array ( [0] => 7bit-GSM [1] => 7bit-GSM [2] => 7bit-GSM [3] => 7bit-GSM ) Array ( [0] => 111 [1] => 154 [2] => 99 [3] => 74 ) array(2) { [0]=> array(4) { [0]=> string(42) "Message length: 111 Welkom bij T-Mobile. " [1]=> string(177) "Message length: 154 Welkom bij T-Mobile. T-Mobile geeft je 400 gratis SMSjes. Deze zijn aan je tegoed toegevoegd. Je kunt de gratis SMSjes gebruiken tot en met 31 maart 2007. " [2]=> string(121) "Message length: 99 Je internet bestelling bij TM-Speciaal is verwerkt. Binnen 2 weken ontvang je het bestelde artikel. " [3]=> string(96) "Message length: 74 Uw beltegoed is met EUR 10,00 opgewaardeerd. Uw beltegoed is nu EUR 15,00. " } [1]=> array(4) { [0]=> string(20) "Welkom bij T-Mobile." [1]=> string(154) "Welkom bij T-Mobile. T-Mobile geeft je 400 gratis SMSjes. Deze zijn aan je tegoed toegevoegd. Je kunt de gratis SMSjes gebruiken tot en met 31 maart 2007." [2]=> string(99) "Je internet bestelling bij TM-Speciaal is verwerkt. Binnen 2 weken ontvang je het bestelde artikel." [3]=> string(74) "Uw beltegoed is met EUR 10,00 opgewaardeerd. Uw beltegoed is nu EUR 15,00." } } |
"Welkom bij T-Mobile.
Je gebruikersnaam is: USERNAME
Je wachtwoord is: USERCODE
Met de groeten van T-Mobile."
Stopt het bij de eerste regel:
"Welkom bij T-Mobile."
Probleem is dat die \n\n dus niet wordt gebruikt maar een enkele \n. Er gaat dus nog iets mis in deze regels:
PHP:
1
2
3
| $regex = '|Message length:[^\n\n]*\n\n([^\n\n]+)\n\n*|'; $count = preg_match_all($regex, $output, $message); var_dump($message); |
Iemand een idee hoe dat op te lossen? Door zoeken tot de volgende "slot:" is geen optie omdat dan de laatste niet mee komt.
Lekker belangrijk