PHP laten triggeren door andere PHP (non blocking)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sjef dresen

sjef dresen

09/08/2018 13:07:16
Quote Anchor link
Beste allemaal,

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
 
PHP hulp

PHP hulp

22/12/2024 17:33:59
 
Rob Doemaarwat

Rob Doemaarwat

09/08/2018 13:28:36
Quote Anchor link
Roep je het "hoofd PHP script" via een browser aan, of via een cron-job?

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.
 
Sjef dresen

sjef dresen

09/08/2018 13:57:50
Quote Anchor link
Bedankt voor je snelle reactie Rob!

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
 
Thomas van den Heuvel

Thomas van den Heuvel

09/08/2018 14:13:27
Quote Anchor link
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.
 
Sjef dresen

sjef dresen

09/08/2018 14:16:57
Quote Anchor link
Hoezo zou dat handig zijn Thomas?

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.
 
Rob Doemaarwat

Rob Doemaarwat

09/08/2018 14:26:00
Quote Anchor link
Dan zou ik die shell_exec met background "&" gebruiken. Fire & forget.
 
Sjef dresen

sjef dresen

09/08/2018 15:02:38
Quote Anchor link
Thanks!

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);
Gewijzigd op 09/08/2018 15:44:18 door sjef dresen
 
Thomas van den Heuvel

Thomas van den Heuvel

09/08/2018 16:13:41
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.