我正试图通过我的PHP接口在我的计算机上运行一个c++可执行文件。我在托管PHP的计算机上没有管理权限,因此无法为我的c++将适当的项目添加到我的PATH中。
我能够在PHP中调用exec
函数,并通过批处理文件运行我的程序。在我的批处理文件中,我可以将我的路径变量设置为我需要的值
以下是我目前正在做的事情(runVideoparser
是批处理文件):
exec("C:''Users''hewittjc''Desktop''runVideoParser", $output, $return);
echo "Program returned $return.";
当在批处理中将一个固定参数传递给我的c++时,上面的操作很好。
然而,我的问题是,我需要能够每次向程序传递不同的参数。如果我通过批处理文件运行它,那么我就失去了这种能力。
所以我的问题是,我如何才能:
1) 通过PHP打开命令提示符(我运行的是windows)
2) 通过PHP 在提示中设置我的路径变量
3) 然后,使用相同的提示来保留路径变量,运行我的程序,将所需的参数传递给它。
我想我可以在PHP中生成批处理,然后运行它,但我正在寻找更优雅的解决方案。
理论上,您可以这样做:
$old_path = getenv("PATH");
$new_path = "/my/additional/path:$old_path";
putenv("PATH=$new_path");
system("command -with flags -and args -and such");
但是,如果主机打开了"安全模式",并且PATH
不在safe_mode_allowed_env_vars
指令中,则这将不起作用。