Execute exe-filer med PHP

Tags:    php

<< < 12 > >>
Jeg har sat en apache-server op på min maskine med php5 og vil gerne kunne udføre en række funktioner med diverse filer som ligger på maskinen. Jeg har fundet ud af at slette filer med unlink() men kan ikke få den til at execute filer....

Det jeg i bund og grund gerne vil er at kunne starte en teamspeakserver op på min maskine via et link på mit website.

har kigget på funktionerne exec() og system(), men kan ikke få nogle af dem til at fungere....

Det skal lige siges at php ikke kører i safe-mode, så det er ikke dette der gør det.

Nogle der kan hjælpe?



19 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato
Normalt hænger exec() mens dit program afvikles, fordi exec venter på respons. Jeg har set noget med, at man skal skrive responset til en fil frem for direkte til browseren, men blev ikke helt klar over hvordan.

Men som noget helt andet, da jeg prøvede nogle forskellige ting, kan man med WScript.Shell tilføje nogle extra parameterer til exec kommandoen, som får apache til at undlade med at vente på responset.


Fold kodeboks ind/udKode 

Bemærk "3" og "false" efter kommandoen. Tre-tallet må formodes at være CPU-prioritet mens false er "wait for response"=false




Indlæg senest redigeret d. 13.04.2007 13:53 af Bruger #10216
Normalt hænger exec() mens dit program afvikles, fordi exec venter på respons. Jeg har set noget med, at man skal skrive responset til en fil frem for direkte til browseren, men blev ikke helt klar over hvordan.

Men som noget helt andet, da jeg prøvede nogle forskellige ting, kan man med WScript.Shell tilføje nogle extra parameterer til exec kommandoen, som får apache til at undlade med at vente på responset.


Fold kodeboks ind/udKode 

Bemærk "3" og "false" efter kommandoen. Tre-tallet må formodes at være CPU-prioritet mens false er "wait for response"=false


hvad med

Fold kodeboks ind/udKode 




Hvilken fejl giver den dig?



Får ingen fejlmelding..... I hvert fald ikke indenfor overskuelig fremtid.

Browseren står bare og siger "Venter på localhost..."

Fold kodeboks ind/udKode 


Har prøvet mange forskelige kombinationer.
Har kopieret både cmd.exe og psexec.exe over i min www-mappe.

Men resultatet udebliver.... Suk!



prøv at ligge filen i din rodmappe. f.eks. C:\
Fold kodeboks ind/udKode 




Samme resultat...



Fold kodeboks ind/udKode 


http://us2.php.net/manual/en/function.shell-exec.php

:)



Okay, jeg har nu prøvet at lave en php-fil, hvor jeg executer en exe-fil.

Filen test.php
<?
exec("c:\\\\cmd.exe /c c:\\\\Programmer\\\\AMSES\\\\Plate\\\\Plate.exe");
?>

Dette virker når jeg kører php-filen fra kommando-promten med "c:\\php\\php.exe c:\\test.php"

Det virker også når jeg bruger shell_exec() og system(), men ikke når jeg forsøger at køre den gennem browseren via http-serveren.

Min tanke var at det måske er noget med opsætningen af http-serveren...
Nogle ideer om hvad der er galt?




Umiddelbart ser det ud som om at du ikke kan komme ud af baggrunden af windows-fladen.

Dvs. at alt der bliver udført i baggrunden og at du derved ikke opdager at det kører. Det er lige meget hvordan man forsøger at eksekvere det. Både direkte, med batch filer, eller som windows genveje, så ryger det til baggrunden.

Hvis du evt. prøver at afvikle "notepad.exe" eller "calc" kan du se at de kører, men at de ligger i baggrunden og derfor ikke giver et vindue til at arbejde i.

Om du kan lave en php fil der eksekvere en anden php fil der eksekvere din exe fil, ved jeg ikke.



Det ser det ud til du har ret i.

Jeg kan se under processer i joblisten at plate.exe kører og at at cmd.exe kører to gange for hver plate.exe

Jeg har derfor udeladt kaldet til cmd.exe i php-filen, da den tilsyneladende ikke er nødvendig.

Fold kodeboks ind/udKode 


Så meget - så godt.... Men det afleder jo yderligere et par spørgsmål.

1) Kan jeg på en eller anden måde tvinge den til ikke at køre programmet i baggrunden?

2) Når jeg kalder min php-fil, så kommer der ikke noget svar til browseren, hvorfor den bare står og skriver "Venter på localhost..." i statusbjælken. Den har eksekveret filen, men sender først svar tilbage, når jeg afslutter plate.exe manuel ved hjælp af Joblisten. Hvordan kan jeg komme udenom dette? Jeg vil jo gerne have et response på den ene eller anden måde.




Indlæg senest redigeret d. 13.04.2007 12:52 af Bruger #10228
<< < 12 > >>
t