Shell是tcsh。 PHP v5.1.6。 Redhat 5.7。 Safe_mode已closures。
使用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程序返回一个错误,指出环境设置不正确(无法find某些库等):
<?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 – 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";
这应该解决你所有的问题。