phpenvironment-variablescommand-line-interface

export shell environment variable before running command from PHP CLI script


I have a script that uses passthru() to run a command. I need to set some shell environment variables before running this command, otherwise it will fail to find it's libraries.

I've tried the following:

putenv("LD_LIBRARY_PATH=/path/to/lib");
passthru($cmd);

Using putenv() doesn't appear to propagate to the command I'm running. It fails saying it can't find it libraries. When I run export LD_LIBRARY_PATH=/path/to/lib in bash, it works fine.

I also tried the following (in vain):

exec("export LD_LIBRARY_PATH=/path/to/lib");
passthru($cmd);

How can I set a shell variable from PHP, that propagates to child processes of my PHP script?

Am I limited to checking if a variable does not exist in the current environment and asking the user to manually set it?


Solution

  • I'm not 100% familiar with how PHP's exec works, but have you tried: exec("LD_LIBRARY_PATH=/path/to/lib $cmd")

    I know that this works in most shells but I'm not sure how PHP is doing things.

    EDIT: Assuming this is working, to deal with multiple variables just separate them by a space:

    exec("VAR1=val1 VAR2=val2 LD_LIBRARY_PATH=/path/to/lib $cmd")