[php] Ander proces 'beheren'

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor mijn werk moet ik een website bouwen waarmee ik bepaalde berekeningen kan doen mbv een applicatie. Ik loop tegen een aantal dingen aan waar ik maar slecht uit kan komen.

De bedoeling is dat er een bestand geupload wordt, daarna in een database opgeslagen wordt en vervolgens wordt het bestand gebruikt om in externe applicatie berekeningen uit te laten voeren.

De eerste stappen gingen vrij gemakkelijk, de problemen begonnen toen de applicatie berekeningen moest gaan uitvoeren. De externe applicatie werkt alleen in grafische modus (geen console modus beschikbaar...) en wordt momenteel uitgevoerd via een autoit script. Dit script doet gewoon keihard mouseclick events en keyboard events naar het gefocusde venster sturen.

De eerste vraag is dus, is het ook mogelijk om een applicatie op een andere manier aan te kunnen sturen? Ik heb zelf al zitten denken om direct window messages naar het venster te versturen, maar dit is (vooralsnog) te ingewikkeld voor mij (hints zijn altijd welkom).

Een volgende probleem is, er wordt een bestand gebruikt als invoer voor de externe applicatie, dit bestand kan 10k zijn, maar ook 500k. Uiteraard beinvloedt dit ook de snelheid van de berekeningen. Tijdens het verwerken van alle gegevens, staat de client dus gewoon te wachten. Het is dan (voor mij) ook logisch dat er dan ff een bericht wordt getoond dat het script bezig is. Ik dacht zelf dit te doen door eerste de externe applicatie te starten en dan direct daarna een redirect naar een tijdelijke pagina, welke automatisch redirect naar een resultaten pagina na x seconden of zo. Het probleem is echter dat popen en/of proc_open het script blokkeert en dus de redirect niet direct uitvoert, maar als de externe applicatie gesloten wordt (wat er overigens ook nog voor zorgt dat de php script timeout niet 100% functioneert). Is er een manier om een proces te starten en daarna direct door te gaan met het php script?

Op de php site heb ik wel ergens een 'oplossing' gelezen, welke dmv start <commando> dit wilde oplossen, dit werkt echter hier niet.

Systeem:
Windows XP
Apache
Php 5.2.1

Acties:
  • 0 Henk 'm!

  • flashin
  • Registratie: Augustus 2002
  • Laatst online: 17-12-2023
is er geen mogelijkheid om de berekeningen over te zetten naar php?

Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Heeft die applicatie geen COM interface? Dan kun je daarmee scripten :)

Eventueel zou je dit kunnen doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
for($i = 0; $i < 128; $i++)
{
  // random output genereren zodat browsers zoals IE de output accepteren
  echo "<!--- blaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaat -->";
}
echo "<script type=\"text/javascript\">"
echo "setTimeout('location.href = \"pleasewait.html\"', 2000);";
echo "</script>"

flush();     // alles wat er nu in de 'buffer' zit naar de client doorsturen

proc_open("commando");
?>

Op deze manier kun je je client redirecten naar een andere pagina en wordt je script toch uitgevoerd, zie ook www.php.net/flush

We are shaping the future


Acties:
  • 0 Henk 'm!

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 14:16

Super_ik

haklust!

Verwijderd schreef op maandag 04 juni 2007 @ 14:51:
De externe applicatie werkt alleen in grafische modus (geen console modus beschikbaar...) en wordt momenteel uitgevoerd via een autoit script. Dit script doet gewoon keihard mouseclick events en keyboard events naar het gefocusde venster sturen.
ik ben wel benieuwt wat er gebeurt als je 2 clients hebt :) of op F5 ramt :P

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Er wordt een lock geplaatst op de applicatie en het autoit script wacht totdat het lock bestand weer verwijdert is. Dit zorgt ervoor dat er maar één applicatie tegelijk kan runnen (dat is één van die redenen waarom ik het anders wil), maar als op één of andere reden het lock bestandje niet verwijdert is, dan kan er geen enkele request meer afgehandeld worden :(

Het probleem is dat ik misschien wel te weinig van de applicatie afweet. Ik zal is vragen of er COM mogelijkheden zijn, de persoon in kwestie is echter morgen pas weer aanwezig :(

edit:
Flush werkt prachtig in een normale php pagina, we werken hier echter met CMS Made Simple, welke al ergens een flush uitvoert... :( Krijg dus een mooie error :'(

code:
1
Warning: Cannot modify header information - headers already sent in C:\website\index.php on line 282

[ Voor 21% gewijzigd door Verwijderd op 05-06-2007 10:05 ]


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Die fout krijg je meestal als je output hebt voordat je een header(); hebt... dat mag niet :p

We are shaping the future


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik weet het, heb net de documentatie grondig doorgelezen. Het probleem ligt em in index.php waar de html verstuurd wordt nadat er een header is verstuurd. Ik vermoed dat mijn code daarvoor wordt uitgevoerd en zodoende een error geeft.

[ Voor 35% gewijzigd door Verwijderd op 05-06-2007 10:40 ]


Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
je kunt toch ook zeggen dat hij de applicatie op de achtergrond moet uitvoeren... weet niet meer precies het commando... ik meen dat dat in unix/linux was: "& applicatie" ... maar het is lang geleden dat ik dat gebruikt heb, dus weet het niet zeker... in windows weet ik het ook niet, maar bestaat het vast ook...

iig, als hij het op de achtergrond uitvoert, geeft je shell commando dus meteen iets terug, waardoor je php-script verder kan...
Pagina: 1