PHP laten triggeren door andere PHP (non blocking)
Om foto's uit een IP-camera te trekken heb ik een PHP script gemaakt.
Dit PHP script haalt 5 foto's (achter elkaar) uit de camera.
Het "probleem" is dat dit proces redelijk wat tijd (meerdere seconden) in beslag neemt...
Ik zou daarom graag deze functionaliteit willen "uitfaseren" naar een los PHP scriptje.
Vervolgens wil ik vanuit de hoofd-PHP-file dat 2e scriptje laten uitvoeren wat op vervolgens "op het gemak" zijn ding gaat doen. Ondertussen kan het hoofdprogramma gewoon lekker doordraaien zonder tijdsverlies.
Hopelijk ben ik een beetje duidelijk met m'n verhaal?! En nog hopelijker ;) kunnen jullie me hiermee helpen...
Alvast super thanks voor 't meedenken!
Groet,
Sjef
Via een browser zou je gewoon (a)synchroon het foto script ook vanuit de browser aan kunnen roepen.
Bij een cron-job kun je een shell_exec doen via PHP CLI naar het foto script, met een "&" er achter ( https://stackoverflow.com/questions/222414/asynchronous-shell-exec-in-php#222445 - Linux). Maar zou het niet dan logischer zijn om voor de foto's een eigen cron-job onder te brengen. Stel nu dat het "hoofd PHP script" 2x wordt aangeroepen, dan ga je nu 2x dezelfde foto's ophalen. Als je gewoon vanuit het "hoofd PHP script" een vlaggetje zet dat er foto's opgehaald moeten worden, dan kan het foto-cron-script daarmee aan de gang. Zijn er 2 hoofd scripts die foto's willen, dan hoeft ie maar 1x foto's op te halen.
Het "hoofd PHP script" wordt aangeroepen via een extern "apparaatje". Daar heb ik dus geen invloed op.
Maar eigenlijk wil ik het zo houden dat het hoofd-script dus alles aanroept. Alleen met een "uitsplitsing" van het foto ophalen naar een nieuw script wat dus geen vertraging meer oplevert. Kan dat shell_exec niet ook gewoon vanuit een PHP script?
Een CRON-job komt in dit verhaal niet aan bod omdat alles "dynamisch" en "on the fly" moet gebeuren. Soms uren niets, en soms binnen 15 min. meerdere malen...
Gr,
Sjef
Quote:
Als je gewoon vanuit het "hoofd PHP script" een vlaggetje zet
Of misschien een queue in de vorm van een database-tabelletje als een soort van wachtrij? Lijkt me sowieso handig om ergens voortgang te tracken.
Ik wil eigenlijk gewoon een "achtergrond-taak" uitzetten d.m.v. dat 2e scriptje (waarmee de foto's van de IP-camera worden gehaald).
Zodra de hoofd-PHP die "achtergrond-taak" eenmaal heeft opgestart hoeft hij daar niet meer naar om te kijken. Veel ingewikkelder wil ik het niet maken.
Dan zou ik die shell_exec met background "&" gebruiken. Fire & forget.
Kan het zijn dat shell_exec geblokkeerd is? (op de NAS)
Ik krijg 't in ieder geval niet werkend...
Edit:
Ah, met cURL werkt het wel. Nice :-)
Er zit alleen 1 sec. vertraging in... Maar schijnbaar is dat normaal?!
Achja, het werkt in ieder geval wel!
Merci allemaal voor 't meedenken.
Voor de compleetheid hierbij de oplossing:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://10.10.10.10/cam.php');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_exec($ch);
curl_close($ch);
Ah, met cURL werkt het wel. Nice :-)
Er zit alleen 1 sec. vertraging in... Maar schijnbaar is dat normaal?!
Achja, het werkt in ieder geval wel!
Merci allemaal voor 't meedenken.
Voor de compleetheid hierbij de oplossing:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://10.10.10.10/cam.php');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_exec($ch);
curl_close($ch);
Gewijzigd op 09/08/2018 15:44:18 door sjef dresen
Idealiter staan cronscripts niet in de publieke directory maar sinds het een lokaal niet-geroutered IP is (en de webserver alleen lokaal bereikbaar is tenzij je poorten hebt gemapt?) maakt dit niet zoveel uit.