Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] exec command / certificate...

Pagina: 1
Acties:

  • Atmoz
  • Registratie: Juli 2001
  • Laatst online: 21-11 14:23

Atmoz

Techno!!

Topicstarter
Beste allemaal,

Ik heb een klein "test-tooltje" gemaakt waarin ik gebruik maak van een tweetal certificaten.
Dit is een executable die ik via de command line (Windows) kan draaien. Ik geef een parameter mee, en ik krijg een bepaalde output.

Alles werkt tot zo ver. Ook het gebruik van de certificaten werkt.
Dus als ik in de DOS prompt het volgende type: E:\testje4 dit_is_de_input
Dan komt er netjes als output "Hello World, het werkt :-)"

Het probleem nu:

Wanneer ik deze executable wil opstarten via een PHP script:
<?php

exec("e:\\testje4.exe dit_is_de_input",$out,$code);

foreach ($out as $v) {
echo "$v";
echo "<br>";
}

echo "php script end";

?>
Dan blijft de pagina runnen (het PHP script komt niet ten einde).
Als ik echter de code in de executable waarin de certificaten gebruikt wordt "uitschakel", en gewoon met Console.WriteLine("test") iets naar de commandline schrijf, dan laat m'n PHP script deze output wel mooi zien.

Er gaat in de executable dus iets fout waar de certificaten nodig zijn.
Waar ik zelf aan zat te denken:

Als ik zelf (als ingelogde gebruiker dus) het programmaatje "handmatig" opstart ben IK zelf de gebruiker die het opstart (en dan worden de certificaten dus ook gevonden). Maar als het programmaatje via PHP wordt aangeroepen, dan is de IIS user (ik draai PHP in IIS) diegene wat het programma opstart (dat denk ik tenminste) en daardoor kan hij die certificaten niet vinden.

Is dat een logische gedachte? En hoe kan ik dit het beste oplossen?
Ik zou dus graag die executable willen opstarten via dat PHP scriptje...

Hopelijk is mijn verhaal enigszins duidelijk :) Alvast bedankt in ieder geval voor 't meedenken!


[edit]

Als ik het op een andere computer waar i.p.v. IIS met PHP, Apache met PHP draaid, dan werkt het wel :) (das tenminste iets ;)) maar hoe kan dat nu dat het via IIS niet werkt terwijl andere executables (of zelfs dezelfde alleen dan zonder dat certificaat gedoe) wel gewoon werken...

[ Voor 8% gewijzigd door Atmoz op 19-07-2013 10:30 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Het proces is misschien blocking omdat het user interaction nodig heeft? Bijvoorbeeld omdat het proces geen leesrechten heeft o.i.d.? Dit kun je ondervangen door de proc_* functies te gebruiken en te kijken wat het proces precies naar stdout of stderr schrijft voordat 't blockt. Het Symfony Process component heeft hier een hamdige set wrappers voor, mocht het low level schrijven je te veel tijd kosten. Ik weet trouwens niet hoe goed dat allemaal werkt op Windows, kan best zijn dat het daar allemaal net even anders werkt.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Debug simpelweg je eigen gemaakte test-tooltje om te zien waarom het niet werkt...

  • Atmoz
  • Registratie: Juli 2001
  • Laatst online: 21-11 14:23

Atmoz

Techno!!

Topicstarter
Het proces is niet blocking. Er zitten geen MsgBoxes of zo in... Binnen 2 sec. stopt het tooltje, en sluit zichzelf af. Het gekke is dus ook nog dat het met Apache wel werkt...

Debuggen heb ik de hele tijd gedaan, maar dat stopt op een gegeven moment ook: hoe moet ik debuggen als de executable vanuit een andere user (via PHP in IIS) wordt aangeroepen? En dáár gaat het nu juist ook mis... Dat wordt bewezen door de volgende 2 testen:

- alle andere executables (waar geen certificaten worden gebruikt) werken wel netjes via PHP in IIS
- de betreffende executable werkt wel gewoon via DOSprompt (en is non-blocking) op diezelfde PC.

Of kan het liggen aan het feit dat Apache (waar het dus wél werkt) via dezelfde user is geïnstalleerd dan de user die recht heeft om met die certificaten te werken? En dat ik daar dus geen probleem heb dat het via andere "accounts" werkt...

  • Robbiedobbie
  • Registratie: Augustus 2009
  • Laatst online: 16:27
Het kan inderdaad rechten zijn.

Hoe je je programma kan debuggen wanneer het door php wordt gelaunched? Dat is redelijk simpel. Wanneer het programma blijft draaien voor een iets langere tijd, kun je gewoon via visual studio handmatig de debuggen koppelen, waarna je alsnog je applicatie kan debuggen.

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
atmoz schreef op zaterdag 20 juli 2013 @ 07:29:
hoe moet ik debuggen als de executable vanuit een andere user (via PHP in IIS) wordt aangeroepen? En dáár gaat het nu juist ook mis...
Als je echt niets anders kan verzinnen dan kan je altijd nog debug-info wegschrijven in een bestand.
Of kan het liggen aan het feit dat Apache (waar het dus wél werkt) via dezelfde user is geïnstalleerd dan de user die recht heeft om met die certificaten te werken? En dat ik daar dus geen probleem heb dat het via andere "accounts" werkt...
Zeer waarschijnlijk ligt het idd hieraan...
Pagina: 1