Hoi! In een PHP-scriptje maak ik gebruik van de exec() functie om een .exe te runnen. Ik heb alleen het probleem dat wanneer ik dit scriptje uitvoer, de .exe vroegtijdig afgekapt lijkt te worden. De time limits van zowel mijn server (IIS) en PHP zijn allebei ruim voldoende.



Via het CMD venster kan ik hem wel volledig laten uitvoeren, zoals je in het bovenstaande plaatje ziet. Tussen de eerste string "www....cles" en de "message sent" zit ongeveer 1 seconde tijd, die PHP niet meepakt. Het result is ook een raar getal (geheugenadres?), terwijl deze normaal 0 of 1 is.

Mijn PHP code:
<?php

$result = 1;
if(isset($_GET)) {
//$address = $_GET["address"];
//unset($_GET["address"]);

$directory = 'C:\inetpub\wwwroot\msmqfak\MQSend.exe';
$command = escapeshellcmd($directory .' '. $_GET["to"] .' "'. $_GET["title"] .'" '. $_GET["body"]);

$answer = exec($command, $output, $result);
}

echo '<b>Command: </b>'.$directory .' '. $_GET["to"] .' "'. $_GET["title"] .'" '. $_GET["body"].'<br />'; // Negeer deze even ;)
echo '<b>Output: </b><br />';
print_r($output);
echo '<br />';
echo '<b>Result: </b>'.$result.'<br />';
echo '<b>Answer: </b>'.$answer;

?>

Hebben jullie een idee? Ik heb op verschillende websites meerdere mogelijkheden langs zien komen, maar daarmee heb ik het niet op kunnen lossen.

Nadere info:
Ik heb laatst als projectje een W2008 R2 server opgezet waar een website (met IIS) op draait. Op deze en een andere server in het active directory domain draait de Microsoft Message Queue. De .exe die ik aanroep genereert een SOAP bericht die hem naar het juiste adres doorstuurt.
Klinkt vooral alsof je je commando niet mag uitvoeren vanuit PHP, wat een afwijkende returnvalue kan opleveren. Helaas zijn returnvalues niet gestandaardiseerd, dus je kan er ook niet echt op zoeken.
Het .exe programma gaat gelukkig zelf na of er genoeg permissies zijn om het bericht te verzenden. Deze heb ik er eerder uitgewerkt, dus als het goed is zou dit geen probleem meer moeten zijn.
Maar is dat ook zo vanuit je webserver gebruiker? Dat is het belangrijkste.
Wanneer ik het uitvoer via de browser (webserver gebruiker) en ik heb niet genoeg permissies geeft de output iets zoals "insufficient permissions to send message" weer. Inmiddels heb ik die veranderd en zegt hij dat niet meer, dus ik hoop dat dat wel het geval is.
Ik kan ook niet zeggen dat ik ervaring heb met IIS icm PHP, maar het voelt toch aan alsof het een probleem is met permissies, ik zou even moeten nazoeken hoe commando's onder Windows gedraaid worden binnen exec(), maar onder Linux wordt er eerst een shell omheen gestart, waar je uiteraard ook rechten voor moet hebben.

Toevoeging op 28/11/2015 00:44:40:

Je zou ook een poging kunnen doen mbv popen(), misschien kun je daar wat duidelijkere output van krijgen.
Ik zal morgen meer onderzoek gaan doen naar de permissies en popen, bedankt voor je reacties!
Na wat meer onderzoek en tekort aan documentatie vanaf de kant van Microsoft heb ik besloten om het anders aan te pakken. De IIS webserver maakt gebruik van een IUSR account. Deze heeft __ergens__ te weinig permissies (zoals je zei). Gezien mijn tekort aan ervaring met Active Directory, de diepte die dit onderwerp in korte tijd induikt en mijn tekort aan tijd doe ik het anders.

Ik ga nu gebruik maken van de Microsoft TaskScheduler, die kan de berichten vanuit een map pollen en versturen als normale gebruiker.

Bedankt voor de hulp!

Reageren