0

外壳是 tcsh。PHP v5.1.6。红帽 5.7。安全模式关闭。

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

  1. 通过 bash 脚本上的 source 命令配置环境
  2. 根据 bash 脚本设置的环境运行 python 程序(程序输出到 STDOUT)

这可以从命令行($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 );
?>

四重检查权限,一切看起来都很好。

谢谢!

4

1 回答 1

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";

这应该可以解决您的所有问题。

于 2013-11-13T01:49:01.580 回答