Search code examples
phpwindowscmdwindows-console

How to execue PHP scripts in the background using EXEC() and CMD


I can't use the $com = new Com('WScript.shell'); way, it's causing problems on my system. Probably I need to upgrade my PHP because it's very old (5.2), but I suppose what I'm trying to do is not version dependent.

I'm running PHP on Windows 2008 64-bit. Where I can run a command prefixed with start to run the command on a separate console.

start php myscript.php

If this is executed from the command line, it starts a new console for the script.

I need to do the same from PHP using exec only.

exec("CMD /C start php myscript.php");

/C is to terminate the CMD session when the script finishes.

But it's not giving the same results, it still waits for the script to terminate !


Solution

  • This shoul work:

    exec("start /B php myscript.php");
    

    Also close all standard streams at the very beginning of myscript.php:

    fclose(STDIN);
    fclose(STDOUT);
    fclose(STDERR);
    

    If you want echo to still work, you can open a file for writing to stdout after closing the standard streams:

    $STDIN = fopen('/dev/null', 'r');
    $STDOUT = fopen('myscript.log', 'wb');