Unix/Windows, Opsætning baggrundsproces? fra php kode

Indlæg af Hanne Mølgaard Plasc

Problem



Så jeg fandt en funktion fra http://php.net/manual/en/function.exec.php[4]


function execInBackground($cmd) {
if (substr(php\_uname(), 0, 7) == "Windows"){
    pclose(popen("start /B ". $cmd, "r")); 
}
else {
    exec($cmd . " > /dev/null &");  
}
}


Windows brug:


pclose(popen('start /B php path/to/background\_cron.php', 'r'));


Unix Anvendelse:


exec('php path/to/background\_cron.php >> path/to/background\_error.log &')


Men når disse linjer bliver kaldt, sker der ikke noget (efter at have ventet 5 minutter). Gør jeg noget galt? før disse linjer bliver aktiveret, har jeg en fil\_eksisterer, om min vej/til/background\_cron.php eksisterer, og hvis den ikke gør det, vil den returnere en fejl.


På live unix-serveren er alle mappetilladelser indstillet til at skrive, læse, udføre for ejer, gruppe, offentligt (0755) og filtilladelser er indstillet til at læses til ejer, gruppe, offentligt (644). Background\_log kommer op tom efter at unix-kommandoen kører, det skaber 4 nye tomme linjer (\ n), men returnerer ikke nogen forventninger

Bedste reference


En ting, der er lidt mærkeligt i Windows, er, at siden webserveren kører som en anden bruger, lancerer den apps i sit eget brugerrum - ikke dit skrivebord.


Det er muligt, at processen starter og ikke findes i din procesliste - tjek den for alle brugere. Kontroller også begivenhedsloggen, hvis den forsøger at køre, men kaster en undtagelse


En anden mulighed er, at webbrugeren ikke har tilladelser til at udføre kommandoen. Se på, hvem app-poolen kører som og tjek deres tilladelser til de pågældende mapper.


Pas på, at du ikke skaber sikkerhedshuller ved at tillade webserveren at køre vilkårlig kode.