Shell是tcsh。 PHP v5.1.6。 Redhat 5.7。 Safe_mode已关闭。
使用exec从浏览器运行php脚本:
这可以从命令行工作($ 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 );
?>
四重检查权限,一切看起来都不错。
谢谢!
答案 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";
这应解决您的所有问题。