Autor Zpráva
Paul
Profil *
Zdravim,
dá se nějakým způsobem vyřešit to, když potřebuji vložit do prováděného php skriptu další skript s předáním proměných s tím, že nechci čekat na ukončení vloženého, nepotřebují již z něj žádný výstup - jeho provádění trvá déle.
Pokoušel jsem funkci exec() ,ale nikdy se ten vložený skript neprovedl.

Díky za nápady
Alphard
Profil
exec() spouští externí program. Vložit další script včetně předání proměnných můžete klasickým include, zpracovávat by se měl začít ihned.
Konkrétní rada záleží na návrhu, nejste moc sdílný.
Paul
Profil *
Omlouvám se, večer jsem už neměl sílu.

Dobrá, takže mám skript na který volá datová jednotka (tudíž je klientem a s prohlížeče se nikdy vykonávat nebude), která mu předává data, v případě, že nastane nějaká mnou definovaná podmínka, tak bych potřeboval zavolat skript a předat mu nějaké proměné, s tím, že se ten volaný vykonává delší dobu a já nechci aby se na něj čekalo, ale aby se původní skript provedl hned až do konce, bez čekání na odpověď vloženého skriptu. Já si to slále představuji, že ten druhý jen "pošťouchnu". V tom volaném php je totiž vykonání odeslání SMS zprávy přes API, která volá další server a vpřípadě odesílání více sms operace trvá,chybové výstupy bych si představoval, že budu ukládat například do nějakého logu tzn, že původnímu skriptu nechci již nic předávat.
Zjednodušeně:
<?php
$a=1;
$b=2;
$c=3;
$vykonat_skript=1;

if($vykonat_skript==1)
      
      # ----> s tím že se pouze nějakým způsobem zavolá(pošťouchne) a bude pokračovat dále ve vykonávání
      #a budou v něm platit, nebo budou nějakým způsobem předány proměné
      include_once "./smsapi.php";
      
      
     #zde bude například ukládání do databáze a zobrazí se ještě výstup pro jednotku např.:
       echo $a + $b + $c;
       
?>
Alphard_
Profil *
Jestli chcete paralelní zpracování tak nejlépe přes http pingnout další stránku, která hned uzavře spojení ale bude pracovat dál. Předání dat pomocí get nebo post.
Paul
Profil *
ano přesně tak, můžete mě nějak napingnout? Snažím se něco vygooglit, ale nic nenalézám..
Děkuji
Alphard_
Profil *
Paul:
V čem je problém, předat proměnné do adresy a zavolat soubor, nebo v tom volaném uzavřít spojení?
Paul
Profil *
tak nejprve obojí, ale teď už jsem se dopátral k tomu jak zavolat skript a předat data, narazil jsem na funkci PCNTL , tu jsem si zkusil doinstalovat a povolit v php.ini, ale nedařilo se.

No a nyní jsem vymyslel toto, a teď je problém, že nevím jak spojení zavřít dříve než se dokončí volaný skript

<?php
         #hlavička
        $params = stream_context_create(array('http' => array(
                   'method' => 'GET',
                    'header' => 'Content-type: text/html',
                    'encoding' => 'UTF-8'
        )));

#otevření spojení
$handle = fopen("http://localhost/test.php?var=OK",'rb',false,$params);

fclose($handle);

echo 'Konec skriptu';
?>

a ve volaném skriptu test.php je:

<?php

#zpoždění 5 vteřin abych poznal zda se čeká na vykonání (nevím, jestli to není blbost)
sleep(5);

$soubor= fopen("abrakadabra.txt", "w+");
fwrite($soubor, $_GET['var']);
fclose($soubor);

?>
Paul
Profil *
tak jsem vytvořil tohle, jen se chci zeptat jestli to není tak trochu "prasarnička", když budu potřebovat skript zavolat vícekrát (max třeba 20krát) vždy s předáním jiných parametrů

<?php
    for($i=0;$i < 5; $i++) {
$f = fsockopen("localhost", 80, $errno, $errstr, 5);

if ($f) 

{

  fwrite($f, "GET /test.php?var=1&cykl=c$i HTTP/1.1\n".
                      
              "Host: localhost\n".
                 
             "Connection: Close\n\n");
                }
  fclose($f);  
  }
echo 'Konec skriptu';

?>

skript test.php:

<?php
sleep(5);

$soubor= fopen("./pokus/". $_GET['cykl'] .".txt", "w+");
fwrite($soubor, $_GET['var']);
fclose($soubor);

?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: