Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wysłanie zakończenia strony do przeglądarki
neuromancer
post 12.05.2007, 18:38:53
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.10.2006

Ostrzeżenie: (0%)
-----


Mam dosyć nietypowy problem, ponieważ mój skrypt zapisuje zmiany w konfigu apache, następnie apache jest ponownie uruchamiany (aby ponownie wczytać konfiguracje).

Żeby go zrestartować użyłem tego:
  1. <?php
  2. system("net stop apache2 & net start apache2");
  3. ?>

Jednak w ten sposób przeglądarka poprostu staje i nie ładuje strony do końca i w końcu wywala 404.
Więc chciałbym przed tą komendą wysłać do przeglądarki coś co spowoduje zakończenie ładowania strony i powiedzmy wyświetli napis "proszę zaczekać 10 sekund...", a skrypt wykona komendę restartu apache.
Wydaje mi sie że żeby to zadziałało musze ustawić "ignore_user_abort = On" w php.ini

Można do sprawy podejść inaczej.
Można wykonać komende "D:\Server\Apache2\bin\Apache.exe -k restart" - kiedy wykonam to z wiersza poleceń (oczywiście kiedy usługa apache jest uruchomiona) to apache wczyta konfig ponownie, ale jak umieszcze to w skrypcie php to nic sie nie dzieje... skrypt dochodzi do końca, a configi nie są wczytywane ponownie, nie wiem czemu, tak jakby to sie w ogóle nie wykonywało.

A może jest jeszcze jakiś inny magiczny sposób zmuszenia apache'a do ponownego wczytania configu, którego nie znam?

EDIT: Coś czułem, że odpowiedzi nie bedzie szybko, o ile wogóle ktoś odpowie...

Ten post edytował neuromancer 12.05.2007, 21:08:58


--------------------
localhost: Apache 2.0.59, PHP 5.2.1, MySQL 4.1.22
Go to the top of the page
+Quote Post
misiek172
post 13.05.2007, 11:48:07
Post #2





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


hmm może zrób tak, iż każesz zrobić stop w tym pliku a start np w okienku POPUP który uruchomi to polecenie np. po 10 sekundach.

Lub (tego nie jestem pewien) poprzez AJAX dasz start();


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
gWd
post 13.05.2007, 11:49:38
Post #3





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 17.09.2006

Ostrzeżenie: (0%)
-----


Próbowałeś czegoś takiego?:

  1. <?php
  2. echo '<html><head><meta http-equiv="refresh" content="5;URL=http://localhost/proba.php"></head></html>';
  3. system("net stop apache2 & net start apache2");
  4. ?>


--------------------
art of programming
Go to the top of the page
+Quote Post
neuromancer
post 13.05.2007, 20:47:51
Post #4





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.10.2006

Ostrzeżenie: (0%)
-----


Niestety, nie działa, przeglądarka nie dostaje tej zawartości, dostaje ją dopiero jak cały skrypt sie wykona.

Myśle nad napisaniem jakiego skryptu BAT który załatwi te komendy, a PHP go tylko wykona. Skrypt BAT bedzie sobie czekał 5 sekund i potem zamknie Apache i ponownie uruchomi, dając 5 sekund przeglądarce na wyświetlenie komunikatu, iż trzeba poczekać ~10 sekund na ponowną dostępność servera.

Mam problem jednak z funkcją exec
W manualu http://pl2.php.net/manual/en/function.exec.php pisze coś takiego:
Cytat
Note: If you start a program using this function and want to leave it running in the background, you have to make sure that the output of that program is redirected to a file or some other output stream or else PHP will hang until the execution of the program ends.

Właśnie chciałbym ten skrypt odpalić jako program w tle, żeby php go odpaliło i nie czekało aż sie on sie zakończy.
Piszą że trzeba przekierować wyjście (2 parametr funkcji exec) do pliku albo gdzieś indziej... ale jak to zrobić?

Ponawiam jeszcze pytanie z 1 posta: Czy ktoś zna inny sposób restartu apache?
exec("D:\Server\Apache2\bin\Apache.exe -k restart"); niestety sie nie wykonuje, Apache powinien wczytać konfigi ponownie, ale tak sie nie dzieje.

