[php] resultaten array tonen voordat alles is doorlopen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb het volgende waar ik niet uit kom.

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
<?

$tijd = strftime ("%Y-%m-%d %H:%M:%S",time());

echo "Monitoring [$tijd]<br><br>";

$urls = array(
"nu.nl",
"tweakers.net",
"cnn.com",
"php.net",
"php.resourceindex.com",
"sourceforge.net",
"hotscripts.com",
"gathering.tweakers.net",
"webwereld.nl"
);
foreach ($urls as $url) {
if (!@fopen("http://$url","r")) {
  echo "<b>$url is <font color=red>offline</font></b><br>"; 
} else {
  echo "$url is <font color=green>online</font><br>"; 
}
}

?>


Dit toont de resultaten pas op het eind als alles is doorlopen. Hierdoor kan het wel eens een tijdje duren voordat er iets zichtbaar word. Ik wil graag dat na iedere aparte URL controle dit wordt getoond zodat de pagina zichzelf langzaam opbouwt. Ik heb zoiets ook wel eens gezien bij een domeincontrole, maar weet niet zeker of dat via php gaat. Wie kan me in de goede richting helpen?

Acties:
  • 0 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 23:13
Gaat zeer waarschijnlijk niet via php.
PHP voert eerst de code uit en als hij helemaal klaar is, stuurt hij pas de pagina naar de gebruiker. Misschien dat een flush helpt, maar zeker weten doe ik dat niet.

Misschien kun je per url een pagina weergeven. Dus dat je eerst een link test, de pagina naar de gebruiker stuurt en de pagina na een (paar) seconde een andere pagina laat oproepen met de parameters van de al geteste url's en die dan de volgende laat testen.

Of met frames werken die elk een aparte pagina laadt die 1 url checkt.
Of de client laten checken mbv javascript.

let the past be the past.


Acties:
  • 0 Henk 'm!

  • darkrain
  • Registratie: Augustus 2001
  • Laatst online: 21:56

darkrain

Moderator Discord

Geniet

PHP wordt eerst op de server geparsed en geeft dan de html terug.
Dat zou dus betekenen dat wat jij wilt niet kan.

hmm flush kende ik nog niet.

Ja ik weet het ik ben traaaaag.

[ Voor 24% gewijzigd door darkrain op 07-01-2004 11:52 . Reden: traaaaaaag ]

Tweakers Discord


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Geweldig! Bedankt! Dit was wat ik zocht. _/-\o_

Het resultaat is (voor anderen):

code:
1
2
3
4
5
6
7
8
foreach ($urls as $url) {
if (!@fopen("http://$url","r")) {
  echo "<b>$url is <font color=red>offline</font></b><br>"; 
} else {
  echo "$url is <font color=green>online</font><br>"; 
}
flush();
}

Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 21:35

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

flush kende ik al langer omdat ik ooit een PHP-IRC-bot heb gemaakt (Jetser :Y) ) die natuurlijk wel de output direct moet laten zien ipv 96 uur (max. runtime) later :)

Maar een fopen om te kijken of een server online is? Wat dacht je van een ping? Of een HTTP/1.0 header sturen?

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
acm@server acm $ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
TRACE / HTTP/1.0 <--- het commando dat je stuurt

HTTP/1.1 200 OK
Date: Wed, 07 Jan 2004 12:51:44 GMT
Server: Apache/1.3.29 (Unix)  (Gentoo/Linux) PHP/4.3.3
Connection: close
Content-Type: message/http

TRACE / HTTP/1.0

nog simpelere "is ie nog in leven" test, alleen test je dan niet of je rare fouten op de pagina's zelf krijgt :)

Als het goed is krijg je in je request dus het trace commando terug (of evt een error 400 ofzo dat ie niet mocht ;) )

[ Voor 3% gewijzigd door ACM op 07-01-2004 13:54 ]


Acties:
  • 0 Henk 'm!

  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 03-07 23:56

Engineer

Software

.

[ Voor 99% gewijzigd door Engineer op 13-10-2018 11:01 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

hdd schreef op 07 januari 2004 @ 13:59:
offtopic:
Een ircbot werkt met interne sockets en een big oneindige loop meestal, en niet via echo opdrachten. Flush is daarbij dus niet nodig. ;)
Wel als je informatie over je socket stuurt en daarvan zeker wilt weten dat het uit de buffer is (moet je wel fflush gebruiken natuurlijk) ;)

Acties:
  • 0 Henk 'm!

  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 03-07 23:56

Engineer

Software

.

[ Voor 100% gewijzigd door Engineer op 13-10-2018 11:01 ]

Pagina: 1