PDA

Bekijk Volledige Versie : PHPCLI, shell_exec op 64bit windows



Cakkie
10/08/10, 23:24
Ik heb een script dat op een 64bit windows server zou moeten draaien.
Het script maakt gebruik van shell_exec om commando's naar MS DNS Server te geven via dnscmd.exe. Het probleem is dat dit programma een 32bit programma is, en de PHP shell_exec functie (en aanverwanten) gebruik maken van de 64bit cmd.exe in de SysWOW64 folder ipv de 32bit versie in de System32 folder.

Iemand een idee hoe ik tegen PHP kan zeggen dat hij de 32bit versie moet gebruiken? Ik heb al geprobeerd om het commando dat ik probeer uit te voeren te forceren door er C:\Windows\System32\cmd.exe /c voor te zetten, maar dat werkt ook niet omdat PHP dan eerst die 32bit cmd.exe probeert te starten via de 64bit cmd.exe, wat ook niet gaat.

Iemand die weet wat ik hier aan kan doen?

gjtje
11/08/10, 00:13
Welke gebruikt ie nou? Alles in de SysWOW64 folder is juist 32 bit.
Is je PHP 32 of 64 bit?

Cakkie
11/08/10, 08:00
Hij gebruikt die in de SysWOW64 folder, dat kan ik duidelijk zien via procmon. Natuurlijk wel verwarrend om 64bit in System32 te steken en 32bit in WOWSys64, maar kom, ze zullen er wel een goede reden voor gehad hebben zeker ;)

Als ik manueel de cmd start en ik start die in de SysWOW64 folder, dan kan ik het programma dnscmd niet runnen. Als ik die van de System32 folder gebruik (de default als ik gewoon windowstoets + r > cmd doe), dan werkt het programma wel. Het probleem is dus dat PHP blijkbaar die in de SysWOW64 folder gebruikt.


via C:\Windows\SysWow64\cmd.exe
C:\>dnscmd . /EnumZones
'dnscmd' is not recognized as an internal or external command,
operable program or batch file.


via C:\Windows\System32\cmd.exe
C:\>dnscmd . /EnumZones
E:\backupns>dnscmd . /EnumZones

Enumerated zone list:
Zone count = 15

Zone name Type Storage Properties

. Cache File
aaaaaaaaaaaaa.be Primary File
...
zzzzzzzzzzzzzzz.be Primary File

Command completed successfully.


Ik heb PHP geinstalleerd via de web platform installer, en die is automatisch in de Program Files (x86) folder terecht gekomen. Ik ga er dus vanuit dat dit de 32bit versie is.

C:\>php -v
PHP 5.2.14 (cli) (built: Jul 27 2010 10:49:36)


So basically, moet ik hier van afleiden dat de rollen omgekeerd zijn? Ik probeer een 64bit toepassing te starten vanuit een 32bit shell, omdat het een 32bit PHP betreft? (en dan zou de oplossing zijn om een 64bit PHP te installeren?)

Cakkie
11/08/10, 09:21
Ok, blijkbaar is er geen 64bit versie van PHP voor Windows (tenzij je alles zelf compileerd), en heb ik op internet ook allerhande berichten gevonden waaruit blijkt dat de 64bit versie ook nog niet echt stabiel werkt (vooral dan een aantal libs die het laten afweten).

Ik heb dan maar een 32bit versie van dnscmd.exe van een 32bit server geplukt, en als ik die aanroep werkt het wel.