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?
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?
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.
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.
Przerwać działanie funkcji przez return
możesz zawsze.
Z tego co piszesz to już 3 plik.... Czyli makaron się nakręca.
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
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.
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
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.
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?
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();
@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 :) ).
@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.
@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); } }
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.