Ten post edytował neuromancer 13.05.2007, 20:50:06


--------------------
localhost: Apache 2.0.59, PHP 5.2.1, MySQL 4.1.22
Go to the top of the page
+Quote Post
Siemion
post 13.05.2007, 20:57:08
Post #5





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 13.05.2007

Ostrzeżenie: (0%)
-----


A nie możesz mieć dwóch apache`y ? Do konfiguracji jednego używałbyś drugiego który obsługuje np tylko i wyłacznie jedną subdomenę.
Go to the top of the page
+Quote Post
PiotrLegnica
post 13.05.2007, 21:03:02
Post #6





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 6.07.2005
Skąd: Legnica

Ostrzeżenie: (0%)
-----


Jak chcesz wysłać output do przeglądarki przed zakończeniem skryptu, użyj flush.


--------------------
SithTemplate
Go to the top of the page
+Quote Post
neuromancer
post 13.05.2007, 21:28:49
Post #7





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.10.2006

Ostrzeżenie: (0%)
-----


Też nie działa sad.gif
Próbowałem umieścić przed nim ob_flush ale też nie działa...

Część skryptu jest taka:
  1. <?php
  2. //MySQL
  3. mysql_db_query($srvdb, "UPDATE `regs` SET `lock` = 'nie' WHERE `id` = '$actid'");
  4. mysql_db_query('mysql', "UPDATE `db` SET `Select_priv` = 'Y', `Insert_priv` = 'Y', `Update_priv` = 'Y', `Delete_priv` = 'Y', `Create_priv` = 'Y', `Drop_priv` = 'Y', `Index_priv` = 'Y', `Alter_priv` = 'Y', `Create_tmp_table_priv` = 'Y', `Lock_tables_priv` = 'Y' WHERE `User` = '$actuser'");
  5. mysql_query('FLUSH PRIVILEGES');
  6. //FTP
  7. $conn_id = ftp_connect($servdomain, $ftpp, 10); 
  8. $login_admin = ftp_login($conn_id, $admuser, $admpass);
  9. ftp_site ($conn_id, "enable $actuser");
  10. ftp_quit($conn_id);
  11. //Apache
  12. unlink("$confdir/users/$actuser/blocked.conf");
  13. header("Location: wait.php");
  14. flush();
  15. sleep('5');
  16. system("net stop apache2 & net start apache2");
  17. ?>

Jak widzicie Apache musi zostać zrestartowany aby załapać że niema już pliku blocked.conf - który ma regułe blokady konta użytkownika (pokazuje na jego stronie 403).
To dzieje sie przy odblokowaniu konta użytkownika.
Wsadziłem tam przekierowanie na wait.php - ale bez skutku...

Jak zrobić żeby apache wczytał ponownie configi w jakiś inny sposób?

Ten post edytował neuromancer 13.05.2007, 21:30:22


--------------------
localhost: Apache 2.0.59, PHP 5.2.1, MySQL 4.1.22
Go to the top of the page
+Quote Post
Siemion
post 13.05.2007, 22:03:04
Post #8





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 13.05.2007

Ostrzeżenie: (0%)
-----


Szkoda, że kompletnie zignorowałeś mojego poprzedniego posta. No nic... rozwinę trochę myśl, to może bardziej się zainteresujesz pomysłem.

Po pierwsze nadawanie uprawnień Apache wykorzystywanemu "globalnie" takich by byl w stanie modyfikować pliki konfiguracyjne jest w moim mniemaniu dosyć niebezpieczne i unikałbym tego jak ognia. Dlatego właśnie zasugerowałem rozwiązanie, które oparte jest o dwa Apache z różnymi uprawnieniami. Jeden z większymi uprawnieniami działał by jako obsługa części administracyjnej, a drugi jako "globalny" do wszystkiego innego. Ten pierwszy miałby dostęp do plików konfiguracyjnych, a drugi okrojony uprawnieniami tak daleko jak się da. Przy takim rozwiązaniu śmiało mozesz sobie zmieniać ustawienia plików cfg "podrzędnego" apache i restartować go, bez utraty aplikacji administracyjnej.

No nic - koniec wstepu do głębszej myśli. Można by było się rozpisać mocniej, ale chyba nie ma to sensu ;-)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:36