Uruchamianie nowego skryptu podczas wykonywania kodu.

0

Witam,
wykonuje pewien skrypt i chce ale po spełnieniu warunku uruchomił w tle nowy plik

if (...)
{
	uruchamia sie w tle plik2.php
}

cron nie wchodzi w grę bo muszę to od razu uruchomić po spełnieniu warunku, jakieś pomysły?

3

Opowiedz coś więcej, to ma się dziać przy wejściu na stronę?
Czemu ma się uruchomić plik?
Nie możesz uruchomić funkcji w tym pliku w warunku, a includować go zawsze?

include plik2.php
if( true ){
    someFunctionFromIncludedFile();
}

Najlepiej jednak pisać obiektowo, używać Composera.

0

Mógłbym tak zrobić, ale plik2.php jest zapętlony i funkcja nigdy się nie skończy żeby przejść dalej. A dalej jak będę miał kolejnego ifa który też ma uruchomić kolejny plik3.php który też jest zapętlony to nigdy nie dojdzie do tego warunku bo nie wyjdzie z pierwszego.

0

Przerwać działanie funkcji przez return możesz zawsze.
Z tego co piszesz to już 3 plik.... Czyli makaron się nakręca.

0

Plik 1

include plik2.php
if( true ){
    someFunctionFromIncludedFile();
}
if( true ){
    someFunctionFromOther();
}

Plik 2

Funtion someFunctionFromIncludedFile(){
   $i = 1000000;
   while($i > 0){
      print($i);
       $i --;
    )
    // Return dajesz po wykonaniu jakiejś czynności etc. To może być też warunek.
    return true;
}

Pisane z palca na telefonie ale chyba zrozumiesz

0
jurek1980 napisał(a):

Plik 1

include plik2.php
if( true ){
    someFunctionFromIncludedFile();
}
if( true ){
    someFunctionFromOther();
}

Plik 2

Funtion someFunctionFromIncludedFile(){
   $i = 1000000;
   while($i > 0){
      print($i);
       $i --;
    )
    // Return dajesz po wykonaniu jakiejś czynności etc. To może być też warunek.
    return true;
}

Pisane z palca na telefonie ale chyba zrozumiesz

u mnie pętla jest nieskończona - nigdy z niej nie wyjdzie, a nawet jak by była skończona jak pokazałeś to ten główny program musi czekać aż się wykona żeby przejść dalej. A chce żeby po spełnieniu tego warunku uruchomił się plik2.php a główny program ma działać sobie dalej.

0

To może chodzi Ci o wielowątkowość?
https://stackoverflow.com/questions/70855/how-can-one-use-multi-threading-in-php-applications
Tylko wtedy PHP w wersji TS a nie NTS dla skryptu wykonywanego z CMD

0
jurek1980 napisał(a):

To może chodzi Ci o wielowątkowość?

https://stackoverflow.com/questions/70855/how-can-one-use-multi-threading-in-php-applications
Tylko wtedy PHP w wersji TS a nie NTS dla skryptu wykonywanego z CMD

Nie jestem programistą, nie znam się na tym, tworze projekt do własnego użytku, uczę się wlocie to co mi potrzebne i teraz chcę zrobić to o czym od pierwszego postu piszę. Nie wiem czy chodzi mi o wielowątkowość, bo nie znam wielowątkowości, chcę żeby ktoś mnie nakierował jak ma to zrobić. Może jeszcze taki prosty przykład żeby bardziej wyjaśnij.

plikglowny.php

        for($x = 0; $x < 100; $x++)
	{
		if ($x == 44)
		{
			include 'plik2.php';
			funkcja1();                      //chcę aby tylko uruchomił i kontynuował działanie
		}
		
		if ($x == 69)
		{
			include 'plik3.php';
			funkcja2();          //chcę aby tylko uruchomił i kontynuował działanie
		}
	}

plik2.php

function funkcja1()
{
   for(;;)
   {
		$zapisz = "44 \r\n";
		$data94 = dirname(__FILE__) . '/koniec44.txt';
		file_put_contents($data94, $zapisz, FILE_APPEND);
		sleep(1);
   }
}

plik3.php

function funkcja2()
{
   for(;;)
   {
		$zapisz = "69 \r\n";
		$data94 = dirname(__FILE__) . '/koniec69.txt';
		file_put_contents($data94, $zapisz, FILE_APPEND);
		sleep(1);
   }
}

Plik plikglowny.php uruchomię sobie w cronie, Jak wejdzie warunek chcę aby tylko dany plik został uruchomiony, a plikglowny.php działał dalej(nie czekał, az się dany plik zakończy bo się nie doczeka ), jak zakończy działanie to uruchomione pliki które uruchomił w ifach działają dalej.

0

Wiesz trochę mi to nie pasuje bo tak naotwierasz Cronem wiele niekończących się skryptów i albo zabijesz serwer albo OS ubije wątki. Albo admin serwera ubije wątki. Dlaczego z pliku PHP chcesz uruchamiać jakieś niekończące się skrypty? Może jednak nie tędy droga?

2
sentence napisał(a):

Witam,

wykonuje pewien skrypt i chce ale po spełnieniu warunku uruchomił w tle nowy plik

if (...)
{
	uruchamia sie w tle plik2.php
}

To jest prymitywna metoda, ale jeśli uruchamiasz to w przeglądarce i chcesz, żeby po prostu działało, to:

echo("<iframe src='plik2.php'></iframe>");
echo "\n" . str_repeat(' ', 4096) . "\n";
flush();
0

@jurek1980:
https://stackoverflow.com/questions/858883/run-php-task-asynchronously
Zerknij na ten temat. Jednak tak jak pisano wcześniej, niekończąca się pętla to samobójstwo (pomijam fakt, że defaultowe ustawienia serwera przerwi Ci skrypt po 60 sekundach :) ).

0

@leonpro778: jak plik jest wywoływany z linii komend nie przez webserwer to set_time_limit jest ustawiony na 0 i można wywołać niekończąca się pętlę. Nie wiem, ciągle mi to pachnie jakimś X/Y dlatego staram się opisać swoje spostrzeżenia dla @sentence, pokazać mu jakieś metody i wskazać za i przeciw, żeby zobaczył co najbardziej pasuje mu do problemu.

0

@Freja Draco:

plikglowny.php

     for($x = 0; $x < 100; $x++)
	{
		if ($x == 44)
		{
			 echo("<iframe src='plik2.php'></iframe>");
                      echo "\n" . str_repeat(' ', 4096) . "\n";
                      flush();
			
		}
		
		if ($x == 69)
		{
			include 'plik3.php';
			funkcja2();          //chcę aby tylko uruchomił i kontynuował działanie
		}
	}

plik2.php

function funkcja1()
{
   for(;;)
   {
		$zapisz = "44 \r\n";
		$data94 = dirname(__FILE__) . '/koniec44.txt';
		file_put_contents($data94, $zapisz, FILE_APPEND);
		sleep(1);
   }
}

plik3.php

function funkcja2()
{
   for(;;)
   {
		$zapisz = "69 \r\n";
		$data94 = dirname(__FILE__) . '/koniec69.txt';
		file_put_contents($data94, $zapisz, FILE_APPEND);
		sleep(1);
   }
}
1
          include 'plik3.php';
          funkcja2();          //chcę aby tylko uruchomił i kontynuował działanie

No to zrób w iframe tak samo jak plik2.php.

I nie umieszczaj w tych ramkach żadnych funkcji, tylko goły kod do wykonania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1