Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Otworzenie strony w "tle"
Forum PHP.pl > Forum > PHP
Heniut
Cześć.
Czy można zrobić coś takiego, że kod się wykonuje i w pewnym momencie tylko otwiera stronę (tak, aby user nie jej nie widział [coś jak iframe o wymiarach 1x1] widział - strona jest pusta, a nie żaden keygen itp.) czeka aż się załaduje, zamyka tą stronę "w tle" i dalej wykonuje kod. Czy coś takiego jest możliwe?
Uriziel01
Jest możliwe nawet kilka różnych sposobów. Ta otwarta strona ma oczekiwać aż wszystkie elementy ze strony głównej zostaną załadowane ? Nawet prosty IFrame z stylem "display:none;" wstarczy. Ale to nie ma prawdopodobnie sensu gdyż jeżeli dobrze rozumiem tobie zależy na samym kodzie .js w tym nowym oknie nie na jego treści ? Dołącz w takim razie jakiś plik .js który będzie reagował na akcje
  1. var pageisloaded=0;
  2. window.addEvent('load',function(){
  3. pageisloaded=1;
  4. });

albo, jeżeli używasz JQuery na akcję:
  1. .ready(function() {
Heniut
Mam swój kod i w trakcie wykonywania funkcji muszę wejść na pewną stronę na innym serwerze (tak chodzi o kod, a nie "zawartość tej strony"), a potem kod sie musi dalej wykonywać. A może pobierając stronę przez curl tak jakby ją "odwiedzam" ?
Uriziel01
To wszystko zależy od tego co robi ten rzeczony kod na stronie która chcesz wczytać, po wczytaniu tego curlem mogą się nie wykonać pewne akcje JS. Z reszta same wejście nic nie znaczy, JS nie wykona sie przy samym CURLu, musiałbyc go wyrzucić do zawartości aktualnej strony, a to znów zalezy od tego co ten kod zawiera.
Wykrywacz
Jak kod to dla czego nie użyjesz XMLHttpRequest ? zresztą niezależnie czy kod czy nie wink.gif
by_ikar
Tworzysz sobie jakiś skrypt w php, wrzucasz go powiedzmy w head strony jako plik js:

  1. <script type="text/javascript" src="/sciezka/do/skryptu/skrypt.php"></script>


A w samym pliku, na samym jego początku dodajesz pewien nagłówek:

  1. header("HTTP/1.0 204 No Content");


Informując przeglądarkę, żeby zerwała połączenie ze skryptem. A sam skrypt wykonywać się będzie dalej.

Co zyskujesz:

+ możliwość odpalenia dowolnie długiego skryptu, który może się dość długo wykonywać
+ jednocześnie, dzięki zerwaniu połączenia, nie wydłużasz czasu ładowania twojej strony
+ w pliku php który będzie symulować JS, możesz dołożyć jakiś skrypt js, który będzie po jakimś czasie braku aktywności użytkownika, sam próbował jeszcze raz się załadować
- dodatkowe rzadanie, które minimalnie spowolni proces ładowania strony
- jak jakoś tego nie zabezpieczysz w jakiś sposób, możesz więcej razy niż byś chciał odpalić skrypt który będzie działać w tle. Powiedzmy 20 użytkowników wejdzie w tym samym czasie na stronę i skrypt odpali się 20 razy. Jeżeli będzie dość ciężki, możesz sobie nieźle zapchać serwer.

Taki pseudo cron, można by powiedzieć.
Heniut
  1. //Wcześniejszy kod
  2. $ch = curl_init('http://localhost/bot.php');
  3. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  4. curl_exec($ch);
  5. curl_close($ch);
  6. //Dalszy kod

Dlaczego poprawnie się wykonuje (kod, strona, kod), ale to co jest w bot.php "nie ma miejsca" (zapisanie czegoś do pliku) ?

@EDIT
OK, już działa < to była wina lagów snitch.gif Można zamknąć temat
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.