[PHP - FreeBSD] WebGUI met shutdown pagina

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
Beste tweakers

Ik heb voor FreeBSD en soort van "mini" GUI ontwikkeld waarvan het systeem o.a. uitgeschakeld of gereboot kan worden. Met JavaScript heb ik een event listener gezet op de buttons in kwestie. Als er op geklikt wordt, dan komt een venster tevoorschijn die vraagt om confirmatie. Indien ja, zal er een nieuwe webpagina geopend worden die een paragraaf weergeeft "System - Shutdown" of "System - Reboot".

Het systeem op deze manier afsluiten of heropstarten is op zich geen probleem, maar wel het laden van de pagina zelf. Omdat het shutdown & reboot commando via PHP uitgevoerd wordt in de body van het HTML document, kan de rest niet meer geladen worden. Aanroepen vanaf een extern script heeft ook niet veel zien aangezien de pagina zal wachten tot het script uitgevoerd is.

Acties:
  • 0 Henk 'm!

  • Raymond P
  • Registratie: September 2006
  • Laatst online: 17:08
Hoe ziet de regel PHP eruit?
Wat heb je zelf geprobeerd om het op te lossen?

Ik ga er maar vanuit dat je exec gebruikt.
En in de documentatie staat dit:
Note:

If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends.
Je krijgt dan dus zoiets:

PHP:
1
2
3
4
5
6
7
<?php

    print time();
    exec('sleep 10 > /dev/null &');
    print time();

?>


Uiteraard kan je natuurlijk ook je PHP uit de body halen maar dat helpt je in dit geval niet te leren lezen.

- knip -


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 17:07

orf

Mooier is denk ik om vanuit je interface een ajax request te doen naar een PHP script die de shutdown doet. Bij een reboot kun je vervolgens met ajax pollen op een scriptje en afhankelijk van de response-codes of time-out een zandloper laten zien. Als de server dan weer online komt kun je dat tonen.

Acties:
  • 0 Henk 'm!

Verwijderd

Kijk even naar de functies ob_start en ob_flush. Hiermee kan je de output buffer gebruiken. Je kan dus eerst je response versturen en daarná het commando voor reboot/shutdown uitvoeren.

Acties:
  • 0 Henk 'm!

  • egonolieux
  • Registratie: Mei 2009
  • Laatst online: 06-01-2024

egonolieux

Professionele prutser

Topicstarter
Raymond P schreef op woensdag 31 oktober 2012 @ 06:21:
Hoe ziet de regel PHP eruit?
Wat heb je zelf geprobeerd om het op te lossen?

Ik ga er maar vanuit dat je exec gebruikt.
En in de documentatie staat dit:

[...]


Je krijgt dan dus zoiets:

PHP:
1
2
3
4
5
6
7
<?php

    print time();
    exec('sleep 10 > /dev/null &');
    print time();

?>


Uiteraard kan je natuurlijk ook je PHP uit de body halen maar dat helpt je in dit geval niet te leren lezen.
Ik gebruik inderdaad exec(): <?php exec('/usr/local/bin/sudo /sbin/poweroff'); ?>
De PHP uit mijn body halen (de code onder de pagina) was ook het eerste wat ik geprobeerd had, maar raar genoeg werd de pagina toch niet geladen.

Ook had ik reeds geprobeerd het programma in de achtergrond te laten lopen met de '&' parameter, maar aangezien de pagina nog steeds niet laadde, ging ik er vanuit dat dit niet zou werken. Ik had er inderdaad beter een timer bij gezet zoals in je codevoorbeeld.
orf schreef op woensdag 31 oktober 2012 @ 08:39:
Mooier is denk ik om vanuit je interface een ajax request te doen naar een PHP script die de shutdown doet. Bij een reboot kun je vervolgens met ajax pollen op een scriptje en afhankelijk van de response-codes of time-out een zandloper laten zien. Als de server dan weer online komt kun je dat tonen.
Om het dialoogvenster op het scherm te laten komen gebruik ik reeds jQuery, dus hiermee kan ik inderdaad even experimenteren. Eigenlijk heb ik maar weinig ervaring met jQuery en ging ik er vanuit dat een PHP script oproepen niet ging, aangezien dit ook niet mogelijk is met JavaScript.

[ Voor 24% gewijzigd door egonolieux op 31-10-2012 16:49 ]


Acties:
  • 0 Henk 'm!

  • Raymond P
  • Registratie: September 2006
  • Laatst online: 17:08
Dan weet je nu hopelijk wel waat je fout zit.
Je moet de output redirecten naar een file of een andere output stream.
Maw. de /dev/null/ uit m'n voorbeeld staat er niet voor de sier.

Ajax calls zullen exact hetzelfde resultaat hebben als je nu hebt.

- knip -

Pagina: 1