PHP zoek-script werkt niet helemaal
Ik heb een script en ik kom er niet uit wat er ontbreekt of wat er fout gaat.
Wat is de bedoeling? Op een site wordt een lijst weergegeven van mensen die een bepaald programma hebben draaien en daarmee online zijn. De status (online, busy of offline) wilde ik graag via PHP zichtbaar maken op een site.
Dit is het script:
Quote:
Code (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
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
<?php
$callsign = $params->get( 'callsign', 6 );
$node = $params->get( 'node', 6 );
$suche = '<td>'.$callsign.'(.*)</td>';
echo 'Node: '.$node.' ('.$callsign.')<br>';
$file = fopen ("http://www.echolink.org/logins.jsp", "r");
if (!$file) {
echo "<b>ERROR</b>";
exit;
}
$status = 'OFFLINE';
while (!feof ($file)) {
$line = fgets ($file, 1024);
if (eregi ($suche , $line, $out)) {
if(stristr($out[1], '>BUSY<') !== FALSE) {
$status = 'BUSY';
}
if(stristr($out[1], '>ON<') !== FALSE) {
$status = 'ONLINE';
}
break;
}
}
echo 'Status: <b>'.$status.'</b>';
fclose($file);
?>
$callsign = $params->get( 'callsign', 6 );
$node = $params->get( 'node', 6 );
$suche = '<td>'.$callsign.'(.*)</td>';
echo 'Node: '.$node.' ('.$callsign.')<br>';
$file = fopen ("http://www.echolink.org/logins.jsp", "r");
if (!$file) {
echo "<b>ERROR</b>";
exit;
}
$status = 'OFFLINE';
while (!feof ($file)) {
$line = fgets ($file, 1024);
if (eregi ($suche , $line, $out)) {
if(stristr($out[1], '>BUSY<') !== FALSE) {
$status = 'BUSY';
}
if(stristr($out[1], '>ON<') !== FALSE) {
$status = 'ONLINE';
}
break;
}
}
echo 'Status: <b>'.$status.'</b>';
fclose($file);
?>
De output wordt dus ongeveer:
Node: 547856 (XX5FGT-R)
Status: ONLINE
Het script wilde ik aanroepen via een URL, dus:
script.php?callsign=XX5FGT-R&node=547856
Kan iemand mij hiermee helpen? Momenteel zie ik alleen een witte pagina, er gaat dus iets verkeerd, maar ik kom er niet achter wat er nu mis gaat.
Alvast bedankt,
Roland.
Na veel rommelen zelf al de oplossing gevonden, dit werkt wel:
Quote:
Code (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
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
if ( isset ( $_GET['callsign'] ) ) {
$callsign = $_GET['callsign'];
if ( isset ( $_GET['node'] ) ) {
$node = $_GET['node'];
$suche = '<td>'.$callsign.'(.*)</td>';
echo 'Node: '.$node.' ('.$callsign.')<br>';
$file = fopen ("http://www.echolink.org/logins.jsp", "r");
if (!$file) {
echo "<b>ERROR</b>";
exit;
}
$status = 'OFFLINE';
while (!feof ($file)) {
$line = fgets ($file, 1024);
if (eregi ($suche , $line, $out)) {
if(stristr($out[1], '>BUSY<') !== FALSE) {
$status = 'BUSY';
}
if(stristr($out[1], '>ON<') !== FALSE) {
$status = 'ONLINE';
}
break;
}
}
}
}
echo 'Status: <b>'.$status.'</b>';
fclose($file);
?>
if ( isset ( $_GET['callsign'] ) ) {
$callsign = $_GET['callsign'];
if ( isset ( $_GET['node'] ) ) {
$node = $_GET['node'];
$suche = '<td>'.$callsign.'(.*)</td>';
echo 'Node: '.$node.' ('.$callsign.')<br>';
$file = fopen ("http://www.echolink.org/logins.jsp", "r");
if (!$file) {
echo "<b>ERROR</b>";
exit;
}
$status = 'OFFLINE';
while (!feof ($file)) {
$line = fgets ($file, 1024);
if (eregi ($suche , $line, $out)) {
if(stristr($out[1], '>BUSY<') !== FALSE) {
$status = 'BUSY';
}
if(stristr($out[1], '>ON<') !== FALSE) {
$status = 'ONLINE';
}
break;
}
}
}
}
echo 'Status: <b>'.$status.'</b>';
fclose($file);
?>
Eregi() is antiek. Niet meer gebruiken dus. Gebruik preg_match().
Voorts heb ik OOK ontdekt dat er niet gezocht wordt op de exacte callsign.
Dus, XX5AAA geeft hetzelfde weer als XX5AAA-R.
Stel dat XX5AAA-R online is, en XX5AAA is offline, dan geeft het script voor BEIDE waardes aan dat ze allebei online zijn, dat is dus fout.
Ik ga gelijk even verder met dat preg_match, kijken of dat lukt.
Als iemand nog tips weet om op de exacte waardes te laten zoeken, hoor ik het graag.
Roland.
Toevoeging op 14/03/2011 13:05:19:
Hoe zit dat met preg_match?
Wat ik ook doe, ik krijg het niet werken.
Zoiets als dit:
(preg_match('{\[[a-z]{5,10}]}i', $search, $line, $out)
zou toch moeten werken volgens google, maar dat doet't niet...
Roland.