PHP exec():运行bash脚本来配置环境然后执行Python程序

时间:2013-11-13 01:38:30

标签: php linux bash shell

Shell是tcsh。 PHP v5.1.6。 Redhat 5.7。 Safe_mode已关闭。

使用exec从浏览器运行php脚本:

  1. 通过bash脚本上的source命令配置环境
  2. 运行一个依赖于bash脚本设置的环境的python程序(程序输出到STDOUT)
  3. 这可以从命令行工作($ shell = tcsh):

    /bin/bash -c "source /path-to-config-bash-script/config.sh; /bin/path-to-python /path-to-python-program/prog.py 2>&1"
    

    这不是。 Python程序返回一个错误,指示环境设置不正确(无法找到某些库等):

    <?php
    ....
    $cmd = "/bin/bash -c \"source /path-to-config-bash-script/config.sh; /bin/path-to-python /path-to-python-program/prog.py 2>&1\"";
    $ret_val = exec( $cmd, $ret_arr, $err );
    ?>
    

    四重检查权限,一切看起来都不错。

    谢谢!

1 个答案:

答案 0 :(得分:1)

有四点需要注意。

1 - PHP不得使用safe_mode来利用exec()

2 - shell脚本脚本需要在文件顶部声明#!/bin/bash,而不是传递到exec()

3 - python脚本必须在脚本顶部有#!/usr/bin/python,而不是试图通过exec()语句执行它。

4 - 遍历到脚本的所有目录都必须是可读的。

所以决赛应该是这样的:

$cmd = "/path-to-config-bash-script/config.sh; /path/to-python/program/prog.py 2>&1";

这应解决您的所有问题。